卓:在子帐户中担任角色时,如何保持对父帐户权限的访问权限?

时间:2019-12-12 02:07:52

标签: amazon-web-services aws-cdk

我正在AWS中建立一个多账户架构。我的域托管在root帐户的route53中。在使用CDK的子帐户中创建基础结构时,我需要能够创建route53记录(例如,根域为test.com,并且我希望由子帐户控制dev.test.com)。 AWS提到了执行此操作的两种方法:一种是委派记录集。另一种是使用跨帐户权限。

我正在尝试使用跨帐户角色来实现这一目标。我已经在子帐户中创建了一个角色,并具有在父帐户中承担该角色的权限。

当我运行cdk deploy时,除记录集外,所有基础架构都成功部署,因为该角色显然没有权限。

这是我的CDK代码的样子:

    this.hostedZone = route53.HostedZone.fromHostedZoneAttributes(this, 'test.com hosted zone', {
      hostedZoneId: 'Z2H17K123M6123',
      zoneName: 'test.co'
    });

    new route53.TxtRecord(this, 'TXTRecord', {
      zone: this.hostedZone,
      recordName: '_foo', // If the name ends with a ".", it will be used as-is;
      // if it ends with a "." followed by the zone name, a trailing "." will be added automatically;
      // otherwise, a ".", the zone name, and a trailing "." will be added automatically.
      // Defaults to zone root if not specified.
      values: [
        // Will be quoted for you, and " will be escaped automatically.
        'Bar!',
        'Baz?'
      ],
      ttl: cdk.Duration.minutes(90) // Optional - default is 30 minutes
    });

我得到的错误是:

API: route53:GetHostedZone User: arn:aws:sts::123:assumed-role/ROLENAME/123 is not authorized to access this resource
new RecordSet (.../infrastructure/node_modules/@aws-cdk/aws-route53/lib/record-set.ts:122:23)

这是我要担任的角色的策略(我最初将其范围限制为root帐户中的托管区域,但后来将其设为*):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "route53:*"
            ],
            "Resource": "*"
        }
    ]
}

如何授予该角色(由上级帐户承担)访问上级帐户中的route53的权限?

我用来运行cdk deploy的命令是:

aws-vault exec myorg-prestaging -- npx cdk deploy backend-api

其中myorg-prestaging是配置为这样的配置文件:

[profile myorg]
region=ap-southeast-2
mfa_serial=arn:aws:iam::12332:mfa/jeremy@myorg.co

[profile myorg-prestaging]
region=ap-southeast-2
role_arn = arn:aws:iam::12333:role/GOFARPRESTAGINGROLE
source_profile = myorg

2 个答案:

答案 0 :(得分:0)

您必须将权限分配给父级承担的子级角色。

这是它的工作方式 1.父用户应具有承担角色的权限(IAM策略) 2.子帐户上的角色应允许父帐户担当该角色(信任策略)。 3.子帐户中的角色应附加其他策略,以允许该角色对资源执行操作。

我认为父级无法定义此权限。

答案 1 :(得分:0)

我无法正常工作,因此我将子域委托给了子帐户(通过将根帐户中的NS记录设置为子帐户的名称服务器)。效果很好。