我正在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
答案 0 :(得分:0)
您必须将权限分配给父级承担的子级角色。
这是它的工作方式 1.父用户应具有承担角色的权限(IAM策略) 2.子帐户上的角色应允许父帐户担当该角色(信任策略)。 3.子帐户中的角色应附加其他策略,以允许该角色对资源执行操作。
我认为父级无法定义此权限。
答案 1 :(得分:0)
我无法正常工作,因此我将子域委托给了子帐户(通过将根帐户中的NS记录设置为子帐户的名称服务器)。效果很好。