

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

# Amazon CloudFront 的身分型政策範例
<a name="security_iam_id-based-policy-examples"></a>

根據預設，使用者和角色不具備建立或修改 CloudFront 資源的權限。若要授予使用者對其所需資源執行動作的許可，IAM 管理員可以建立 IAM 政策。

如需了解如何使用這些範例 JSON 政策文件建立 IAM 身分型政策，請參閱《*IAM 使用者指南*》中的[建立 IAM 政策 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)。

如需 CloudFront 所定義之動作和資源類型的詳細資訊，包括每種資源類型的 ARN 格式，請參閱*《服務授權參考》*中 [Amazon CloudFront 適用的動作、資源和條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudfront.html)。

**Topics**
+ [政策最佳實務](#security_iam_service-with-iam-policy-best-practices)
+ [允許使用者檢視他們自己的許可](#security_iam_id-based-policy-examples-view-own-permissions)
+ [透過程式設計方式存取 CloudFront 的許可](#security_iam_id-based-policy-examples-programmatic-access-all)
+ [使用 CloudFront 主控台所需的許可](#security_iam_id-based-policy-examples-console-required-permissions)
+ [客戶受管政策範例](#security_iam_id-based-policy-examples-sdk-cli)

## 政策最佳實務
<a name="security_iam_service-with-iam-policy-best-practices"></a>

以身分為基礎的政策會判斷您帳戶中的某個人員是否可以建立、存取或刪除 CloudFront 資源。這些動作可能會讓您的 AWS 帳戶產生費用。當您建立或編輯身分型政策時，請遵循下列準則及建議事項：
+ **開始使用 AWS 受管政策並邁向最低權限許可** – 若要開始將許可授予您的使用者和工作負載，請使用將許可授予許多常見使用案例的 *AWS 受管政策*。它們可在您的 中使用 AWS 帳戶。我們建議您定義特定於使用案例 AWS 的客戶受管政策，以進一步減少許可。如需更多資訊，請參閱《*IAM 使用者指南*》中的 [AWS 受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)或[任務職能的AWS 受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html)。
+ **套用最低權限許可** – 設定 IAM 政策的許可時，請僅授予執行任務所需的許可。為實現此目的，您可以定義在特定條件下可以對特定資源採取的動作，這也稱為*最低權限許可*。如需使用 IAM 套用許可的更多相關資訊，請參閱《*IAM 使用者指南*》中的 [IAM 中的政策和許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)。
+ **使用 IAM 政策中的條件進一步限制存取權** – 您可以將條件新增至政策，以限制動作和資源的存取。例如，您可以撰寫政策條件，指定必須使用 SSL 傳送所有請求。如果透過特定 例如 使用服務動作 AWS 服務，您也可以使用條件來授予其存取權 CloudFormation。如需詳細資訊，請參閱《*IAM 使用者指南*》中的 [IAM JSON 政策元素：條件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)。
+ **使用 IAM Access Analyzer 驗證 IAM 政策，確保許可安全且可正常運作** – IAM Access Analyzer 驗證新政策和現有政策，確保這些政策遵從 IAM 政策語言 (JSON) 和 IAM 最佳實務。IAM Access Analyzer 提供 100 多項政策檢查及切實可行的建議，可協助您撰寫安全且實用的政策。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[使用 IAM Access Analyzer 驗證政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html)。
+ **需要多重要素驗證 (MFA)** – 如果您的案例需要 IAM 使用者或 中的根使用者 AWS 帳戶，請開啟 MFA 以提高安全性。如需在呼叫 API 操作時請求 MFA，請將 MFA 條件新增至您的政策。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[透過 MFA 的安全 API 存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)。

如需 IAM 中最佳實務的相關資訊，請參閱《*IAM 使用者指南*》中的 [IAM 安全最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

## 允許使用者檢視他們自己的許可
<a name="security_iam_id-based-policy-examples-view-own-permissions"></a>

此範例會示範如何建立政策，允許 IAM 使用者檢視附加到他們使用者身分的內嵌及受管政策。此政策包含在主控台或使用 或 AWS CLI AWS API 以程式設計方式完成此動作的許可。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ViewOwnUserInfo",
            "Effect": "Allow",
            "Action": [
                "iam:GetUserPolicy",
                "iam:ListGroupsForUser",
                "iam:ListAttachedUserPolicies",
                "iam:ListUserPolicies",
                "iam:GetUser"
            ],
            "Resource": ["arn:aws:iam::*:user/${aws:username}"]
        },
        {
            "Sid": "NavigateInConsole",
            "Effect": "Allow",
            "Action": [
                "iam:GetGroupPolicy",
                "iam:GetPolicyVersion",
                "iam:GetPolicy",
                "iam:ListAttachedGroupPolicies",
                "iam:ListGroupPolicies",
                "iam:ListPolicyVersions",
                "iam:ListPolicies",
                "iam:ListUsers"
            ],
            "Resource": "*"
        }
    ]
}
```

## 透過程式設計方式存取 CloudFront 的許可
<a name="security_iam_id-based-policy-examples-programmatic-access-all"></a>

以下說明許可政策。`Sid` (陳述式 ID) 為選用。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Sid": "AllowAllCloudFrontPermissions",
         "Effect": "Allow",
         "Action": ["cloudfront:*"],
         "Resource": "*"
      }
   ]
}
```

------

此政策授予執行所有 CloudFront 操作的許可，足夠以程式設計方式存取 CloudFront。如果您使用主控台存取 CloudFront，請參閱[使用 CloudFront 主控台所需的許可](#security_iam_id-based-policy-examples-console-required-permissions)。

如需指定以授予或拒絕使用每個動作的許可的動作和 ARN 清單，請參閱*《服務授權參考》*中的 [Amazon CloudFront 的動作、資源及條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudfront.html)。

## 使用 CloudFront 主控台所需的許可
<a name="security_iam_id-based-policy-examples-console-required-permissions"></a>

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

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "acm:ListCertificates", 
            "cloudfront:*", 
            "cloudwatch:DescribeAlarms",
            "cloudwatch:PutMetricAlarm",
            "cloudwatch:GetMetricStatistics",
            "elasticloadbalancing:DescribeLoadBalancers",
            "iam:ListServerCertificates",
            "sns:ListSubscriptionsByTopic",
            "sns:ListTopics",
            "waf:GetWebACL",
            "waf:ListWebACLs"
         ],
         "Resource":"*"
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:ListAllMyBuckets",
            "s3:PutBucketPolicy"
         ],
         "Resource":"arn:aws:s3:::*"
      }
   ]
}
```

------

需要許可的原因如下：

**`acm:ListCertificates`**  
當您使用 CloudFront 主控台建立和更新分佈時，若想要將 CloudFront 設定為在檢視器與 CloudFront 之間或 CloudFront 與原始伺服器之間必須使用 HTTPS，許可會讓您可查看 ACM 憑證清單。  
如果不是使用 CloudFront 主控台，不需要此許可。

**`cloudfront:*`**  
讓您可執行所有 CloudFront 動作。

**`cloudwatch:DescribeAlarms` 和 `cloudwatch:PutMetricAlarm`**  
讓您可在 CloudFront 主控台中建立和檢視 CloudWatch 警示。另請參閱 `sns:ListSubscriptionsByTopic` 和 `sns:ListTopics`。  
如果不是使用 CloudFront 主控台，不需要這些許可。

**`cloudwatch:GetMetricStatistics`**  
讓 CloudFront 可在 CloudFront 主控台中轉譯 CloudWatch 指標。  
如果不是使用 CloudFront 主控台，不需要此許可。

**`elasticloadbalancing:DescribeLoadBalancers`**  
在建立和更新分佈時，許可會讓您可在可用的原始伺服器清單中查看 Elastic Load Balancing 負載平衡器清單。  
如果不是使用 CloudFront 主控台，不需要此許可。

**`iam:ListServerCertificates`**  
當您使用 CloudFront 主控台建立和更新分佈時，若想要將 CloudFront 設定為在檢視器與 CloudFront 之間或 CloudFront 與原始伺服器之間必須使用 HTTPS，許可會讓您可查看 IAM 憑證存放區中的憑證清單。  
如果不是使用 CloudFront 主控台，不需要此許可。

**`s3:ListAllMyBuckets`**  
當您建立和更新分佈，可以執行以下操作：  
+ 檢視在可用的原始伺服器清單中的 S3 儲存貯體清單
+ 檢視可以保存存取記錄的 S3 儲存貯體清單
如果不是使用 CloudFront 主控台，不需要此許可。

**`S3:PutBucketPolicy`**  
當您建立或更新限制存取 S3 儲存貯體的分佈時，許可會讓使用者可更新儲存貯體政策來授予對 CloudFront 原始存取身分的存取權。如需詳細資訊，請參閱[使用原始存取身分 (舊版，不建議使用)](private-content-restricting-access-to-s3.md#private-content-restricting-access-to-s3-oai)。  
如果不是使用 CloudFront 主控台，不需要此許可。

**`sns:ListSubscriptionsByTopic` 和 `sns:ListTopics`**  
當您在 CloudFront 主控台中建立 CloudWatch 警示時，讓您可為通知選擇 SNS 主題。  
如果不是使用 CloudFront 主控台，不需要這些許可。

**`waf:GetWebACL` 和 `waf:ListWebACLs`**  
可讓您在 CloudFront 主控台中檢視 AWS WAF Web ACLs 的清單。  
如果不是使用 CloudFront 主控台，不需要這些許可。

### CloudFront 主控台的僅限許可動作
<a name="console-only-actions"></a>

您可在 [CloudFront 安全防護優惠組合](https://console.aws.amazon.com//cloudfront/v3/home#/savings-bundle/overview)頁面執行下列 CloudFront 動作。下列 API 動作並非由您的程式碼呼叫，也不會包含在 AWS CLI 和 AWS SDKs中。


****  

| Action | Description | 
| --- | --- | 
|  `CreateSavingsPlan`  |  授予許可權限以建立新 Savings Plan。  | 
|   `GetSavingsPlan`   |  授予許可以權限以獲取 Savings Plan。  | 
|  `ListRateCards`  |  授予許可權限以列出帳戶的 CloudFront 費率卡。  | 
|   `ListSavingsPlans`   |  授予許可權限以列出帳戶中的 Savings Plans。  | 
|   `ListUsages`   |  授予許可權限以列出 CloudFront 用量。  | 
|   `UpdateSavingsPlan`   |  授予許可權限以更新 Savings Plan。  | 

**備註**  
如需 CloudFront Savings Plans 的詳細資訊，請參閱 [Amazon CloudFront 常見問答集](https://aws.amazon.com/cloudfront/faqs/)的 CloudFront 安全防護優惠組合區段。
如果您為 CloudFront 建立 Savings Plan，並想在稍後刪除，請聯絡 [AWS 支援](https://console.aws.amazon.com/support/home#/case/create?issueType=customer-service)。

## 客戶受管政策範例
<a name="security_iam_id-based-policy-examples-sdk-cli"></a>

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

**Topics**
+ [範例 1：允許讀取存取所有分佈](#security_iam_id-based-policy-examples-allow-read-all-distributions)
+ [範例 2：允許建立、更新和刪除分佈](#security_iam_id-based-policy-examples-allow-create-update-delete-distributions)
+ [範例 3：允許建立和列出失效](#security_iam_id-based-policy-examples-allow-create-list-invalidations)
+ [範例 4：允許建立分佈](#create-distribution-iam-policy)

### 範例 1：允許讀取存取所有分佈
<a name="security_iam_id-based-policy-examples-allow-read-all-distributions"></a>

以下許可政策授予使用者可在 CloudFront 主控台中查看所有分佈的許可：

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "acm:ListCertificates", 
            "cloudfront:GetDistribution",
            "cloudfront:GetDistributionConfig",
            "cloudfront:ListDistributions",
            "cloudfront:ListCloudFrontOriginAccessIdentities",
            "elasticloadbalancing:DescribeLoadBalancers",
            "iam:ListServerCertificates",
            "sns:ListSubscriptionsByTopic",
            "sns:ListTopics",
            "waf:GetWebACL",
            "waf:ListWebACLs"
         ],
         "Resource":"*"
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:ListAllMyBuckets"
         ],
         "Resource":"arn:aws:s3:::*"
      }
   ]
}
```

------

### 範例 2：允許建立、更新和刪除分佈
<a name="security_iam_id-based-policy-examples-allow-create-update-delete-distributions"></a>

以下許可政策讓使用者可使用 CloudFront 主控台建立、更新和刪除分佈：

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "acm:ListCertificates", 
            "cloudfront:CreateDistribution",
            "cloudfront:DeleteDistribution",
            "cloudfront:GetDistribution",
            "cloudfront:GetDistributionConfig",
            "cloudfront:ListDistributions",
            "cloudfront:UpdateDistribution",
            "cloudfront:ListCloudFrontOriginAccessIdentities",
            "elasticloadbalancing:DescribeLoadBalancers",
            "iam:ListServerCertificates",
            "sns:ListSubscriptionsByTopic",
            "sns:ListTopics",
            "waf:GetWebACL",
            "waf:ListWebACLs"
         ],
         "Resource":"*"
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:ListAllMyBuckets",
            "s3:PutBucketPolicy"
         ],
         "Resource":"arn:aws:s3:::*"
      }
   ]
}
```

------

`cloudfront:ListCloudFrontOriginAccessIdentities` 許可讓使用者可將許可自動授予現有原始存取身分，以存取 Amazon S3 儲存貯體中的物件。如果您還希望使用者能夠建立原始存取身分，則還需要允許 `cloudfront:CreateCloudFrontOriginAccessIdentity` 許可。

### 範例 3：允許建立和列出失效
<a name="security_iam_id-based-policy-examples-allow-create-list-invalidations"></a>

以下許可政策可讓使用者建立和失效清單。它包括對 CloudFront 分佈的讀取存取權，因為您會先顯示分佈的設定再來建立和查看失效：

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "acm:ListCertificates", 
            "cloudfront:GetDistribution",
            "cloudfront:GetStreamingDistribution",
            "cloudfront:GetDistributionConfig",
            "cloudfront:ListDistributions",
            "cloudfront:ListCloudFrontOriginAccessIdentities",
            "cloudfront:CreateInvalidation",
            "cloudfront:GetInvalidation",
            "cloudfront:ListInvalidations",
            "elasticloadbalancing:DescribeLoadBalancers",
            "iam:ListServerCertificates",
            "sns:ListSubscriptionsByTopic",
            "sns:ListTopics",
            "waf:GetWebACL",
            "waf:ListWebACLs"
         ],
         "Resource":"*"
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:ListAllMyBuckets"
         ],
         "Resource":"arn:aws:s3:::*"
      }
   ]
}
```

------

### 範例 4：允許建立分佈
<a name="create-distribution-iam-policy"></a>

以下許可權限政策可授予使用者許可權限，以便在 CloudFront 主控台中建立和列出所有分佈：對於 `CreateDistribution` 動作，請指定 `Resource` 的萬用字元 (\$1)，而非分佈 ARN (`arn:aws:cloudfront::123456789012:distribution/*`) 的萬用字元。如需有關 `Resource` 元素的詳細資訊，請參閱《*IAM 使用者指南*》中的 [IAM JSON 政策元素：資源](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_resource.html)。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "cloudfront:CreateDistribution",
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "cloudfront:ListDistributions",
            "Resource": "*"
        }
    ]
}
```

------