使用 IAM policy 条件进行精细访问控制以管理资源记录集
在 Route 53 中授予资源记录集的权限时,可以指定确定权限策略如何生效的条件。
在 Route 53 中,使用 IAM policy 授予权限时,您可以指定条件(请参阅 访问控制)。譬如,您可以:
-
授予权限以允许访问单个资源记录集。
-
授予权限以允许用户访问托管区域中特定 DNS 记录类型的所有资源记录集,例如 A 和 AAAA 记录。
-
授予权限以允许用户访问其名称包含特定字符串的资源记录集。
-
授予权限以允许用户在 Route 53 控制台上或使用 ChangeResourceRecordSets API 时仅执行部分
CREATE | UPSERT | DELETE
操作。
您还可以创建组合任意精细权限的权限。
使用 IAM Condition
元素实现精细的访问控制策略。通过将 Condition
元素添加到权限策略,您可以根据业务需求允许或拒绝对 Route 53 资源记录集中记录的访问。例如,您的 IAM policy 可限制对托管区域中单个 DNS 记录的访问。然后,将该策略附加到用户、组或角色。
标准化条件键值
您为策略条件输入的值必须格式化或标准化,如下所示:
对于 route53:ChangeResourceRecordSetsNormalizedRecordNames
:
-
所有字母必须为小写形式。
-
DNS 名称不得带有结尾圆点。
-
除 a-z、0-9、-(连字符)、_(下划线)和 .(句点,作为标签之间的分隔符)以外的字符必须使用 \三位八进制代码格式的转义码。例如,
\052
是字符 * 的八进制代码。
对于 route53:ChangeResourceRecordSetsActions
,该值可为以下任意值,且必须为大写:
-
创建
-
UPSERT
-
删除
对于 route53:ChangeResourceRecordSetsRecordTypes
:
-
该值必须为大写,并且可以是 Route 53 支持的任何一种 DNS 记录类型。有关更多信息,请参阅支持的 DNS 记录类型。
重要
要获得按预期允许或限制操作的权限,您必须遵循以下约定。
您可以使用《IAM 用户指南》中的 Access Analyzer 或 Policy 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 记录名称列表。要获得预期的行为,IAM policy 中的 DNS 名称必须标准化,如下所示:
|
|
route53:ChangeResourceRecordSetsRecordTypes |
多值 |
表示
|
|
route53:ChangeResourceRecordSetsActions |
多值 |
表示
|
策略示例:使用条件实现精细访问
此部分中的每个示例均将 Effect 子句设置为 Allow,并且仅指定允许的操作、资源和参数。只允许访问 IAM policy 中明确列出的项目。
在某些情况下,可以重新编写这些策略以使其成为基于拒绝的策略(即将 Effect 子句设置为 Deny 并反转策略中的所有逻辑)。然而,我们建议您避免使用基于拒绝的策略,因为与基于允许的策略相比,它们难以编写正确。由于需要进行文本标准化,因此对于 Route 53 来说尤其如此。
授予权限以限制访问具有特定名称的 DNS 记录
以下权限策略授予允许对 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"] } } } ] }