Amazon Cognito
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

角色信任和权限

这些角色的区别在于其信任关系。让我们来看一下未经身份验证的角色的示例信任策略:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "us-east-1:12345678-dead-beef-cafe-123456790ab" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" } } } ] }

这个策略定义了我们希望允许来自 cognito-identity.amazonaws.com (OpenID Connect 令牌的发布者) 的联合身份用户承担此角色。此外,我们限制令牌的受众 (在我们的示例中为身份池 ID) 与我们的身份池匹配。最后,我们指定令牌的 amr 包含未经身份验证的值。

当 Amazon Cognito 创建令牌时,它会将令牌的 amr 设置为“未经身份验证”或“经过身份验证”,如果是经过身份验证的情况,它将包含身份验证过程中使用的所有提供商。这意味着,您可以创建一个角色,它只信任通过 Facebook 登录的用户,这只需将 amr 子句更改为如下所示即可:

"ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "graph.facebook.com" }

在更改角色的信任关系或尝试跨身份池使用角色时,请务必谨慎。如果您的角色未配置为正确信任身份池,您将看到 STS 发出的类似以下内容的异常:

AccessDenied -- Not authorized to perform sts:AssumeRoleWithWebIdentity

如果您看到这种异常,请仔细检查是否为身份池和身份验证类型使用了正确的角色。