首页 > 解决方案 > 从 Cognito 组担任 IAM 角色

问题描述

是否可以承担与Cognito 用户池中cognito 用户的iam-role1Cognito 组相关联的 IAM 角色?cognito-group1cognito-user1cognito-user-pool1

我的配置:

Cognito 用户池cognito-user-pool1

Cognito 身份池cognito-identity-pool1

我是:

此代码允许我向 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-identity-pool1然后从链接到 cognito 用户池的 cognito 身份池中获取凭据cognito-user-pool1

CognitoAWSCredentials credentials = user.GetCognitoAWSCredentials("identity-pool-arn", RegionEndpoint.USEast1); 
using (var client = new AmazonS3Client(credentials))
...

标签: c#amazon-web-servicesamazon-cognitoamazon-iam

解决方案


当用户通过 Cognito User Pool 进行身份验证时cognito-user-pool1,id 令牌包括 cognito 组和 iam 角色:

"cognito:groups": [
    "cognito-group1"
  ],
"cognito:roles": [
    "arn:aws:iam::xxx:role/iam-role1"
  ],

我们需要配置 Cognito 身份池以在用户通过身份验证时从令牌中选择角色: 在此处输入图像描述

我们还需要通过编辑 IAM 角色中的信任关系来允许 Cognito 身份池承担此角色iam-role1

{
  "Version": "2012-10-17",
  "Statement": [
    ...
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "cognito-identity.amazonaws.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity"
    }
  ]
}

在此处输入图像描述


推荐阅读