从 Cognito 组担任 IAM 角色
Posted
技术标签:
【中文标题】从 Cognito 组担任 IAM 角色【英文标题】:Assume IAM role from Cognito group 【发布时间】:2020-11-08 04:40:03 【问题描述】:是否可以承担与 Cognito 用户池 cognito-user-pool1
中 cognito 用户 cognito-user1
的 Cognito 组 cognito-group1
关联的 IAM 角色 iam-role1
?
我的配置:
Cognito 用户池cognito-user-pool1
:
cognito-user1
属于cognito-group1
Cognito 组cognito-group1
已分配给iam-role1
。
Cognito 身份池cognito-identity-pool1
:
cognito-user-pool1
经过身份验证的角色 = iam-role1
IAM:
IAM 角色iam-role1
具有访问 S3 只读的策略
此代码允许我向 Cognito 用户池进行身份验证:
AmazonCognitoIdentityProviderClient provider = new AmazonCognitoIdentityProviderClient();
CognitoUserPool userPool = new CognitoUserPool("user-pool-id", "client-id", provider);
CognitoUser user = new CognitoUser("cognito-user1", "client-id", userPool, provider);
InitiateSrpAuthRequest authRequest = new InitiateSrpAuthRequest()
Password = "cognito-password1"
;
AuthFlowResponse authResponse = await user.StartWithSrpAuthAsync(authRequest);
然后从关联到 cognito 用户池 cognito-user-pool1
的 cognito 身份池 cognito-identity-pool1
获取凭据:
CognitoAWSCredentials credentials = user.GetCognitoAWSCredentials("identity-pool-arn", RegionEndpoint.USEast1);
using (var client = new AmazonS3Client(credentials))
...
【问题讨论】:
【参考方案1】:当用户通过 Cognito 用户池cognito-user-pool1
进行身份验证时,id 令牌包括 cognito 组和 iam 角色:
"cognito:groups": [
"cognito-group1"
],
"cognito:roles": [
"arn:aws:iam::xxx:role/iam-role1"
],
我们需要配置 Cognito 身份池以在用户通过身份验证时从令牌中选择角色:
我们还需要通过在 IAM 角色iam-role1
中编辑信任关系来允许 Cognito 身份池承担此角色:
"Version": "2012-10-17",
"Statement": [
...
"Effect": "Allow",
"Principal":
"Federated": "cognito-identity.amazonaws.com"
,
"Action": "sts:AssumeRoleWithWebIdentity"
]
【讨论】:
你救了我的命!我找不到任何关于将 Cognito 组角色附加到已登录的 Cognito 用户的文档或明确示例。以上是关于从 Cognito 组担任 IAM 角色的主要内容,如果未能解决你的问题,请参考以下文章
AWS Lambda 无法调用 Cognito Identity - IAM 角色
使用 Cognito IAM 角色的端点上的 Spring 安全性?