c# - 从 Cognito 组担任 IAM 角色
问题描述
是否可以承担与Cognito 用户池中cognito 用户的iam-role1
Cognito 组相关联的 IAM 角色?cognito-group1
cognito-user1
cognito-user-pool1
我的配置:
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-role1
具有访问 S3 ReadOnly 的策略
此代码允许我向 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))
...
解决方案
当用户通过 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"
}
]
}
推荐阅读
- javascript - Webpack 在构建时生成文件
- python - Python中的for循环永无止境
- c - 扫描值直到在 C 中获得重要字符
- android - 无法解析 ':app@debug/compileClasspath' 的依赖关系:无法解析 com.github.YUNEEC:Yuneec-SDK-Android:vX.YZ
- java - 是否可以使用 spring 数据存储库为不同的类创建“存在给定 id 的对象”约束注释?
- arrays - 当我提交表单时,我有一个带有名称的单个字段的表单,输出未显示相对于 model.ts
- c# - ASP.net core IQueryableUserStore如何实现
- c# - 如何在统一中制作wallrun
- java - 如何在 Java 和 Spring 中动态使用装饰器模式
- swagger - Swagger 输出过滤