如何通过IAM策略让用户仅查看Route53中指定托管区域
解决Route53 IAM策略仅显示指定托管区域的问题
Route53的route53:ListHostedZones和route53:ListHostedZonesByName API不支持通过IAM条件过滤返回的托管区域列表,你之前尝试的route53:AssociatedResource条件键不适用于这类列表型操作,这就是配置无效的核心原因。
正确的实现逻辑是:Route53控制台会自动根据用户是否拥有route53:GetHostedZone权限过滤显示托管区域——用户仅能看到自己有权访问的托管区域。基于这个逻辑,你可以调整IAM策略如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "route53:ListHostedZones", "route53:ListHostedZonesByName" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "route53:GetHostedZone", "route53:ListResourceRecordSets", "route53:ChangeResourceRecordSets", "route53:CreateHealthCheck", "route53:DeleteHealthCheck", "route53:GetHealthCheck", "route53:UpdateHealthCheck", "route53:GetHealthCheckCount", "route53:ListHealthChecks" ], "Resource": [ "arn:aws:route53:::hostedzone/hz1", "arn:aws:route53:::hostedzone/hz2" ] } ] }
关键说明
- 保留对
ListHostedZones和ListHostedZonesByName的全局允许:这两个API是控制台加载托管区域列表的基础,虽会返回所有区域,但控制台会自动隐藏用户无GetHostedZone权限的条目。 - 限定管理操作的资源范围:通过将
Resource指定为目标托管区域的ARN,确保用户只能操作指定区域,同时控制台基于GetHostedZone权限自动完成显示过滤。
如果需要进一步限制(比如防止用户通过CLI调用ListHostedZones后查看其他区域详情),可添加Deny语句明确阻止访问非目标区域的GetHostedZone权限:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "route53:ListHostedZones", "route53:ListHostedZonesByName" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "route53:GetHostedZone", "route53:ListResourceRecordSets", "route53:ChangeResourceRecordSets", "route53:CreateHealthCheck", "route53:DeleteHealthCheck", "route53:GetHealthCheck", "route53:UpdateHealthCheck", "route53:GetHealthCheckCount", "route53:ListHealthChecks" ], "Resource": [ "arn:aws:route53:::hostedzone/hz1", "arn:aws:route53:::hostedzone/hz2" ] }, { "Effect": "Deny", "Action": "route53:GetHostedZone", "NotResource": [ "arn:aws:route53:::hostedzone/hz1", "arn:aws:route53:::hostedzone/hz2" ] } ] }
内容的提问来源于stack exchange,提问作者Pedro Miranda
相关产品推荐
相关产品推荐

