将基于身份的策略(IAM 策略)用于 Amazon Route 53 - Amazon Route 53
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

将基于身份的策略(IAM 策略)用于 Amazon Route 53

本主题提供了基于身份的策略的示例,这些示例展示了账户管理员如何将权限策略附加到 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 一般参考》中的访问权限管理

下面显示了一个示例权限策略。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) 中的通配符 (*) 授予对当前 Amazon 账户拥有的所有托管区域的访问权限。

  • 第二条语句授予创建和管理运行状况检查所需的全部操作的权限。

有关您为授予或拒绝使用每项操作的权限而指定的操作和 ARN 的列表,请参阅Amazon Route 53 API 权限:操作、资源和条件参考

使用 Amazon Route 53 控制台所需的权限

要授予对 Amazon Route 53 控制台的完全访问权,您可以在以下权限策略中授予权限:

{ "Version": "2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "route53:*", "route53domains:*", "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 Target(别名目标)值为 CloudFront 分配、Elastic Load Balancing 负载均衡器、Elastic Beanstalk 环境或 Amazon S3 存储桶的别名记录。(通过这些权限,您可以创建其别名目标值为同一托管区域中的另一个记录的别名记录。)

  • 使用私有托管区域。

  • 使用域。

  • 创建、删除和查看 CloudWatch 警报。

  • 在 Route 53 控制台中呈现 CloudWatch 指标。

route53domains:*

允许您使用域。

重要

如果您单独列出 route53 操作,则必须包含 route53:CreateHostedZone 才能使用域。注册域时,会同时创建一个托管区域,因此包括注册域权限的策略还需要创建托管区域的权限。

对于域注册,Route 53 不支持向单个资源授予或拒绝权限。

route53resolver:*

可让您使用 Route 53 Resolver。

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:ListAllMyBucketss3:GetBucketLocations3: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:*

可让您使用 Amazon KMS 启用 DNSSEC 签名。

域记录所有者的权限示例

在某些情况下,托管区域所有者可能负责托管区域的整体管理,而组织中的另一个人负责这些任务的子集。例如,已启用 DNSSEC 签名的托管区域所有者可能希望创建一个 IAM 策略,其中包括其他人在托管区域中添加和删除资源集记录 (RR) 的权限以及其它任务。托管区域所有者选择为记录所有者或其他人员启用的特定权限将取决于其组织的策略。

以下是允许记录所有者修改 RR、流量策略和运行状况检查的示例 IAM 策略。不允许使用此策略的记录所有者执行区域级操作,例如创建或删除区域、启用或禁用查询日志记录、创建或删除可重用的委派集或更改 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 会根据 Amazon Key Management Service (Amazon 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 } } }

混淆代理问题是一个安全性问题,即不具有操作执行权限的实体可能会迫使具有更高权限的实体执行该操作。为了保护 Amazon KMS 不遭受该问题,您可以通过提供 aws:SourceAccountaws: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、Amazon 软件开发工具包或 Amazon 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:CreateNetworkInterfacePermission", "ec2:DescribeAvailabilityZones", "ec2:DescribeNetworkInterfaces", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs" ], "Resource": "*" } ] }