本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
对 Amazon Route 53 使用基于身份的IAM策略(策略)
本主题提供了基于身份的策略示例,这些示例演示了账户管理员如何将权限策略附加到IAM身份,从而授予对 Amazon Route 53 资源执行操作的权限。
重要
我们建议您首先阅读一下介绍性主题,这些主题说明了管理对 Route 53 资源的访问的基本概念和选项。有关更多信息,请参阅 管理 Amazon Route 53 资源的访问权限的概览。
注意
授予访问权限时,托管区域和 Amazon VPC 必须属于同一个分区。分区是一组 Amazon Web Services 区域。每个分区的作用域 Amazon Web Services 账户 仅限于一个分区。
以下是支持的分区:
-
aws
- Amazon Web Services 区域 -
aws-cn
– 中国区域 -
aws-us-gov
- Amazon GovCloud (US) Region
有关更多信息,请参阅《Amazon 一般参考》中的访问管理和 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 资源名称 () 中的通配符 (*ARN) 允许访问当前 Amazon 账户拥有的所有托管区域。
-
第二条语句授予创建和管理运行状况检查所需的全部操作的权限。
有关操作列表以及您指定授予或拒绝使用每个操作的权限,请参阅Amazon Route 53 API 权限:操作、资源和条件参考。ARN
使用 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:ListAllMyBuckets", "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 Targe t 的值为 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 Targe t 的值为 CloudFront 分布的别名记录。
如果您未使用 Route 53 控制台,则不需要这些权限。Route 53 仅用它来获取要在控制台中显示的分配的列表。
elasticloadbalancing:DescribeLoadBalancers
-
允许您创建和更新 Alias Targe t 的值为ELB负载均衡器的别名记录。
如果您未使用 Route 53 控制台,则不需要这些权限。Route 53 仅用它来获取要在控制台中显示的负载均衡器的列表。
elasticbeanstalk:DescribeEnvironments
-
可让您创建和更新 Alias Target(别名目标)值为 Elastic Beanstalk 环境的别名记录。
如果您未使用 Route 53 控制台,则不需要这些权限。Route 53 仅用它来获取要在控制台中显示的环境的列表。
s3:ListAllMyBuckets
、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 T arget 的值为 Amazon API Gateway 的别名记录API。
如果您未使用 Route 53 控制台,则不需要此权限。Route 53 仅使用它来获取APIs要在控制台中显示的列表。
kms:*
-
允许您使用 Amazon KMS 来启用DNSSEC签名。
域记录所有者的权限示例
使用资源记录集权限,您可以设置精细的权限,以限制 Amazon 用户可以更新或修改的内容。有关更多信息,请参阅 使用IAM策略条件进行精细的访问控制。
在某些情况下,托管区域所有者可能负责托管区域的整体管理,而组织中的另一个人负责这些任务的子集。例如,已启用DNSSEC签名的托管区域所有者可能想要创建一个IAM策略,其中包括允许其他人在托管区域中添加和删除资源集记录 (RRs) 以及其他任务。托管区域所有者选择为记录所有者或其他人员启用的特定权限将取决于其组织的策略。
以下是允许记录所有者修改流量IAM策略和运行状况检查的策略示例。RRs不允许使用此策略的记录所有者执行区域级别的操作,例如创建或删除区域、启用或禁用查询日志记录、创建或删除可重复使用的委托集或更改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 会根据 (KSK) 中的客户托管密钥创建密钥签名密钥 Amazon Key Management Service (Amazon KMS)。您可以使用支持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 } } }
混淆代理问题是一个安全性问题,即不具有操作执行权限的实体可能会迫使具有更高权限的实体执行该操作。为了保护您 Amazon KMS 免受其侵害,您可以选择通过提供aws:SourceAccount
和aws:SourceArn
条件的组合(两个或一个)来限制服务对基于资源的策略中的资源的权限。 aws:SourceAccount
是托管区域所有者的 Amazon 账户 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、或 Route 时,这些策略会起作用 Amazon CLI。 Amazon SDKs以下示例显示了几个常见使用情形的权限。有关为用户授予 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
。 -
DescribeVpcs
是显示列表所必需的VPCs。
{ "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": "*" } ] }