使用 IAM policy 条件进行精细访问控制以管理资源记录集 - Amazon Route 53
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 IAM policy 条件进行精细访问控制以管理资源记录集

在 Route 53 中授予资源记录集的权限时,可以指定确定权限策略如何生效的条件。

在 Route 53 中,使用 IAM policy 授予权限时,您可以指定条件(请参阅 访问控制)。例如,您可以:

  • 授予权限以允许访问单个资源记录集。

  • 授予权限以允许用户访问托管区域中特定 DNS 记录类型的所有资源记录集,例如 A 和 AAAA 记录。

  • 授予权限以允许用户访问其名称包含特定字符串的资源记录集。

  • 授予权限以允许用户仅在 Route 53 控制台上或使用 ChangeResourceRecordSetsAPI 时执行部分CREATE | UPSERT | DELETE操作。

您还可以创建组合任意精细权限的权限。

使用 IAM Condition 元素实现精细的访问控制策略。通过将 Condition 元素添加到权限策略,您可以根据业务需求允许或拒绝对 Route 53 资源记录集中记录的访问。例如,您的 IAM policy 可限制对托管区域中单个 DNS 记录的访问。然后,将该策略附加到用户、组或角色。

标准化条件键值

您为策略条件输入的值必须格式化或标准化,如下所示:

对于 route53:ChangeResourceRecordSetsNormalizedRecordNames

  • 所有字母必须为小写形式。

  • DNS 名称不得带有结尾圆点。

  • 除 a-z、0-9、-(连字符)、_(下划线)和 .(句点,作为标签之间的分隔符)以外的字符必须使用 \三位八进制代码格式的转义码。例如,\052 是字符 * 的八进制代码。

对于 route53:ChangeResourceRecordSetsActions,该值可为以下任意值,且必须为大写:

  • CREATE

  • UPSERT

  • 删除

对于 route53:ChangeResourceRecordSetsRecordTypes

  • 该值必须为大写,并且可以是 Route 53 支持的任何一种 DNS 记录类型。有关更多信息,请参阅 支持的 DNS 记录类型

重要

要获得按预期允许或限制操作的权限,您必须遵循以下约定。

您可以使用《IAM 用户指南》中的 Access AnalyzerPolicy Simulator 验证策略是否按预期授予或限制权限。您还可以通过将 IAM policy 应用于执行 Route 53 操作的测试用户或角色来验证权限。

指定条件:使用条件键

Amazon 为支持通过 IAM 进行访问控制的所有 Amazon 服务提供了一组预定义条件键(Amazon 范围内的条件键)。例如,您可以先使用 aws:SourceIp 条件键检查请求者的 IP 地址,然后再允许执行操作。有关更多信息和 Amazon 范围条件键的列表,请参阅《IAM 用户指南》中的可用条件键

注意

Route 53 不支持基于标签的条件键。

下表显示了适用于资源记录集的、Route 53 服务特定的条件键。

Route 53 条件键 API 操作 值类型 描述
route53:ChangeResourceRecordSetsNormalizedRecordNames

ChangeResourceRecordSets

多值

表示请求中的 DNS 记录名称列表ChangeResourceRecordSets。要获得预期的行为,IAM policy 中的 DNS 名称必须标准化,如下所示:

  • 所有字母必须为小写形式。

  • DNS 名称不得带有结尾圆点。

  • 除 a 到 z、0 到 9、-(连字符)、_(下划线)和 .(句点,作为标签之间的分隔符)以外的字符必须使用 \三位八进制代码格式的转义码。

route53:ChangeResourceRecordSetsRecordTypes

ChangeResourceRecordSets

多值

表示 ChangeResourceRecordSets 请求中的 DNS 记录类型列表。

ChangeResourceRecordSetsRecordTypes 可以是 Route 53 支持的任何 DNS 记录类型。有关更多信息,请参阅 支持的 DNS 记录类型。在策略中,所有内容必须以大写形式输入。

route53:ChangeResourceRecordSetsActions

ChangeResourceRecordSets

多值

表示 ChangeResourceRecordSets 请求中的操作列表。

ChangeResourceRecordSetsActions 可为以下任意值(必须为大写):

  • CREATE

  • UPSERT

  • 删除

策略示例:使用条件实现精细访问

此部分中的每个示例均将 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 通配符(*)及条件运算符 StringLikeStringNotLike。当 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"] } } } ] }