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

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

使用 Amazon Cognito 身份来源

经过验证的权限与 Amazon Cognito 用户池密切配合。Amazon Cognito JWTs 的结构是可预测的。经过验证的权限可以识别这种结构,并从其中包含的信息中获得最大收益。例如,您可以使用 ID 令牌或访问令牌实现基于角色的访问控制 (RBAC) 授权模型。

新的 Amazon Cognito 用户池身份源需要以下信息:

  • 的 Amazon Web Services 区域。

  • 用户池 ID。

  • 例如,您要与身份源关联的委托人实体类型MyCorp::User

  • 例如,您要与身份源关联的委托人组实体类型MyCorp::UserGroup

  • 您想要授权的用户池 IDs 中的客户端,以便向您的策略存储库发出请求。

由于已验证权限仅适用于相同的 Amazon Cognito 用户池 Amazon Web Services 账户,因此您无法在其他账户中指定身份来源。例如,Verified Permissions 会将实体前缀(您在作用于用户池主体的策略中必须引用的身份源标识符)设置为用户池的 ID。us-west-2_EXAMPLE在这种情况下,您可以将该用户池中的用户引用a1b2c3d4-5678-90ab-cdef-EXAMPLE22222us-west-2_EXAMPLE|a1b2c3d4-5678-90ab-cdef-EXAMPLE22222

用户池令牌声明可以包含属性、范围、群组 IDs、客户和自定义数据。Amazon Cognito 能够在 JWTs已验证的权限中包含可能有助于做出授权决策的各种信息。这些指令包括:

  1. 带有cognito:前缀的用户名和群组声明

  2. 使用自定义用户属性 custom: prefix

  3. 在运行时添加了自定义声明

  4. OIDC 的标准声明,比如和 sub email

我们将在中的已验证权限政策中详细介绍这些声明以及如何管理这些声明将 Amazon Cognito 令牌映射到架构

重要

尽管您可以在 Amazon Cognito 令牌到期之前将其撤销 JWTs ,但这些令牌被视为具有独立签名和有效性的无状态资源。符合 JSON Web Token RFC 7519 的服务需要远程验证令牌,无需向发布者进行验证。这意味着,Verified Permissions 可以根据已撤销或向后来被删除的用户颁发的令牌来授予访问权限。为了降低这种风险,我们建议您创建有效期尽可能较短的令牌,并在想要删除授权以终止用户会话时撤消刷新令牌。有关更多信息,请参阅通过撤消令牌结束用户会话

以下示例说明如何创建引用与委托人关联的某些 Amazon Cognito 用户池索赔的策略。

permit( principal, action, resource == ExampleCo::Photo::"VacationPhoto94.jpg" ) when { principal["cognito:username"]) == "alice" && principal["custom:department"]) == "Finance" };

以下示例说明如何创建引用 Cognito 用户池中用户的委托人的策略。请注意,委托人 ID 的形式为"<userpool-id>|<sub>"

permit( principal == ExampleCo::User::"us-east-1_example|a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", action, resource == ExampleCo::Photo::"VacationPhoto94.jpg" );

针对已验证权限中的用户池身份源的 Cedar 策略对包含字母数字和下划线 (_) 以外的字符的声明名称使用特殊语法。这包括包含:字符的用户池前缀声明,例如cognito:usernamecustom:department。要编写引用cognito:usernamecustom:department声明的保单条件,请分别将其principal["cognito:username"]写成和。principal["custom:department"]

注意

如果令牌包含带cognito:custom:前缀的声明和带有字面值cognito或的声明名称custom,则带有的授权请求IsAuthorizedWithToken将失败,并显示为ValidationException

有关映射声明的更多信息,请参阅将 Amazon Cognito 令牌映射到架构。有关亚马逊 Cognito 用户授权的更多信息,请参阅 Amazon Cognit o 开发者指南中的使用亚马逊验证权限进行授权。