【问题标题】:AWS CDK IAM Federated and User IamRoleAccess?AWS CDK IAM 联合和用户 IamRoleAccess?
【发布时间】:2018-10-18 18:41:23
【问题描述】:

我想知道如何将代入角色策略文档设置为比服务更复杂的内容...

这是我到目前为止发现的,也许这会起作用:

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 添加这两个角色 - 我不知道如何添加另一个主体...

【问题讨论】:

标签: amazon-web-services roles amazon-iam aws-cdk


【解决方案1】:

幸运的是,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')
    )
)

【讨论】:

    【解决方案2】:

    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')
    );
    

    【讨论】:

      猜你喜欢
      • 2021-11-12
      • 2019-10-16
      • 2019-03-09
      • 1970-01-01
      • 2021-08-02
      • 2018-02-22
      • 2020-12-16
      • 2023-01-13
      • 2019-05-10
      相关资源
      最近更新 更多