AWS CDK IAM Federated и пользователь 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 - я не знаю, как добавить другого принципала...
0 ответов
К счастью, 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')
)
)
Документация для iam.RoleProps#assumedBy
упоминает, что вы можете получить доступ к политике принятия с помощью iam.Role#assumeRolePolicy
приписывать. Вы можете попробовать что-то вроде следующего:
this.TestRole = new iam.Role(this, 'Test', {
assumedBy: new iam.FederatedPrincipal(/*...*/)
/* ... */
});
this.TestRole.assumeRolePolicy.addStatement(
new iam.PolicyStatement().allow()
.addAction('sts:AssumeRole')
.addAwsPrincipal('arn:aws:iam::account1:role/Role1')
.addAwsPrincipal('arn:aws:iam::account2:role/Role2')
);