Amazon DynamoDB
开发人员指南 (API Version 2012-08-10)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

使用 Web 联合身份验证

如果您正在为大量用户编写应用程序,您可以选择使用 Web 联合身份验证 进行身份验证和授权。使用 Web 联合身份验证不必逐一创建 IAM 用户;相反,用户可以登录到身份提供商并从 AWS Security Token Service (AWS STS) 获取临时安全证书。然后,应用程序可以使用这些证书访问 AWS 服务。

Web 联合身份验证支持以下身份提供商:

  • 以 Amazon 登录

  • Facebook

  • Google

有关 Web 联合身份验证的其他资源

以下资源可帮助您详细了解 Web 联合身份验证:

Web 联合身份验证的示例策略

为展示 Web 联合身份验证如何与 DynamoDB 配合使用,我们再次使用 使用 IAM 策略条件实现精细访问控制中引入的 GameScores 表。这是 GameScores 的主键:

表名称 主键类型 分区键名称和类型 排序键名称和类型
GameScores (UserId, GameTitle, ...) 复合键 属性名称:UserId 类型:字符串 属性名称:GameTitle 类型:字符串

现在假设移动游戏应用程序使用该表,并且此应用程序需要支持数千甚至数百万用户。在这种规模下,在 GameScores 表中管理单个应用程序用户并保证每位用户只能访问他们自己的数据将变得十分困难。幸运的是,许多用户已有某个第三方身份识别提供商的账户(如 Facebook、Google 或 Login with Amazon),因此可以利用这些提供商执行身份验证任务。

使用 Web 联合身份验证执行此操作,应用程序开发人员必须向身份识别提供商注册此应用程序(如 Login with Amazon)并获取唯一应用程序 ID。然后,开发人员需要创建一个 IAM 角色。(在该示例中,我们将该角色命名为 GameRole。)该角色必须有附加的 IAM 策略文档,指定应用程序可以访问 GameScores 表的条件。

当用户想要玩游戏时,他可在游戏应用程序通过 Login with Amazon 账户登录。应用程序会调用 AWS Security Token Service (AWS STS) 以提供 Login with Amazon 应用 ID 和请求的 GameRole 成员身份。AWS STS 会返回临时 AWS 证书到应用程序并允许其访问 GameScores 表(遵循 GameRole 策略文档)。

下图显示了这些部分是如何组合到一起的。

Web 联合身份验证概览

  1. 应用程序调用第三方身份提供商对用户和应用程序进行身份验证。身份提供商会返回 Web 身份验证令牌到应用程序。

  2. 应用程序调用 AWS STS 并将 Web 身份验证令牌作为输入传递。AWS STS 授权应用程序并授予其临时 AWS 访问证书。应用程序可担任 IAM 角色 (GameRole) 并根据该角色的安全策略访问 AWS 资源。

  3. 应用程序调用 DynamoDB 以访问 GameScores 表。因为应用程序已担任 GameRole,因此要受与该角色关联安全策略的制约。策略文档可防止用户访问不属于自己的数据。

同样,这是 GameRole 的安全策略,显示在 使用 IAM 策略条件实现精细访问控制

Copy
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccessToOnlyItemsMatchingUserID", "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Query", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:BatchWriteItem" ], "Resource": [ "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores" ], "Condition": { "ForAllValues:StringEquals": { "dynamodb:LeadingKeys": [ "${www.amazon.com:user_id}" ], "dynamodb:Attributes": [ "UserId", "GameTitle", "Wins", "Losses", "TopScore", "TopScoreDateTime" ] }, "StringEqualsIfExists": { "dynamodb:Select": "SPECIFIC_ATTRIBUTES" } } } ] }

Condition 子句决定 GameScores 中的哪些项目对应用程序可见。它通过比较 Login with Amazon ID 与 UserId 中的 GameScores 分区键值来实现此目的。只有属于当前用户的项目能够使用此策略中列出的 DynamoDB 操作进行处理;表中的其他项目均不可访问。此外,只有策略中列示的特定属性方予访问。