使用 Web 身份联合验证 - Amazon DynamoDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Web 身份联合验证

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

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

  • Login with Amazon

  • Facebook

  • Google

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

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

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

要展示如何在 DynamoDB 中使用 Web 联合身份验证,请重新访问GameScores中介绍的表。使用 IAM 策略条件进行精细访问控制这是的主键GameScores

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

类型:字符串
属性名称: GameTitle

类型:字符串

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

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

当用户想要玩游戏时,他可从游戏应用程序登录其 Login with Amazon 账户。然后,该应用程序调用 Amazon Security Token Service (Amazon STS),提供 Login with Amazon 应用程序 ID 并申请成为会员GameRole。 Amazon STS根据GameRole策略文档,向应用程序返回临时Amazon凭证并允许其访问GameScores表。

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

Web 身份联合验证概述

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

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

  3. 该应用程序调用 DynamoDB 来访问该表。GameScores由于它假设了 GameRole,因此该应用程序受与该角色相关的安全策略的约束。策略文档可防止用户访问不属于自己的数据。

再说一遍,以下是相应的安全策略 GameRole,如下所示使用 IAM 策略条件进行精细访问控制

{ "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 操作处理。该表中的其他项目均不可访问 此外,只有策略中列示的特定属性方予访问。