我想使用CDK代码创建IAM角色的以下信任关系
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<ABC>:root"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "<ID>"
}
}
},
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<XYZ>:root"
},
"Action": "sts:AssumeRole"
}
]
}
上面的策略是直接使用AWS控制台创建的,但是当我通过CDK代码创建它时,我得到的结果是:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::<XYZ>:root",
"arn:aws:iam::<ABC>:root"
]
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "<ID>"
}
}
}
]
}
我使用以下CDK代码来实现这一点:
const account1 = new AccountPrincipal('<XYZ>');
account1.withConditions({StringEquals : { "sts:ExternalId": "<ID>"}});
const account2 = new AccountPrincipal('<ABC>');
const role1 = new Role(this, 'role1', {
roleName: "role1",
description: "some description",
assumedBy: new CompositePrincipal(account1, account2),
externalIds: ['<ID>'],
});
Q1:这两个政策会有不同的效果吗?
Q2:如何从CDK实现第一策略?
Q1:策略是不同的,因为CDK代码中对帐户XYZ施加了额外的条件,而在手动创建的策略中没有施加。如果那不是你想要/需要的,你就必须改变它。
第二季:如果您想实现完全相同的策略,您可以使用Role
上的attachtoppolicy函数单独添加第二条语句,而不需要externalIds
的额外条件。