AWS: CDK中的信任关系



我想使用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的额外条件。

最新更新