amazon-web-services - AWS CDK IAM 联合和用户 IamRoleAccess?
问题描述
我想知道如何将承担角色策略文档设置为比服务更复杂的内容...
这是我到目前为止发现的,也许这会起作用:
this.TestRole = new iam.Role(this, "Test", {
assumedBy: new iam.ServicePrincipal("ec2.amazonaws.com"),
roleName: "TestRole"
})
但我想添加这样的内容:
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Principal": {
"AWS": [
"arn:aws:iam::account1:role/Role1",
"arn:aws:iam::account2:role/Role2"
]
}
},
{
"Effect": "Allow",
"Action": [
"sts:AssumeRoleWithSAML"
],
"Principal": {
"Federated": {
some sub and so on
}
},
"Condition": {
"StringEquals": {
"SAML:aud": some saml stuff
}
}
}
]
},
我不知道如何实现这一目标......你能帮我吗?
好的,它可以做这样的事情:
this.TestRole = new iam.Role(this, "Test", {
assumedBy: new iam.FederatedPrincipal(new cdk.FnSub("arn:aws:iam::${AWS::AccountId}:saml-provider/SAMLIDP"), {
"StringEquals": {
"SAML:aud": "https://signin.aws.amazon.com/saml"
}
}, "sts:AssumeRoleWithSAML"),
roleName: parent.getApplicationName().charAt(0).toUpperCase() + parent.getApplicationName().slice(1)
})
这很容易:-/但现在我想用动作 sts:AssumeRole 添加这两个角色——我不知道如何添加另一个主体......
解决方案
幸运的是,https://github.com/aws/aws-cdk/pull/1377提供了我们需要的修复。您现在可以使用aws_iam.CompositePrincipal
添加多个原则,包括服务原则。
例如,在 Python 中用于数据管道角色:
pipeline_role = aws_iam.Role(
scope=self, id='pipeline-role',
role_name='pipeline',
assumed_by=aws_iam.CompositePrincipal(
aws_iam.ServicePrincipal('datapipeline.amazonaws.com'),
aws_iam.ServicePrincipal('elasticmapreduce.amazonaws.com')
)
)
推荐阅读
- powerbi - 计算在第一笔订单中使用折扣的用户数量
- mysql - MYSQL - 查询单个表中的跨列
- c++ - 为什么在这种情况下编译器会选择错误的重载?
- hydra - 使用 Vitess 作为后备数据存储:MySQL 兼容性问题
- google-kubernetes-engine - 如何手动重新创建 Ingress 部件(为 k8s 服务随机生成后端名称)?
- python - 无论输入如何,Keras 网络都会返回相同的输出
- ios - 检测点击的可变属性字符串
- r - 从R中的数据框中拆分逗号分隔模式
- appium-android - 验证应用程序中的呼叫功能 - BDD - Appium
- azure-devops - 如何使用部署作业为 YAML Pipelines 构建仪表板