AWS跨账户权限配置:允许组织账户创建含自身ID的Route53记录
实现Route53托管区的账户专属记录权限控制
完全可以实现这个需求,核心是利用IAM的内置身份变量结合Route53的权限条件,既能允许合法的记录创建,又能杜绝伪造其他账户ID的情况。
核心配置思路
通过IAM权限策略的条件判断,把调用者的账户ID(由AWS自动提供的aws:PrincipalAccount变量)和Route53记录名称强制绑定,同时限制只有组织内的账户能使用这个权限。
具体权限策略示例
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "route53:ChangeResourceRecordSets", "Resource": "arn:aws:route53:::hostedzone/HOSTED_ZONE_ID", "Condition": { "StringEquals": { "aws:PrincipalOrgID": "o-xxxxxxxxxx" }, "StringLike": { "route53:RecordNames": "*${aws:PrincipalAccount}.shareddomain.tld." } } } ] }
关键部分说明
- 资源指定:把
HOSTED_ZONE_ID替换成目标Route53托管区的ID,确保权限只作用在你指定的托管区上。 - 组织内账户限制:
aws:PrincipalOrgID条件确保只有你AWS组织内的账户能使用这个角色,避免外部账户的访问。 - 记录名称强制绑定:
route53:RecordNames的匹配规则要求记录名称必须包含调用者自身的账户ID,格式对应你要的service-a.ACCOUNT_ID.shareddomain.tld(注意Route53的记录名称是FQDN,末尾需要加.,所以策略里写的是*.${aws:PrincipalAccount}.shareddomain.tld.,支持任意前缀)。
为什么无法伪造其他账户ID
aws:PrincipalAccount是AWS提供的内置身份变量,这个值由AWS根据请求发起者的身份自动填充,用户无法通过请求参数篡改。所以只要策略里用了这个变量,就能确保记录中的账户ID一定是调用者自己的账户ID,彻底杜绝伪造OTHER_ACCOUNT_ID的情况。
内容的提问来源于stack exchange,提问作者Erik Karlsson
相关产品推荐
相关产品推荐

