AWS CDK IAM Federated и User 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 - я не знаю, как добавить еще одного участника ...


person Markus Siebert    schedule 18.10.2018    source источник
comment
К сожалению, в настоящее время это невозможно. Проголосуйте за эту проблему GitHub: github.com/awslabs/aws-cdk/issues/1201 < / а>   -  person rix0rrr    schedule 07.12.2018


Ответы (2)


К счастью, 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')
    )
)
person Alastair McCormack    schedule 09.10.2019

Документация для iam.RoleProps#assumedBy упоминает, что вы можете получить доступ к политике предположений с помощью _ 2_. Вы можете попробовать что-то вроде следующего:

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')
);
person Romain    schedule 07.12.2018