本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Amazon Cognito 身份来源
经过验证的权限与 Amazon Cognito 用户池密切配合。Amazon Cognito JWTs 的结构是可预测的。经过验证的权限可以识别这种结构,并从其中包含的信息中获得最大收益。例如,您可以使用 ID 令牌或访问令牌实现基于角色的访问控制 (RBAC) 授权模型。
新的 Amazon Cognito 用户池身份源需要以下信息:
-
的 AWS 区域。
-
用户池 ID。
-
例如,您要与身份源关联的委托人实体类型
MyCorp::User
。 -
例如,您要与身份源关联的委托人组实体类型
MyCorp::UserGroup
。 -
您想要授权的用户池 IDs 中的客户端,以便向您的策略存储库发出请求。
由于已验证权限仅适用于相同的 Amazon Cognito 用户池 AWS 账户,因此您无法在其他账户中指定身份来源。例如,Verified Permissions 会将实体前缀(您在作用于用户池主体的策略中必须引用的身份源标识符)设置为用户池的 ID。us-west-2_EXAMPLE
在这种情况下,您可以将该用户池中的用户引用a1b2c3d4-5678-90ab-cdef-EXAMPLE22222
为 us-west-2_EXAMPLE|a1b2c3d4-5678-90ab-cdef-EXAMPLE22222
用户池令牌声明可以包含属性、范围、群组 IDs、客户和自定义数据。Amazon Cognito 能够在 JWTs已验证的权限中包含可能有助于做出授权决策的各种信息。这些指令包括:
-
带有
cognito:
前缀的用户名和群组声明 -
使用自定义用户属性
custom: prefix
-
在运行时添加了自定义声明
-
OIDC 的标准声明,比如和
sub
email
我们将在中的已验证权限政策中详细介绍这些声明以及如何管理这些声明将 Amazon Cognito 令牌映射到架构。
重要
尽管您可以在 Amazon Cognito 令牌到期之前将其撤销 JWTs ,但这些令牌被视为具有独立签名和有效性的无状态资源。符合 JSON Web Token RFC 7519
以下示例说明如何创建引用与委托人关联的某些 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:username
和custom:department
。要编写引用cognito:username
或custom:department
声明的保单条件,请分别将其principal["cognito:username"]
写成和。principal["custom:department"]
注意
如果令牌包含带cognito:
或custom:
前缀的声明和带有字面值cognito
或的声明名称custom
,则带有的授权请求IsAuthorizedWithToken将失败,并显示为ValidationException
。
有关映射声明的更多信息,请参阅将 Amazon Cognito 令牌映射到架构。有关亚马逊 Cognito 用户授权的更多信息,请参阅 Amazon Cognit o 开发者指南中的使用亚马逊验证权限进行授权。