从 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 用户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 角色的主要内容,如果未能解决你的问题,请参考以下文章

Cognito 授权人组

AWS Lambda 无法调用 Cognito Identity - IAM 角色

通过 boto3 担任 IAM 用户角色时访问被拒绝

使用 Cognito IAM 角色的端点上的 Spring 安全性?

有啥方法可以限制 IAM 用户/假定角色在 AWS cognito 中启用未经身份验证的用户身份?

具有 Cognito 联合身份的 AWS AppSync IAM 授权