本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 IAM 策略条件进行精细访问控制
在 Route 53 中,使用 IAM policy 授予权限时,您可以指定条件(请参阅 访问控制)。例如,您可以:
-
授予权限以允许访问单个资源记录集。
-
授予权限以允许用户访问托管区域中特定 DNS 记录类型的所有资源记录集,例如 A 和 AAAA 记录。
-
授予权限以允许用户访问其名称包含特定字符串的资源记录集。
-
授予权限以允许用户仅在 Route 53 控制台上或使用 ChangeResourceRecordSetsAPI 时执行部分
CREATE | UPSERT | DELETE
操作。 -
授予允许用户将私有托管区与特定 VPC 关联或取消关联的权限。
-
授予允许用户将关联至特定 VPC 的托管区列示出来的权限。
-
授予允许用户创建新的私有托管区并将其关联至特定 VPC 的权限。
-
授予允许用户创建或删除 VPC 关联授权的权限。
您还可以创建组合任意精细权限的权限。
标准化 Route 53 条件键值
您为策略条件输入的值必须格式化或标准化,如下所示:
对于 route53:ChangeResourceRecordSetsNormalizedRecordNames
:
-
所有字母必须为小写形式。
-
DNS 名称不得带有结尾圆点。
-
除 a-z、0-9、-(连字符)、_(下划线)和 .(句点,作为标签之间的分隔符)以外的字符必须使用 \三位八进制代码格式的转义码。例如,
\052
是字符 * 的八进制代码。
对于 route53:ChangeResourceRecordSetsActions
,该值可为以下任意值,且必须为大写:
-
CREATE
-
UPSERT
-
DELETE
对于 route53:ChangeResourceRecordSetsRecordTypes
:
-
该值必须为大写,并且可以是 Route 53 支持的任何一种 DNS 记录类型。有关更多信息,请参阅 支持的 DNS 记录类型。
对于 route53:VPCs
:
-
该值必须采用
VPCId=<vpc-id>,VPCRegion=<region>
格式。 -
<vpc-id>
和<region>
的值必须为小写,比如VPCId=vpc-123abc
和VPCRegion=us-east-1
。 -
上下文键和值区分大小写。
重要
要获得按预期允许或限制操作的权限,您必须遵循以下约定。此条件键仅接受VPCId
且VPCRegion
元素,不支持任何其他 AWS 资源 AWS 账户,例如。
您可以使用《IAM 用户指南》中的 Access Analyzer 或 Policy Simulator 验证策略是否按预期授予或限制权限。您还可以通过将 IAM policy 应用于执行 Route 53 操作的测试用户或角色来验证权限。
指定条件:使用条件键
AWS 为所有支持 IAM 进行访问控制的 AWS 服务提供了一组预定义的条件键(AWS范围内的条件键)。例如,您可以先使用 aws:SourceIp
条件键检查请求者的 IP 地址,然后再允许执行操作。有关更多信息和 AWS范围条件键的列表,请参阅《IAM 用户指南》中的可用条件键。
注意
Route 53 不支持基于标签的条件键。
下表显示了适用于 Route 53 的 Route 53 服务专属条件键。
Route 53 条件键 | API 操作 | 值类型 | 描述 |
---|---|---|---|
route53:ChangeResourceRecordSetsNormalizedRecordNames |
多值 |
表示请求中的 DNS 记录名称列表ChangeResourceRecordSets。要获得预期的行为,IAM policy 中的 DNS 名称必须标准化,如下所示:
|
|
route53:ChangeResourceRecordSetsRecordTypes |
多值 |
表示
|
|
route53:ChangeResourceRecordSetsActions |
多值 |
表示
|
|
route53:VPCs |
多值 |
表示请求 VPCs 中AssociateVPCWithHostedZone 、、、DisassociateVPCFromHostedZone ListHostedZonesByVPC CreateHostedZone CreateVPCAssociationAuthorization 、和的列表DeleteVPCAssociationAuthorization ,格式为 “VPCId=<vpc-id>,VPCRegion= <region> |
策略示例:使用条件实现精细访问
此部分中的每个示例均将 Effect 子句设置为 Allow,并且仅指定允许的操作、资源和参数。只允许访问 IAM policy 中明确列出的项目。
在某些情况下,可以重新编写这些策略以使其成为基于拒绝的策略(即将 Effect 子句设置为 Deny 并反转策略中的所有逻辑)。然而,我们建议您避免使用基于拒绝的策略,因为与基于允许的策略相比,它们难以编写正确。由于需要进行文本标准化,因此对于 Route 53 来说尤其如此。
授予权限以限制访问具有特定名称的 DNS 记录
以下权限策略授予允许对 example.com 和 marketing.example.com 的托管区 Z12345 执行 ChangeResourceRecordSets
操作的权限。它使用 route53:ChangeResourceRecordSetsNormalizedRecordNames
条件键,以限制用户仅对与指定名称匹配的记录执行操作。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "route53:ChangeResourceRecordSets", "Resource": "arn:aws:route53:::hostedzone/Z11111112222222333333", "Condition": { "ForAllValues:StringEquals":{ "route53:ChangeResourceRecordSetsNormalizedRecordNames": ["example.com", "marketing.example.com"] } } } ] }
ForAllValues:StringEquals
是一个适用于多值键的 IAM 条件运算符。仅当 ChangeResourceRecordSets
中所有更改的 DNS 名称均为 example.com 时,上述策略中的条件才允许该操作。有关更多信息,请参阅《IAM 用户指南》中的 IAM 条件运算符和具有多个键或值的 IAM 条件。
要实现与具有特定后缀的名称相匹配的权限,可以在策略中使用 IAM 通配符(*)及条件运算符 StringLike
或 StringNotLike
。当 ChangeResourceRecordSets
操作中所有更改的 DNS 名称均以“-beta.example.com”结尾时,以下策略将允许该操作。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "route53:ChangeResourceRecordSets", "Resource": "arn:aws:route53:::hostedzone/Z11111112222222333333", "Condition": { "ForAllValues:StringLike":{ "route53:ChangeResourceRecordSetsNormalizedRecordNames": ["*-beta.example.com"] } } } ] }
注意
IAM 通配符与域名通配符不同。请参阅以下示例,了解如何将通配符与域名一起使用。
授予权限,限制访问与包含通配符的域名相匹配的 DNS 记录
以下权限策略授予允许对 example.com 的托管区 Z12345 执行 ChangeResourceRecordSets
操作的权限。它使用 route53:ChangeResourceRecordSetsNormalizedRecordNames
条件键,以限制用户仅对与 *.example.com 匹配的记录执行操作。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "route53:ChangeResourceRecordSets", "Resource": "arn:aws:route53:::hostedzone/Z11111112222222333333", "Condition": { "ForAllValues:StringEquals":{ "route53:ChangeResourceRecordSetsNormalizedRecordNames": ["\\052.example.com"] } } } ] }
\052
是 DNS 名称中字符 * 的八进制代码,且 \052
中的 \
转义为 \\
以遵循 JSON 语法。
授予权限以限制访问特定 DNS 记录
以下权限策略授予允许对 example.com 的托管区 Z12345 执行 ChangeResourceRecordSets
操作的权限。它使用三个条件键的组合来限制用户操作,只允许创建或编辑具有特定 DNS 名称和类型的 DNS 记录。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "route53:ChangeResourceRecordSets", "Resource": "arn:aws:route53:::hostedzone/Z11111112222222333333", "Condition": { "ForAllValues:StringEquals":{ "route53:ChangeResourceRecordSetsNormalizedRecordNames": ["example.com"], "route53:ChangeResourceRecordSetsRecordTypes": ["MX"], "route53:ChangeResourceRecordSetsActions": ["CREATE", "UPSERT"] } } } ] }
授予限制访问的权限,以仅创建和编辑指定类型的 DNS 记录
以下权限策略授予允许对 example.com 的托管区 Z12345 执行 ChangeResourceRecordSets
操作的权限。它使用 route53:ChangeResourceRecordSetsRecordTypes
条件键,以限制用户仅对与指定类型匹配的记录执行操作(A 和 AAAA)。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "route53:ChangeResourceRecordSets", "Resource": "arn:aws:route53:::hostedzone/Z11111112222222333333", "Condition": { "ForAllValues:StringEquals":{ "route53:ChangeResourceRecordSetsRecordTypes": ["A", "AAAA"] } } } ] }
授予指定 IAM 主体可以在其中操作的 VPC 的权限
以下权限策略授予在 vpc-id 指定的 VPC 上允许 AssociateVPCWithHostedZone
、DisassociateVPCFromHostedZone
、ListHostedZonesByVPC
、CreateHostedZone
、CreateVPCAssociationAuthorization
和 DeleteVPCAssociationAuthorization
操作的权限。
重要
必须采用 VPCId=<vpc-id>,VPCRegion=<region>
格式提供条件值。如果在条件值中指定了 VPC ARN,则条件键不会生效。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Action": [ "route53:*" ], "Resource": [ "*" ], "Condition": { "ForAllValues:StringLike": { "route53:VPCs": [ "VPCId=<vpc-id>,VPCRegion=<region>" ] } } }, { "Sid": "Statement2", "Effect": "Allow", "Action": "ec2:DescribeVpcs", "Resource": "*" } ] }