基于AWS组织架构的多账户多环境Route 53 DNS配置咨询
可行的多环境跨账户DNS配置方案
根据你的场景,我整理了两种最实用的方案,分别适配不同的权限隔离需求和维护复杂度:
方案一:按环境前缀托管子域(推荐,维护高效+权限清晰)
这个方案调整域名结构为service1.test.services.example.com(环境前缀在前),是行业通用的最佳实践,能大幅降低维护成本,同时实现生产/开发账户的完全隔离:
在开发账户创建环境级托管区
登录AWS开发账户的Route53控制台,创建3个公网托管区:test.services.example.comuat.services.example.comrelease.services.example.com
每个托管区创建后,复制它的4条NS记录值(Route53会自动生成)。
在生产账户添加NS记录指向开发账户托管区
登录AWS生产账户的Route53控制台,打开services.example.com托管区,添加3条NS类型记录:- 记录名称:
test - 记录类型:
NS - 值:粘贴开发账户
test.services.example.com托管区的4个NS域名
重复此操作,分别添加uat和release对应的NS记录。
- 记录名称:
开发账户管理环境内服务记录
在开发账户的对应环境托管区(比如test.services.example.com)中,添加service1、service2的A/CNAME记录,最终就能实现service1.test.services.example.com的正常解析。
方案二:坚持原域名结构(test.service1.services.example.com)
如果必须保留你想要的域名层级,有两种实现方式:
方式A:生产托管区授权开发账户操作(简单但权限隔离弱)
适合服务数量不多,且信任开发账户权限的场景:
- 生产账户配置Route53权限策略
在生产账户的services.example.com托管区中,编辑权限策略,添加允许开发账户IAM角色/用户操作特定前缀记录的语句:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::[开发账户ID]:root" }, "Action": [ "route53:ChangeResourceRecordSets" ], "Resource": "arn:aws:route53:::hostedzone/[生产账户services托管区ID]", "Condition": { "StringLike": { "route53:RecordName": [ "test.*.services.example.com.", "uat.*.services.example.com.", "release.*.services.example.com." ] } } } ] } - 开发账户使用授权角色操作
在开发账户中创建IAM角色,允许关联生产账户的权限,然后就可以在Route53中切换到生产账户的托管区,添加test.service1.services.example.com等记录。
方式B:为每个服务环境创建独立托管区(完全隔离但维护繁琐)
适合服务数量少,且需要严格权限隔离的场景:
开发账户创建服务环境托管区
为每个服务的每个环境创建托管区,比如:test.service1.services.example.comuat.service1.services.example.comrelease.service1.services.example.comtest.service2.services.example.com
以此类推,复制每个托管区的NS记录值。
生产账户添加对应NS记录
在生产账户的services.example.com托管区中,为每个子域添加NS记录:- 记录名称:
test.service1 - 记录类型:
NS - 值:粘贴对应开发账户托管区的NS域名
重复此操作完成所有服务环境的配置。
- 记录名称:
关键验证步骤
配置完成后,用dig命令验证解析是否生效:
- 验证环境级NS记录:
dig test.services.example.com NS(方案一) - 验证具体服务记录:
dig test.service1.services.example.com A - 确保GoDaddy的根域配置已经生效:
dig services.example.com NS应返回生产账户Route53的NS域名
内容的提问来源于stack exchange,提问作者kk.




