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

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

使用IAM策略条件进行精细的访问控制

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

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

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

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

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

  • 授予权限以允许用户将私有托管区域与特定区域关联或解除关联。VPC

  • 授予权限以允许用户列出与特定区域关联的托管区域VPC。

  • 授予权限以允许用户创建新的私有托管区域并将其与特定区域相关联VPC。

  • 授予权限以允许用户创建或删除VPC关联授权。

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

标准化 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

  • 上下文键和值区分大小写。

重要

要获得按预期允许或限制操作的权限,您必须遵循以下约定。此条件键仅接受VPCIdVPCRegion元素,不支持任何其他 Amazon 资源 Amazon Web Services 账户,例如。

您可以使用IAM用户指南中的访问分析器或策略模拟器来验证您的策略是否按预期授予或限制权限。您还可以通过将IAM策略应用于测试用户或角色来执行 Route 53 操作来验证权限。

指定条件:使用条件键

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

注意

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

下表显示了适用于 Route 53 的 Route 53 服务特定条件密钥。

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

ChangeResourceRecordSets

多值

表示请求中的DNS记录名称列表ChangeResourceRecordSets。要获得预期的行为,必须按以下方式对IAM策略中的DNS名称进行标准化:

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

  • DNS名称必须不带尾随点。

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

route53:ChangeResourceRecordSetsRecordTypes

ChangeResourceRecordSets

多值

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

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

route53:ChangeResourceRecordSetsActions

ChangeResourceRecordSets

多值

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

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

  • CREATE

  • UPSERT

  • DELETE

route53:VPCs

A ssociateVPCWith HostedZone

D isassociateVPCFrom HostedZone

ListHostedZonesByVPC

CreateHostedZone

C reateVPCAssociation 授权

D eleteVPCAssociation 授权

多值

表示请求VPCs中AssociateVPCWithHostedZone、、、DisassociateVPCFromHostedZoneListHostedZonesByVPCCreateHostedZoneCreateVPCAssociationAuthorization、和的列表DeleteVPCAssociationAuthorization,格式为 “VPCId=<vpc-id>,VPCRegion= <region>

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

此部分中的每个示例均将 Effect 子句设置为 Allow,并且仅指定允许的操作、资源和参数。仅允许访问IAM政策中明确列出的内容。

在某些情况下,可以重新编写这些策略以使其成为基于拒绝的策略(即将 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条件运算符。上述策略中的条件仅在所有更改的DNS名称均为 example.co ChangeResourceRecordSets m 时才允许该操作。有关更多信息,请参阅《IAM用户指南》中的IAMIAM条件运算符和带有多个键或值的条件。

要实现与具有特定后缀的名称相匹配的权限,可以在策略中使用带有条件运IAM算符或的通配符 (*)。StringLike StringNotLike当操作中的所有更改的DNS名称都以 “-beta.example.com” 结尾时,以下策略将允许该ChangeResourceRecordSets操作。

{ "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名称中字符 * 的八进制代码,\in \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 指定的允许AssociateVPCWithHostedZoneDisassociateVPCFromHostedZoneListHostedZonesByVPCCreateHostedZoneCreateVPCAssociationAuthorization、、、、和DeleteVPCAssociationAuthorization操作的权限。

重要

条件值的格式必须为VPCId=<vpc-id>,VPCRegion=<region>。如果您在条件值VPCARN中指定 a,则条件键将不会生效。

{ "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": "*" } ] }