【问题标题】:Allowing IAM access to only a specific subdomain on Route 53仅允许 IAM 访问 Route 53 上的特定子域
【发布时间】:2018-11-08 17:25:29
【问题描述】:
我需要授予 IAM 用户 Route 53 访问权限以在子域下创建记录,例如 data.example.com。例如,用户应该能够为server1.data.example.com 创建一个 CNAME。同时,我不希望用户能够添加/修改/删除除*.data.example.com以外的任何记录。
是否有可能编写一个策略来做到这一点?
【问题讨论】:
标签:
amazon-web-services
dns
amazon-iam
amazon-route53
【解决方案1】:
您可以按托管区域进行限制,但不能按子域进行限制。如果您想限制到特定的子域,您的 Route53 托管区域应按子域进行拆分。你可以create a hosted zone for a subdomain:
例如,如果您想要一个名为 test 的子域,您可以这样做,因为答案 here 总结得很好:
为 test.example.com 创建一个托管区域。
注意 Route 53 分配给新托管的 4 个名称服务器
区域。
回到主区域,创建一个新的资源记录,带有主机名
"test" 使用记录类型 NS,并输入 Route 的 4 个名称服务器
53 已分配,在下面的框中。
上面将那个子域的控制权委托给这个新的托管区域,它有一个我们可以在 IAM 策略中使用的唯一区域 ID
然后您可以构建一个 IAM 策略,将操作限制在此区域:
{
"Statement":[
{
"Action":[
"route53:*"
],
"Effect":"Allow",
"Resource":[
"arn:aws:route53:::hostedzone/<The new zone ID>"
]
},
{
"Action":[
"route53:ListHostedZones"
],
"Effect":"Allow",
"Resource":[
"*"
]
}
]
}
您可以在此处调整此策略以适应您希望用户能够在此区域中执行的操作。
【解决方案2】:
来自AWS Documentation
在策略中,您可以使用 * 作为 ARN 来授予或拒绝对以下资源的访问权限:
- 健康检查
- 托管区域
- 可重用的委托集
- 资源记录集更改批次的状态(仅限 API)
- 交通政策(交通流量)
- 流量策略实例(流量)
并非所有 Route 53 资源都支持权限。您不能授予或拒绝对以下资源的访问权限:
- 域
- 个人记录
- 命名空间(服务发现)
- 服务(服务发现)
- 域标签
- 健康检查标签
- 托管区域的标签
这基本上意味着 IAM 最好的粒度控制是单个托管区域(DNS 区域文件)。
您可以按照此AWS Guide 仅为特定子域创建托管区域