

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

# 限制對 Amazon S3 原始伺服器的存取
<a name="private-content-restricting-access-to-s3"></a>

CloudFront 提供兩種方式，將驗證請求傳送至 Amazon S3 原始伺服器：*原始存取控制*(OAC) 和*原始存取身分* (OAI)。OAC 可協助您保護原始伺服器，例如 Amazon S3。

*建議*您改用 OAC，因為它支援下列功能：
+ 所有 中的所有 Amazon S3 儲存貯體 AWS 區域，包括 2022 年 12 月之後啟動的選擇加入區域
+ [使用 AWS KMS的 Amazon S3 伺服器端加密](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html) (SSE-KMS)
+ 對 Amazon S3 的動態請求 (`PUT` 和 `DELETE`)

OAI 不支援這些功能，或在這些案例中需要額外的解決方法。如果您已經在使用 OAI 且想要移轉，請參閱 [從原始存取身分 (OAI) 遷移至原始存取控制 (OAC)](#migrate-from-oai-to-oac)。

**備註**  
當您將 CloudFront OAC 與 Amazon S3 儲存貯體原始伺服器搭配使用時，必須將 **Amazon S3 物件擁有權**設定為**強制執行儲存貯體擁有者**，這是新 Amazon S3 儲存貯體的預設值。如果您需要 ACL，請使用**儲存貯體擁有者偏好**設定來維持透過 CloudFront 上傳之物件的控制權。
如果您使用設定為[網站端點](https://docs.aws.amazon.com/AmazonS3/latest/userguide/WebsiteEndpoints.html)的 Amazon S3 儲存貯體，則必須使用 CloudFront 將其設定為自訂原始伺服器。這表示您無法使用 OAC (或 OAI)。OAC 不支援使用 Lambda@Edge 的原始伺服器重新導向。

下列主題說明如何將 OAC 與 Amazon S3 原始伺服器搭配使用。

**主題**
+ [建立新的原始存取控制](#create-oac-overview-s3)
+ [刪除含附加至 S3 儲存貯體之 OAC 的分佈](#delete-oac-distribution-s3)
+ [從原始存取身分 (OAI) 遷移至原始存取控制 (OAC)](#migrate-from-oai-to-oac)
+ [原始存取控制的進階設定](#oac-advanced-settings-s3)

## 建立新的原始存取控制
<a name="create-oac-overview-s3"></a>

完成下列主題中說明的步驟，在 CloudFront 中設定新的原始存取控制。

**Topics**
+ [先決條件](#oac-prerequisites-s3)
+ [授予 CloudFront 存取 S3 儲存貯體的許可](#oac-permission-to-access-s3)
+ [建立原始存取控制](#create-oac-s3)

### 先決條件
<a name="oac-prerequisites-s3"></a>

在建立和設定原始存取控制 (OAC) 之前，您必須擁有具 Amazon S3 儲存貯體原始伺服器的 CloudFront 分佈。此原始伺服器必須是一般 S3 儲存貯體，而非設定為[網站端點](https://docs.aws.amazon.com/AmazonS3/latest/userguide/WebsiteEndpoints.html)的儲存貯體。如需使用 S3 儲存貯體原始伺服器設定 CloudFront 分佈的相關資訊，請參閱 [開始使用 CloudFront 標準分佈](GettingStarted.SimpleDistribution.md)。

**重要**  
當您使用 OAC 來保護 Amazon S3 原始伺服器時，CloudFront 和 Amazon S3 之間的通訊*一律*透過 HTTPS 進行，但前提是您選擇*一律簽署請求*。您必須在主控台中選擇**簽署請求 （建議）**，或在 CloudFront API AWS CLI或 CloudFormation `always`中指定 。  
如果您選擇**不簽署請求**或**不覆寫授權標頭**選項，CloudFront 會使用您在下列政策中指定的連線通訊協定：  
[檢視器通訊協定政策](using-https-viewers-to-cloudfront.md) 
[原始伺服器通訊協定政策](DownloadDistValuesOrigin.md#DownloadDistValuesOriginProtocolPolicy) (僅限自訂原始伺服器)
例如，如果您選擇**不要覆寫授權標頭**，並想要在 CloudFront 和 Amazon S3 原始伺服器之間使用 HTTPS，請僅針對[檢視器通訊協定政策](using-https-viewers-to-cloudfront.md)使用**重新導向 HTTP 至 HTTPS** 或**僅限 HTTPS**。

### 授予 CloudFront 存取 S3 儲存貯體的許可
<a name="oac-permission-to-access-s3"></a>

在您建立原始存取控制 (OAC) 或於 CloudFront 分佈中進行設定之前，請確定 CloudFront 具有存取 S3 儲存貯體原始伺服器的許可。在建立 CloudFront 分佈之後，但在將 OAC 新增至分佈組態中的 S3 原始伺服器之前，請執行此作業。

使用 [S3 儲存貯體政策](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html)允許 CloudFront 服務主體 (`cloudfront.amazonaws.com`) 存取儲存貯體。使用政策中的 `Condition` 元素，僅當請求代表包含 S3 原始伺服器的 CloudFront 分佈時，才允許 CloudFront 存取儲存貯體。這是您要新增 OAC 的 S3 原始伺服器分佈。

如需新增或修改儲存貯體政策的相關資訊，請參閱 [Amazon S3 使用者指南](https://docs.aws.amazon.com/AmazonS3/latest/userguide/add-bucket-policy.html)中的*使用 Amazon S3 主控台新增儲存貯體政策*。

下列是允許啟用 OAC 之 CloudFront 分佈存取 S3 原始伺服器的 S3 儲存貯體政策範例。

**Example S3 儲存貯體政策，允許啟用 OAC 之 CloudFront 分佈的唯讀存取**    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowCloudFrontServicePrincipalReadOnly",
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudfront.amazonaws.com"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
      "Condition": {
        "StringEquals": {
          "AWS:SourceArn": "arn:aws:cloudfront::111122223333:distribution/{{<CloudFront distribution ID>}}"
        }
      }
    }
  ]
}
```

**Example S3 儲存貯體政策，允許啟用 OAC 之 CloudFront 分佈的讀寫存取**    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowCloudFrontServicePrincipalReadWrite",
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudfront.amazonaws.com"
      },
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
      "Condition": {
        "StringEquals": {
          "AWS:SourceArn": "arn:aws:cloudfront::111122223333:distribution/{{CloudFront-distribution-ID>}}"
        }
      }
    }
  ]
}
```

#### SSE-KMS
<a name="oac-permissions-sse-kms"></a>

如果使用[伺服器端加密搭配 AWS Key Management Service (SSE-KMS) 來加密](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html) S3 儲存貯體原始伺服器中的物件，您必須確保 CloudFront 分佈具有使用 AWS KMS 金鑰的許可。如要授予 CloudFront 分佈使用 KMS 金鑰的許可，請將陳述式新增至 [KMS 金鑰政策](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)。如需如何修改金鑰政策的相關資訊，請參閱《*AWS Key Management Service 開發人員指南*》中的[變更金鑰政策](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying.html)。

**Example KMS 金鑰政策陳述式**  
下列範例顯示 AWS KMS 政策陳述式，允許具有 OAC 的 CloudFront 分佈存取 SSE-KMS 的 KMS 金鑰。  

```
{
    "Sid": "AllowCloudFrontServicePrincipalSSE-KMS",
    "Effect": "Allow",
    "Principal": {
        "Service": [
            "cloudfront.amazonaws.com"
        ]
     },
    "Action": [
        "kms:Decrypt",
        "kms:Encrypt",
        "kms:GenerateDataKey*"
    ],
    "Resource": "*",
    "Condition": {
            "StringEquals": {
                "AWS:SourceArn": "arn:aws:cloudfront::{{111122223333}}:distribution/{{<CloudFront distribution ID>}}"
            }
        }
}
```

### 建立原始存取控制
<a name="create-oac-s3"></a>

若要建立原始存取控制 (OAC) CloudFormation，您可以使用 AWS 管理主控台、 AWS CLI、 或 CloudFront API。

------
#### [ Console ]

**如要建立原始存取控制**

1. 登入 AWS 管理主控台 並開啟位於 的 CloudFront 主控台[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)。

1. 於左側導覽窗格中，選擇 **Origin access** (原始存取)。

1. 選擇 **Create control setting** (建立控制設定)。

1. 在 **Create control setting** (建立控制設定) 表單上，執行下列動作：

   1. 於 **Details** (詳細資訊) 窗格中，輸入 **Name** (名稱) 和 (選用) **Description** (描述)，以用於原始存取控制。

   1. 於 **Settings** (設定) 窗格中，建議您保留預設設定 (**Sign requests (recommended)**) (簽署請求 (建議使用))。如需詳細資訊，請參閱[原始存取控制的進階設定](#oac-advanced-settings-s3)。

1. 從 **Origin type** (原始伺服器類型) 下拉式功能表中選擇 S3。

1. 選擇**建立**。

   建立 OAC 之後，請記下 **Name** (名稱)。您需要於下列程序中進行使用。

**如要將原始存取控制新增至分佈中的 S3 原始伺服器**

1. 在 [https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home) 中開啟 CloudFront 主控台。

1. 選擇一個您想要新增 OAC 之具 S3 原始伺服器的分佈，然後選擇 **Origins** (原始伺服器) 標籤。

1. 選取您想要將 OAC 新增至的 S3 原始伺服器，然後選擇 **Edit** (編輯)。

1. 針對**原始存取**，選擇**原始存取控制設定 (建議使用)**。

1. 在 **Origin access control** (原始存取控制) 下拉式功能表中，選擇您想要使用的 OAC。

1. 選擇**儲存變更**。

分佈開始部署至所有 CloudFront 邊緣節點。當邊緣節點接收到新組態時，其會簽署傳送至 S3 儲存貯體原始伺服器的所有請求。

------
#### [ CloudFormation ]

若要使用 建立原始存取控制 (OAC) CloudFormation，請使用 `AWS::CloudFront::OriginAccessControl` 資源類型。下列範例顯示用於建立原始存取控制的 YAML 格式 CloudFormation 範本語法。

```
Type: AWS::CloudFront::OriginAccessControl
Properties: 
  OriginAccessControlConfig: 
      Description: An optional description for the origin access control
      Name: ExampleOAC
      OriginAccessControlOriginType: s3
      SigningBehavior: always
      SigningProtocol: sigv4
```

如需詳細資訊，請參閱《*AWS CloudFormation 使用者指南*》中的 [AWS::CloudFront::OriginAccessControl](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-originaccesscontrol.html)。

------
#### [ CLI ]

若要使用 AWS Command Line Interface (AWS CLI) 建立原始存取控制，請使用 **aws cloudfront create-origin-access-control**命令。您可以使用輸入檔案來提供命令的輸入參數，而不必分別將每個個別參數指定為命令列輸入。

**如要建立原始存取控制 (包含輸入檔案的 CLI)**

1. 使用下列命令建立名為 `origin-access-control.yaml` 的檔案。這個檔案中包含 **create-origin-access-control** 命令的所有輸入參數。

   ```
   aws cloudfront create-origin-access-control --generate-cli-skeleton yaml-input > origin-access-control.yaml
   ```

1. 開啟您剛才建立的 `origin-access-control.yaml` 檔案。編輯檔案以新增 OAC 的名稱、說明 (選用)，並將 `SigningBehavior` 變更為 `always`。接著儲存檔案。

   如需其他 OAC 設定的相關資訊，請參閱 [原始存取控制的進階設定](#oac-advanced-settings-s3)。

1. 使用下列命令，利用 `origin-access-control.yaml` 檔案中的輸入參數建立原始存取控制。

   ```
   aws cloudfront create-origin-access-control --cli-input-yaml file://origin-access-control.yaml
   ```

   記下命令輸出中的 `Id` 值，您需要其將 OAC 新增至 CloudFront 分佈中的 S3 儲存貯體原始伺服器。

**如要將 OAC 附加至現有分佈 (包含輸入檔案的 CLI) 中的 S3 儲存貯體原始伺服器**

1. 使用下列命令來儲存您想要新增之 CloudFront 分佈的分佈組態。分佈必須具有 S3 儲存貯體原始伺服器。

   ```
   aws cloudfront get-distribution-config --id {{<CloudFront distribution ID>}} --output yaml > dist-config.yaml
   ```

1. 開啟您剛才建立且命名為 `dist-config.yaml` 的檔案。編輯檔案，進行下列變更：
   + 於 `Origins` 物件中，將 OAC 的 ID 新增至名為 `OriginAccessControlId` 的欄位。
   + 從名為 `OriginAccessIdentity` 的欄位中移除值(如果存在)。
   + 將 `ETag` 欄位重新命名為 `IfMatch`，但不要變更欄位的值。

   完成後儲存檔案。

1. 使用下列命令來更新分佈，以使用原始存取控制。

   ```
   aws cloudfront update-distribution --id {{<CloudFront distribution ID>}} --cli-input-yaml file://dist-config.yaml
   ```

分佈開始部署至所有 CloudFront 邊緣節點。當邊緣節點接收到新組態時，其會簽署傳送至 S3 儲存貯體原始伺服器的所有請求。

------
#### [ API ]

如要使用 CloudFront API 建立原始存取控制，請使用 [CreateOriginAccessControl](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateOriginAccessControl.html)。如需您在此 API 呼叫中指定欄位的詳細資訊，請參閱 AWS SDK 或其他 API 用戶端的 API 參考文件。

建立原始存取控制之後，您可以使用下列其中一個 API 呼叫，將其連接至分佈中的 S3 儲存貯體原始伺服器：
+ 如要將其附加至現有分佈中，請使用 [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html)。
+ 如要將其附加至新分佈中，請使用 [CreateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateDistribution.html)。

對於這兩個 API 呼叫，請於原始伺服器內部的 `OriginAccessControlId` 欄位中提供原始存取控制 ID。如需您在這些 API 呼叫中指定之其他欄位的詳細資訊，請參閱 [所有分佈設定參考](distribution-web-values-specify.md)和 AWS SDK 或其他 API 用戶端的 API 參考文件。

------

## 刪除含附加至 S3 儲存貯體之 OAC 的分佈
<a name="delete-oac-distribution-s3"></a>

如果您需要刪除含附加至 S3 儲存貯體之 OAC 的分佈，您應該先刪除分佈，再刪除 S3 儲存貯體原始伺服器。或者，在原始伺服器網域名稱中包含區域。如果無法這麼做，您可以在刪除之前切換到公有，從分佈中移除 OAC。如需詳細資訊，請參閱[刪除 分發](HowToDeleteDistribution.md)。

## 從原始存取身分 (OAI) 遷移至原始存取控制 (OAC)
<a name="migrate-from-oai-to-oac"></a>

如要從舊式原始存取身分 (OAI) 移轉至原始存取控制 (OAC)，請先更新 S3 儲存貯體原始伺服器，以允許 OAI 和啟用 OAC 之分佈存取儲存貯體的內容。此可確保 CloudFront 在轉換期間永遠不會失去儲存貯體的存取權限。如要允許 OAI 和啟用 OAC 之分佈存取 S3 儲存貯體，請更新[儲存貯體政策](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html)，以包括兩個陳述式，每種主體各一個。

下列範例 S3 儲存貯體政策允許 OAI 和啟用 OAC 之分佈存取 S3 原始伺服器。

**Example 允許對 OAI 和啟用 OAC 之 CloudFront 分佈進行唯讀存取的 S3 儲存貯體政策**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowCloudFrontServicePrincipalReadOnly",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudfront.amazonaws.com"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::{{<S3 bucket name>}}/*",
            "Condition": {
                "StringEquals": {
                    "AWS:SourceArn": "arn:aws:cloudfront::{{111122223333}}:distribution/{{<CloudFront distribution ID>}}"
                }
            }
        },
        {
            "Sid": "AllowLegacyOAIReadOnly",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity {{<origin access identity ID>}}"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::{{<S3 bucket name>}}/*"
        }
    ]
}
```

更新 S3 原始伺服器的儲存貯體政策以允許存取 OAI 和 OAC 之後，您可更新發佈組態以使用 OAC 而非 OAI。如需詳細資訊，請參閱[建立新的原始存取控制](#create-oac-overview-s3)。

完整部署分佈之後，您可移除儲存貯體政策中允許存取 OAI 的陳述式。如需詳細資訊，請參閱[授予 CloudFront 存取 S3 儲存貯體的許可](#oac-permission-to-access-s3)。

## 原始存取控制的進階設定
<a name="oac-advanced-settings-s3"></a>

CloudFront 來原始存取控制功能包含僅適用於特定使用案例的進階設定。除非您對進階設定有特定需求，否則請使用建議的設定。

原始存取控制包含名為**簽署行為** （在主控台中） 或 `SigningBehavior`（在 API、CLI 和 中） 的設定 CloudFormation。此設定提供下列選項：

**永遠簽署原始請求 (建議設定)**  
我們建議使用此設定，於主控台中名為**Sign requests (recommended)** (簽署請求 (建議使用))，或於 API、CLI 和 CloudFormation中的 `always`。使用此設定時，CloudFront 一律會簽署傳送至 S3 儲存貯體原始伺服器的所有請求。

**絕不簽署原始伺服器請求**  
此設定於主控台中命名為 **Do not sign requests** (請勿簽署請求)，或 API、CLI 和 CloudFormation中的 `never`。使用此設定，關閉使用此原始存取控制之所有分佈中的所有原始伺服器的原始存取控制。與從所有使用其原始伺服器和分佈中逐一移除原始存取控制相比，此可節省時間和精力。使用此設定時，CloudFront 不會簽署傳送至 S3 儲存貯體原始伺服器的任何請求。  
如要使用此設定，S3 儲存貯體原始伺服器必須可公開存取。如果您對無法公開存取的 S3 儲存貯體原始伺服器使用此設定，CloudFront 將無法存取該原始伺服器。S3 儲存貯體原始伺服器會將錯誤傳回 CloudFront，而 CloudFront 會將這些錯誤傳遞給檢視器。

**請勿覆寫檢視器 (用戶端) `Authorization` 標題**  
此設定於主控台中命名為 **Do not override authorization header** (請勿覆寫授權標頭)，或於 API、CLI 和 CloudFormation中的 `no-override`。如果您想要 CloudFront 僅於對應的檢視器請求不包含 `Authorization` 標題時簽署原始伺服器請求，請使用此設定。利用此設定，當檢視器請求存在時，CloudFront 會傳遞來自檢視器請求的 `Authorization` 標題，但在檢視器請求不包含 `Authorization` 標題時對原始伺服器請求進行簽名 (新增其自己的 `Authorization` 標題)。  
如要從檢視器請求傳遞 `Authorization` 標題，您*必須*將 `Authorization` 標題新增至[快取政策](controlling-the-cache-key.md)中，適用於使用與此原始存取控制相關聯之 S3 儲存貯體原始伺服器的所有快取行為。

## 使用原始存取身分 (舊版，不建議使用)
<a name="private-content-restricting-access-to-s3-oai"></a>

### 原始存取身分概觀
<a name="private-content-restricting-access-to-s3-overview"></a>

CloudFront*原始存取身分* (OAI) 提供與*原始存取控制* (OAC) 類似的功能，但其不適用於所有案例。具體而言，OAI 不支援：
+ 所有 中的 Amazon S3 儲存貯體 AWS 區域，包括選擇加入區域
+ [使用 AWS KMS的 Amazon S3 伺服器端加密](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html) (SSE-KMS)
+ 對 Amazon S3 的動態請求 (`PUT`、`POST` 或 `DELETE`)
+ 2023 年 1 月之後 AWS 區域 推出的新功能

**提示**  
我們建議您改用 OAC。若要設定 OAC，請參閱 [建立新的原始存取控制](#create-oac-overview-s3)。如需如何從 OAI 遷移至 OAC 的相關資訊，請參閱 [從原始存取身分 (OAI) 遷移至原始存取控制 (OAC)](#migrate-from-oai-to-oac)。

### 授予原始存取身分的許可，以讀取 Amazon S3 儲存貯體中的檔案
<a name="private-content-granting-permissions-to-oai"></a>

當您使用 CloudFront 主控台建立 OAI 或新增 OAI 至分佈時，您可以自動更新 Amazon S3 儲存貯體政策，讓 OAI 有權存取您的儲存貯體。或者，您可以選擇手動建立或更新儲存貯體政策。無論您使用哪種方法，您仍應檢閱許可以確認下列事項：
+ CloudFront OAI 可以代表透過 CloudFront 請求檔案的檢視器，來存取儲存貯體中的檔案。
+ 檢視器無法使用 Amazon S3 URL 在 CloudFront 之外存取您的檔案。

**重要**  
如果您將 CloudFront 設定為接受和轉送 CloudFront 支援的所有 HTTP 方法，請務必為您的 CloudFront OAI 提供所需的許可。例如，如果您將 CloudFront 設定為接受並轉送使用 `DELETE` 方法的請求，請將儲存貯體政策設定為適當地處理 `DELETE` 請求，讓檢視器只能刪除您希望其刪除的檔案。

#### 使用 Amazon S3 儲存貯體政策
<a name="private-content-updating-s3-bucket-policies"></a>

您可以透過下列方法建立或更新儲存貯體政策，藉此授予 CloudFront OAI 對 Amazon S3 儲存貯體中檔案的存取權限：
+ 使用 [Amazon S3 主控台](https://console.aws.amazon.com/s3/home)中的 Amazon S3 儲存貯體的**Permissions** (許可) 標籤。
+ 在 Amazon S3 API 中使用 [PutBucket 政策](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketPolicy.html)。
+ 使用 [CloudFront 主控台](https://console.aws.amazon.com/cloudfront/v4/home)。當您將 OAI 新增到 CloudFront 主控台中的原始伺服器設定時，您可以選擇 **Yes, update the bucket 政策 (是，更新儲存貯體政策)**，請 CloudFront 代表您更新儲存貯體政策。

如果您手動更新儲存貯體政策，請務必：
+ 在政策中指定正確的 OAI 做為 `Principal`。
+ 授予 OAI 代表檢視器存取物件所需的許可。

如需詳細資訊，請參閱下列區段。

##### 在儲存貯體政策中指定 OAI 做為 `Principal`
<a name="private-content-updating-s3-bucket-policies-principal"></a>

若要於 Amazon S3 儲存貯體政策中指定 OAI 做為 `Principal`，請使用包含 OAI ID 的 OAI Amazon Resource Name (ARN)。例如：

```
"Principal": {
    "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity {{<origin access identity ID>}}"
}
```

在**安全性**、**原始存取**、**身分 (舊版)** 下的 CloudFront 主控台中尋找 OAI ID。或者，在 CloudFront API 中使用 [ListCloudFrontOriginAccessIdentities](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListCloudFrontOriginAccessIdentities.html)。

##### 授予權限給一個 OAI
<a name="private-content-updating-s3-bucket-policies-permissions"></a>

如要授予 OAI 存取 Amazon S3 儲存貯體中物件的許可，請使用與特定 Amazon S3 API 作業相關政策中的動作。例如，`s3:GetObject` 動作可讓 OAI 讀取儲存貯體中的物件。如需詳細資訊，請參閱以下章節中的範例，或參閱 *Amazon Simple Storage Service 使用者指南*中的 [Amazon S3 動作](https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html)。

##### Amazon S3 儲存貯體政策範例
<a name="private-content-updating-s3-bucket-policies-examples"></a>

下列範例顯示允許 CloudFront OAI 存取 S3 儲存貯體的 Amazon S3 儲存貯體政策。

在**安全性**、**原始存取**、**身分 (舊版)** 下的 CloudFront 主控台中尋找 OAI ID。或者，在 CloudFront API 中使用 [ListCloudFrontOriginAccessIdentities](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListCloudFrontOriginAccessIdentities.html)。

**Example 授予 OAI 讀取存取權限的 Amazon S3 儲存貯體政策**  
下列範例可讓 OAI 讀取指定儲存貯體中的物件 (`s3:GetObject`)。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity {{<origin access identity ID>}}"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::{{<S3 bucket name>}}/*"
        }
    ]
}
```

**Example 授予 OAI 讀取和寫入存取權限的 Amazon S3 儲存貯體政策**  
下列範例可讓 OAI 讀取和寫入指定儲存貯體中的物件 (`s3:GetObject` 和 `s3:PutObject`)。這可讓檢視器透過 CloudFront 將檔案上傳到您的 Amazon S3 儲存貯體。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity {{<origin access identity ID>}}"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::{{<S3 bucket name>}}/*"
        }
    ]
}
```

#### 使用 Amazon S3 物件 ACL (不建議)
<a name="private-content-updating-s3-acls"></a>

**重要**  
我們建議[使用 Amazon S3 儲存貯體政策](#private-content-updating-s3-bucket-policies) 向 OAI 提供 S3 儲存貯體的存取權。您可以使用存取控制清單 (ACL)，如本節中所述，但我們不建議此方法。  
Amazon S3 建議設定 [S3 物件擁有權](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html)為**已強制執行儲存貯體擁有者**，這意味著儲存貯體及其中物件的 ACL 被停用。當您將此設定套用至「物件擁有權」 時，您必須使用儲存貯體政策來授與 OAI 的存取權 (請參閱上一節)。  
本節僅適用於需要 ACL 的舊式使用案例。

您可透過下列方法建立或更新檔案的 ACL，藉此授予 CloudFront OAI 對 Amazon S3 儲存貯體中檔案的存取權限：
+ 使用 [Amazon S3 主控台](https://console.aws.amazon.com/s3/home)中 Amazon S3 物件的 **Permissions** (許可) 標籤。
+ 使用 Amazon S3 API 中的 [PutObjectAcl](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectAcl.html)。

當您使用 ACL 授予對 OAI 的存取權限時，您必須使用 OAI 的 Amazon S3 正式使用者 ID 來指定 OAI。在 CloudFront 主控台中，您可以在**安全性**、**原始存取**、**身分 (舊版)** 下找到此 ID。如果您使用的是 CloudFront API，請使用 `S3CanonicalUserId` 元素的值，此元素是在您建立 OAI 或呼叫 CloudFront API 中的 [ListCloudFrontOriginAccessIdentities](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListCloudFrontOriginAccessIdentities.html) 時傳回。

### 在僅支援簽署版本 4 驗證的 Amazon S3 區域中使用原始存取身分
<a name="private-content-origin-access-identity-signature-version-4"></a>

較新 Amazon S3 區域請求您使用簽章版本 4 進行驗證請求 (如需每個 Amazon S3 區域支援的簽署版本，請參閱《*AWS 一般參考*》中的 [Amazon Simple Storage Service 端點和配額](https://docs.aws.amazon.com/general/latest/gr/s3.html)。) 如果您使用的是原始存取身分，且您的儲存貯體位於需要簽章版本 4 的其中一個區域，請注意下列事項：
+ `DELETE`、`GET`、`HEAD`、`OPTIONS` 和 `PATCH` 請求可以在沒有授權的情況下得到支援。
+ 不支援 `POST` 請求。