将基于身份的策略(IAM 策略)用于 Amazon Route 53
本主题提供了基于身份的策略的示例,这些示例展示了账户管理员如何将权限策略附加到 IAM 身份,从而授予对 Amazon Route 53 资源执行操作的权限。
重要
我们建议您首先阅读一下介绍性主题,这些主题说明了管理对 Route 53 资源的访问的基本概念和选项。有关更多信息,请参阅 管理 Amazon Route 53 资源的访问权限的概览。
注意
授予访问权限时,托管区域和 Amazon VPC 必须属于相同分区。分区是一组 AWS 区域。每个 AWS 账户 的作用域为一个分区。
以下是支持的分区:
-
aws
- AWS 区域 -
aws-cn
– 中国区域 -
aws-us-gov
- AWS GovCloud (US) Region
有关更多信息,请参阅《AWS 一般参考》中的访问管理和 Amazon Route 53 端点和限额。
下面显示了一个示例权限策略。Sid
或语句 ID 是可选的:
{ "Version": "2012-10-17", "Statement": [ { "Sid" : "AllowPublicHostedZonePermissions", "Effect": "Allow", "Action": [ "route53:CreateHostedZone", "route53:UpdateHostedZoneComment", "route53:GetHostedZone", "route53:ListHostedZones", "route53:DeleteHostedZone", "route53:ChangeResourceRecordSets", "route53:ListResourceRecordSets", "route53:GetHostedZoneCount", "route53:ListHostedZonesByName" ], "Resource": "*" }, { "Sid" : "AllowHealthCheckPermissions", "Effect": "Allow", "Action": [ "route53:CreateHealthCheck", "route53:UpdateHealthCheck", "route53:GetHealthCheck", "route53:ListHealthChecks", "route53:DeleteHealthCheck", "route53:GetCheckerIpRanges", "route53:GetHealthCheckCount", "route53:GetHealthCheckStatus", "route53:GetHealthCheckLastFailureReason" ], "Resource": "*" } ] }
该策略包含两条语句:
-
第一条语句授予创建和管理公有托管区域及其记录所需的操作的权限。Amazon Resource Name (ARN) 中的通配符 (*) 授予对当前 AWS 账户拥有的所有托管区域的访问权限。
-
第二条语句授予创建和管理运行状况检查所需的全部操作的权限。
有关您为授予或拒绝使用每项操作的权限而指定的操作和 ARN 的列表,请参阅Amazon Route 53 API 权限:操作、资源和条件参考。
使用 Amazon Route 53 控制台所需的权限
要授予对 Amazon Route 53 控制台的完全访问权,您可以在以下权限策略中授予权限:
{ "Version": "2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "route53:*", "route53domains:*", "tag:*", "ssm:GetParametersByPath", "cloudfront:ListDistributions", "elasticloadbalancing:DescribeLoadBalancers", "elasticbeanstalk:DescribeEnvironments", "s3:ListAllamzn-s3-demo-bucket", "s3:GetBucketLocation", "s3:GetBucketWebsite", "ec2:DescribeRegions", "ec2:DescribeVpcs", "ec2:CreateNetworkInterface", "ec2:CreateNetworkInterfacePermission", "ec2:DeleteNetworkInterface", "ec2:DescribeAvailabilityZones", "ec2:DescribeNetworkInterfaces", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:ModifyNetworkInterfaceAttribute", "sns:ListTopics", "sns:ListSubscriptionsByTopic", "sns:CreateTopic", "kms:ListAliases", "kms:DescribeKey", "kms:CreateKey", "kms:CreateAlias", "kms:Sign", "cloudwatch:DescribeAlarms", "cloudwatch:PutMetricAlarm", "cloudwatch:DeleteAlarms", "cloudwatch:GetMetricStatistics" ], "Resource":"*" }, { "Effect": "Allow", "Action": "apigateway:GET", "Resource": "arn:aws:apigateway:*::/domainnames" } ] }
下面是需要权限的原因:
route53:*
-
您可以执行除以下操作之外的所有 Route 53 操作:
-
创建和更新 Alias Target(别名目标)值为 CloudFront 分配、Elastic Load Balancing 负载均衡器、Elastic Beanstalk 环境或 Amazon S3 存储桶的别名记录。(通过这些权限,您可以创建其别名目标值为同一托管区域中的另一个记录的别名记录。)
-
使用私有托管区域。
-
使用域。
-
创建、删除和查看 CloudWatch 警报。
-
在 Route 53 控制台中呈现 CloudWatch 指标。
-
route53domains:*
-
允许您使用域。
重要
如果您单独列出
route53
操作,则必须包含route53:CreateHostedZone
才能使用域。注册域时,会同时创建一个托管区域,因此包括注册域权限的策略还需要创建托管区域的权限。对于域注册,Route 53 不支持向单个资源授予或拒绝权限。
route53resolver:*
-
可让您使用 Route 53 Resolver。
ssm:GetParametersByPath
-
允许您在创建新的别名记录、私有托管区和运行状况检查时获取公开可用的区域。
cloudfront:ListDistributions
-
可让您创建和更新 Alias Target(别名目标)值为 CloudFront 分配的别名记录。
如果您未使用 Route 53 控制台,则不需要这些权限。Route 53 仅用它来获取要在控制台中显示的分配的列表。
elasticloadbalancing:DescribeLoadBalancers
-
您可以创建和更新别名目标值为 ELB 负载均衡器的别名记录。
如果您未使用 Route 53 控制台,则不需要这些权限。Route 53 仅用它来获取要在控制台中显示的负载均衡器的列表。
elasticbeanstalk:DescribeEnvironments
-
可让您创建和更新 Alias Target(别名目标)值为 Elastic Beanstalk 环境的别名记录。
如果您未使用 Route 53 控制台,则不需要这些权限。Route 53 仅用它来获取要在控制台中显示的环境的列表。
s3:ListAllamzn-s3-demo-bucket
、s3:GetBucketLocation
和s3:GetBucketWebsite
-
可让您创建和更新 Alias Target(别名目标)值为 Amazon S3 存储桶的别名记录。(只有将存储桶配置为网站终端节点时,才可以创建 Amazon S3 存储桶的别名;
s3:GetBucketWebsite
用于获取所需的配置信息。)如果您未使用 Route 53 控制台,则不需要这些权限。Route 53 仅用它来获取要在控制台中显示的存储桶的列表。
ec2:DescribeVpcs
和ec2:DescribeRegions
-
允许您使用私有托管区域。
- 所有列出的
ec2
权限 -
可让您使用 Route 53 Resolver。
sns:ListTopics
,sns:ListSubscriptionsByTopic
,sns:CreateTopic
,cloudwatch:DescribeAlarms
,cloudwatch:PutMetricAlarm
,cloudwatch:DeleteAlarms
-
可让您创建、删除和查看 CloudWatch 警报。
cloudwatch:GetMetricStatistics
-
可让您创建 CloudWatch 指标的运行状况检查。
如果您未使用 Route 53 控制台,则不需要这些权限。Route 53 仅用它来获取要在控制台中显示的统计数据。
apigateway:GET
-
可让您创建和更新 Alias Target(别名目标)值为 Amazon API Gateway API 的别名记录。
如果您未使用 Route 53 控制台,则不需要此权限。Route 53 仅用它来获取要在控制台中显示的 API 的列表。
kms:*
-
可让您使用 AWS KMS 启用 DNSSEC 签名。
域记录所有者的权限示例
使用资源记录集权限,您可以设置精细的权限,来限制 AWS 用户可以更新或修改的内容。有关更多信息,请参阅 使用 IAM 策略条件进行精细访问控制。
在某些情况下,托管区域所有者可能负责托管区域的整体管理,而组织中的另一个人负责这些任务的子集。例如,已启用 DNSSEC 签名的托管区域所有者可能希望创建一个 IAM policy,其中包括其他人在托管区域中添加和删除资源集记录 (RR) 的权限以及其它任务。托管区域所有者选择为记录所有者或其他人员启用的特定权限将取决于其组织的策略。
以下是允许记录所有者修改 RR、流量策略和运行状况检查的示例 IAM policy。不允许使用此策略的记录所有者执行区域级操作,例如创建或删除区域、启用或禁用查询日志记录、创建或删除可重用的委派集或更改 DNSSEC 设置。
{ "Sid": "Do not allow zone-level modification ", "Effect": "Allow", "Action": [ "route53:ChangeResourceRecordSets", "route53:CreateTrafficPolicy", "route53:DeleteTrafficPolicy", "route53:CreateTrafficPolicyInstance", "route53:CreateTrafficPolicyVersion", "route53:UpdateTrafficPolicyInstance", "route53:UpdateTrafficPolicyComment", "route53:DeleteTrafficPolicyInstance", "route53:CreateHealthCheck", "route53:UpdateHealthCheck", "route53:DeleteHealthCheck", "route53:List*", "route53:Get*" ], "Resource": [ "*" ] }
DNSSEC 签名所需的 Route 53 客户托管密钥权限
当您为 Route 53 启用 DNSSEC 签名时,Route 53 会根据 AWS Key Management Service (AWS KMS) 中的客户托管密钥创建密钥签名密钥 (KSK)。您可以使用支持 DNSSEC 签名的现有客户托管密钥或创建一个新密钥。Route 53 必须具有访问您的客户托管密钥的权限,以便它能够为您创建 KSK。
要使 Route 53 能够访问您的客户托管密钥,请确保您的客户托管密钥策略包含以下语句:
{ "Sid": "Allow Route 53 DNSSEC Service", "Effect": "Allow", "Principal": { "Service": "dnssec-route53.amazonaws.com" }, "Action": ["kms:DescribeKey", "kms:GetPublicKey", "kms:Sign"], "Resource": "*" }, { "Sid": "Allow Route 53 DNSSEC to CreateGrant", "Effect": "Allow", "Principal": { "Service": "dnssec-route53.amazonaws.com" }, "Action": ["kms:CreateGrant"], "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": true } } }
混淆代理问题是一个安全性问题,即不具有操作执行权限的实体可能会迫使具有更高权限的实体执行该操作。为了保护 AWS KMS 不遭受该问题,您可以通过提供 aws:SourceAccount
与 aws:SourceArn
的条件组合(两者或其中一个),选择性地限制服务在基于资源的策略中对资源的访问权限。aws:SourceAccount
是托管区域拥有者的 AWS 账户 ID。aws:SourceArn
是托管区域的 ARN。
以下是可添加的两个权限示例:
{ "Sid": "Allow Route 53 DNSSEC Service", … "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333" }, "ArnEquals": { "aws:SourceArn": "arn:aws:route53:::hostedzone/HOSTED_ZONE_ID" } } },
- 或者 -
{ "Sid": "Allow Route 53 DNSSEC Service", … "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": ["1111-2222-3333","4444-5555-6666"] }, "ArnLike": { "aws:SourceArn": "arn:aws:route53:::hostedzone/*" } } },
有关更多信息,请参阅《IAM 用户指南》中的混淆代理人问题。
客户管理型策略示例
您可以创建自己的自定义 IAM 策略,以授予执行 Route 53 操作的相关权限。您可以将这些自定义策略附加到需要指定权限的 IAM 组。当您使用 Route 53 API、AWS 软件开发工具包或 AWS CLI 时,可以使用这些策略。以下示例显示了几个常见使用情形的权限。有关为用户授予 Route 53 的完全访问权限的策略,请参阅 使用 Amazon Route 53 控制台所需的权限。
示例
示例 1:允许对所有托管区域进行读取访问
以下权限策略向用户授予列出所有托管区域并查看某一托管区域中的所有记录的权限。
{ "Version": "2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "route53:GetHostedZone", "route53:ListResourceRecordSets" ], "Resource":"*" }, { "Effect":"Allow", "Action":["route53:ListHostedZones"], "Resource":"*" } ] }
示例 2:允许创建和删除托管区域
以下权限策略允许用户创建和删除托管区域并跟踪更改进度。
{ "Version": "2012-10-17", "Statement":[ { "Effect":"Allow", "Action":["route53:CreateHostedZone"], "Resource":"*" }, { "Effect":"Allow", "Action":["route53:DeleteHostedZone"], "Resource":"*" }, { "Effect":"Allow", "Action":["route53:GetChange"], "Resource":"*" } ] }
示例 3:允许完全访问所有域(仅限于公有托管区域)
以下权限策略允许用户执行与域注册有关的所有操作,包括注册域和创建托管区域的权限。
{ "Version": "2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "route53domains:*", "route53:CreateHostedZone" ], "Resource":"*" } ] }
注册域时,会同时创建一个托管区域,因此包括注册域权限的策略还需要创建托管区域的权限。(对于域注册,Route 53 不支持向单个资源授予权限。)
有关使用私有托管区域所需权限的信息,请参阅使用 Amazon Route 53 控制台所需的权限。
示例 4:允许创建入站和出站 Route 53 Resolver 终端节点
以下权限策略允许用户使用 Route 53 控制台创建 Resolver 入站和出站终端节点。
其中一些权限仅当在控制台中创建终端节点时才需要。如果您希望仅授予以编程方式创建入站和出站终端节点的权限,则可以省略上面这些权限:
-
route53resolver:ListResolverEndpoints
允许用户查看入站或出站终端节点列表,以便他们验证终端节点是否已创建。 -
显示可用区列表时需要
DescribeAvailabilityZones
。 -
显示 VPC 列表时需要
DescribeVpcs
。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "route53resolver:CreateResolverEndpoint", "route53resolver:ListResolverEndpoints", "ec2:CreateNetworkInterface", "ec2:DescribeAvailabilityZones", "ec2:DescribeNetworkInterfaces", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs" ], "Resource": "*" } ] }