

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 將以身分為基礎的政策 (IAM 政策) 用於 Amazon Route 53
<a name="access-control-managing-permissions"></a>

本主題提供以身分為基礎的政策範例，此範例會示範帳戶管理員如何將許可政策連接至 IAM 身分，並藉此授與許可，以對 Amazon Route 53 資源執行操作。

**重要**  
建議您先檢閱簡介主題，這些主題說明管理 Route 53 資源存取的基本槪念與選項。如需詳細資訊，請參閱[管理 Amazon Route 53 資源存取許可的概觀](access-control-overview.md)。

**注意**  
授與存取權時，託管區域和 Amazon VPC 必須屬於相同分割區。分割區是 的群組 AWS 區域。每個 的範圍 AWS 帳戶 都是一個分割區。  
以下是支援的分割區：  
`aws` - AWS 區域
`aws-cn` - 中國區域
`aws-us-gov` - AWS GovCloud (US) Region
如需詳細資訊，請參閱 *AWS 一般參考*中的[存取管理](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)[和 Amazon Route 53 端點和配額](https://docs.aws.amazon.com/general/latest/gr/r53.html)。

**Topics**
+ [使用 Amazon Route 53 主控台所需的許可](#console-required-permissions)
+ [網域記錄擁有者的許可範例](#example-permissions-record-owner)
+ [DNSSEC 簽署需要 Route 53 客戶受管金鑰許可](#KMS-key-policy-for-DNSSEC)
+ [客戶管理政策範例](#access-policy-examples-for-sdk-cli)

以下範例示範許可政策。`Sid` (陳述式 ID) 為選用：

------
#### [ JSON ]

****  

```
{
    "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) 中的萬用字元 (\$1) 會授予目前 AWS 帳戶擁有的所有託管區域的存取權。
+ 第二個陳述式授予建立和管理運作狀態檢查所需的動作的許可。

如需為了授與或拒絕使用每個動作的許可而指定的動作和 ARN 清單，請參閱 [Amazon Route 53 API 許可：動作、資源和條件參考](r53-api-permissions-ref.md)。

### 使用 Amazon Route 53 主控台所需的許可
<a name="console-required-permissions"></a>

若要授予 Amazon Route 53 主控台的完整存取權，可在以下許可政策中授予許可：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Effect":"Allow",
            "Action":[
                "route53:*", 
                "route53domains:*",
                "tag:*",
                "ssm:GetParametersByPath",
                "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 儲存貯體的別名記錄。(透過這些許可，您可以建立 **Alias Target (別名目標)** 之值為相同託管區域中另一個記錄的別名記錄。)
+ 使用私有託管區域。
+ 使用網域。
+ 建立、刪除和檢視 CloudWatch 警示。
+ 在 Route 53 主控台中轉譯 CloudWatch 指標。

**`route53domains:*`**  
可讓您使用網域。  
如果您個別列出 `route53` 動作，則必須包含 `route53:CreateHostedZone` 才能使用網域。當您註冊網域，同時會建立託管區域，因此包含註冊網域許可的政策也需要建立託管區域的許可。
對於網域註冊，Route 53 不支援授與或拒絕個別資源許可。

**`route53resolver:*`**  
可讓您使用 Route 53 VPC Resolver。

**`ssm:GetParametersByPath`**  
可讓您在建立新的別名記錄、私人託管區域和運作狀態檢查時擷取公開可用的區域。

**`cloudfront:ListDistributions`**  
可讓您建立和更新 **Alias Target (別名目標)** 之值為 CloudFront 分佈的別名記錄。  
如果未使用 Route 53 主控台，則不需要這些許可。Route 53 只使用它來取得顯示在主控台中的分佈清單。

**`elasticloadbalancing:DescribeLoadBalancers`**  
可讓您建立和更新 **Alias Target (別名目標)** 之值為 ELB 負載平衡器的別名記錄。  
如果未使用 Route 53 主控台，則不需要這些許可。Route 53 只使用它來取得顯示在主控台中的負載平衡器清單。

**`elasticbeanstalk:DescribeEnvironments`**  
可讓您建立和更新 **Alias Target (別名目標)** 之值為 Elastic Beanstalk 環境的別名記錄。  
如果未使用 Route 53 主控台，則不需要這些許可。Route 53 只使用它來取得顯示在主控台中的環境清單。

**`s3:ListAllMyBuckets`、`s3:GetBucketLocation` 與 `s3:GetBucketWebsite`**  
可讓您建立和更新 **Alias Target (別名目標)** 之值為 Amazon S3 儲存貯體的別名記錄。(只有在儲存貯體設定為網站端點時，您才可以建立 Amazon S3 儲存貯體的別名； `s3:GetBucketWebsite` 會取得所需的組態資訊。)  
如果未使用 Route 53 主控台，則不需要這些許可。Route 53 只使用它來取得顯示在主控台中的儲存貯體清單。

**`ec2:DescribeVpcs` 和 `ec2:DescribeRegions`**  
可讓您使用私有託管區域。

**所有列出的 `ec2` 許可**  
可讓您使用 Route 53 VPC 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:*`**  
可讓您使用 AWS KMS 來啟用 DNSSEC 簽署。

### 網域記錄擁有者的許可範例
<a name="example-permissions-record-owner"></a>

透過資源記錄集許可，您可以設定精細的許可，以限制 AWS 使用者可以更新或修改的內容。如需詳細資訊，請參閱[使用 IAM 政策條件進行精細定義存取控制](specifying-conditions-route53.md)。

在某些情況下，託管區域擁有者可能負責託管區域的整體管理，而組織中的其他人則負責這些任務的子集。例如，已啟用 DNSSEC 簽署的託管區域擁有者可能想要建立 IAM 政策，其中包含其他人在託管區域中新增和刪除資源集記錄 (RR) 的許可，以及執行其他任務的許可。託管區域擁有者選擇為記錄擁有者或其他人啟用的特定許可，將取決於其組織的政策。

以下是 IAM 政策範例，這些政策可讓記錄擁有者修改 RR、流量政策和運作狀態檢查。具有此政策的記錄擁有者不允許執行區域層級作業，例如建立或刪除區域、啟用或停用查詢日誌記錄、建立或刪除可重複使用的委派集，或變更 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 客戶受管金鑰許可
<a name="KMS-key-policy-for-DNSSEC"></a>

當您為 Route 53 啟用 DNSSEC 簽署時，Route 53 會根據客戶受管金鑰 in AWS Key Management Service () 建立金鑰簽署金鑰 (KSK)AWS KMS。您可以使用現有的客戶受管金鑰 (支援 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
                }
            }
        }
```

混淆代理問題屬於安全性議題，其中沒有動作許可的實體可以強制具有更多權限的實體執行該動作。為了保護您的 AWS KMS 不受威脅，您可以選擇性地透過提供 `aws:SourceAccount`和 `aws:SourceArn`條件 （兩者或一個） 的組合，將服務擁有的許可限制在資源型政策中的資源。 `aws:SourceAccount` 是託管區域擁有者 AWS 的帳戶 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 使用者指南*》中的[混淆代理問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)。

### 客戶管理政策範例
<a name="access-policy-examples-for-sdk-cli"></a>

您可以建立自訂 IAM 政策，授予執行 Route 53 動作的相關許可。您可以將這些自訂政策連接至需要指定許可的 IAM 群組。當您使用 Route 53 API、 AWS SDKs或 CLI AWS 時，這些政策會運作。以下範例示範幾個常用案例的許可。如需授與使用者 Route 53完整存取權的政策，請參閱 [使用 Amazon Route 53 主控台所需的許可](#console-required-permissions)。

**Topics**
+ [範例 1：允許讀取存取所有託管區域](#access-policy-example-allow-read-hosted-zones)
+ [範例 2：允許建立和刪除託管區域](#access-policy-example-allow-create-delete-hosted-zones)
+ [範例 3：允許完整存取所有網域 (僅限公有託管區域)](#access-policy-example-allow-full-domain-access)
+ [範例 4：允許建立傳入和傳出 Route 53 VPC 解析程式端點](#access-policy-example-create-resolver-endpoints)

#### 範例 1：允許讀取存取所有託管區域
<a name="access-policy-example-allow-read-hosted-zones"></a>

以下許可政策為使用者授與列出所有託管區域和檢視託管區域中的所有記錄的許可。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Effect":"Allow",
            "Action":[
                "route53:GetHostedZone", 
                "route53:ListResourceRecordSets"
            ],
            "Resource":"*"
        },
        {
            "Effect":"Allow",
            "Action":["route53:ListHostedZones"],
            "Resource":"*"
        }
    ]
}
```

------

#### 範例 2：允許建立和刪除託管區域
<a name="access-policy-example-allow-create-delete-hosted-zones"></a>

以下許可政策允許使用者建立和刪除託管區域，以及追蹤變更進度。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Effect":"Allow",
            "Action":["route53:CreateHostedZone"],
            "Resource":"*"
        },
        {
            "Effect":"Allow",
            "Action":["route53:DeleteHostedZone"],
            "Resource":"*"
        },
        {
            "Effect":"Allow",
            "Action":["route53:GetChange"],
            "Resource":"*"
        }
    ]
}
```

------

#### 範例 3：允許完整存取所有網域 (僅限公有託管區域)
<a name="access-policy-example-allow-full-domain-access"></a>

以下許可政策允許使用者在網域註冊上執行所有動作，包括註冊網域和建立託管區域的許可。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Effect":"Allow",
            "Action":[
                "route53domains:*",
                "route53:CreateHostedZone"
            ],
            "Resource":"*"
        }
    ]
}
```

------

當您註冊網域，同時會建立託管區域，因此包含註冊網域許可的政策也需要建立託管區域的許可。(對於網域註冊，Route 53 不支援授與個別資源許可。)

如需有關使用私有託管區域所需許可的詳細資訊，請參閱[使用 Amazon Route 53 主控台所需的許可](#console-required-permissions)。

#### 範例 4：允許建立傳入和傳出 Route 53 VPC 解析程式端點
<a name="access-policy-example-create-resolver-endpoints"></a>

下列許可政策可讓使用者使用 Route 53 主控台來建立 Resolver 傳入和傳出端點 

其中一些許可僅在主控台中建立端點時才需要。如果您只是要以程式設計方式建立傳入和傳出端點而想要授與許可，可以忽略這些許可：
+ `route53resolver:ListResolverEndpoints` 讓使用者查看傳入或傳出端點的清單，以便確認端點是否已建立。
+ `DescribeAvailabilityZones` 是顯示可用區域清單的必要項。
+ `DescribeVpcs` 是顯示 VPC 清單的必要項。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "route53resolver:CreateResolverEndpoint",
                "route53resolver:ListResolverEndpoints",
                "ec2:CreateNetworkInterface",
                "ec2:DescribeAvailabilityZones",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeSubnets",
                "ec2:DescribeVpcs"
            ],
            "Resource": "*"
        }
    ]
}
```

------