

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

# 限制對 AWS Elemental MediaStore 原始伺服器的存取
<a name="private-content-restricting-access-to-mediastore"></a>

CloudFront 提供*原始存取控制* (OAC)，以限制對 AWS Elemental MediaStore 原始伺服器的存取。

**Topics**
+ [建立新的原始存取控制](#create-oac-overview-mediastore)
+ [原始存取控制的進階設定](#oac-advanced-settings-mediastore)

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

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

**Topics**
+ [先決條件](#oac-prerequisites-mediastore)
+ [授予 CloudFront 存取 MediaStore 原始伺服器的許可](#oac-permission-to-access-mediastore)
+ [建立原始存取控制](#create-oac-mediastore)

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

在建立和設定原始存取控制之前，您必須擁有具 MediaStore 原始伺服器的 CloudFront 分佈。

### 授予 CloudFront 存取 MediaStore 原始伺服器的許可
<a name="oac-permission-to-access-mediastore"></a>

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

使用 MediaStore 容器政策允許 CloudFront 服務主體 (`cloudfront.amazonaws.com`) 存取原始伺服器。使用政策中的 `Condition` 元素，僅當請求代表包含 S3 原始伺服器的 CloudFront 分佈時，才允許 CloudFront 存取 MediaStore 容器。這是您要新增 OAC 的 MediaStore 原始伺服器分佈。

下列是允許 CloudFront 分佈存取 MediaStore 原始伺服器的 MediaStore 容器政策範例。

**Example MediaStore 容器政策，允許啟用 OAC 之 CloudFront 分佈的唯讀存取**    
****  

```
{
        "Version":"2012-10-17",		 	 	 
        "Statement": [
            {
                "Sid": "AllowCloudFrontServicePrincipalReadOnly",
                "Effect": "Allow",
                "Principal": {
                  "Service": "cloudfront.amazonaws.com"
                },
                "Action": [ 
                  "mediastore:GetObject"
                ],
                "Resource": "arn:aws:mediastore:{{us-east-1}}:{{111122223333}}:container/{{<container name>}}/*",
                "Condition": {
                    "StringEquals": {
                      "AWS:SourceArn": "arn:aws:cloudfront::{{111122223333}}:distribution/{{CloudFront-distribution-ID}}"
                    },
                    "Bool": {
                      "aws:SecureTransport": "true"
                    }
                }
            }
        ]
}
```

**Example MediaStore 容器政策，允許啟用 OAC 之 CloudFront 分佈的讀寫存取**    
****  

```
{
        "Version":"2012-10-17",		 	 	 
        "Statement": [
            {
                "Sid": "AllowCloudFrontServicePrincipalReadWrite",
                "Effect": "Allow",
                "Principal": {
                  "Service": "cloudfront.amazonaws.com"
                },
                "Action": [ 
                  "mediastore:GetObject",
                  "mediastore:PutObject"
                ],
                "Resource": "arn:aws:mediastore:{{us-east-1}}:{{111122223333}}:container/{{container-name}}/*",
                "Condition": {
                    "StringEquals": {
                      "AWS:SourceArn": "arn:aws:cloudfront::{{111122223333}}:distribution/{{CloudFront-distribution-ID}}"
                    },
                    "Bool": {
                      "aws:SecureTransport": "true"
                    }
                }
            }
        ]
}
```

**注意**  
若要允許寫入存取權，您必須設定 **Allowed HTTP methods** (允許的 HTTP 方法)，以將 `PUT` 包含在 CloudFront 分發的行為設定中。

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

若要建立 OAC，您可以使用 AWS 管理主控台 CloudFormation、 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-mediastore)。

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

1. 選擇**建立**。

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

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

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

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

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

1. 在原始伺服器的**Protocol** (通訊協定) 選取 **HTTPS only** (僅限 HTTPS)。

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

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

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

------
#### [ 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: mediastore
      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-mediastore)。

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

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

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

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

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

   ```
   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 邊緣節點。當邊緣節點接收到新組態時，其會簽署傳送至 MediaStore 原始伺服器的所有請求。

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

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

建立原始存取控制之後，您可以使用下列其中一個 API 呼叫，將其連接至分佈中的 MediaStore 原始伺服器：
+ 如要將其附加至現有分佈中，請使用 [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 參考文件。

------

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

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

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

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

**絕不簽署原始伺服器請求**  
此設定於主控台中命名為 **Do not sign requests** (請勿簽署請求)，或 API、CLI 和 CloudFormation中的 `never`。使用此設定，關閉使用此原始存取控制之所有分佈中的所有原始伺服器的原始存取控制。與從所有使用其原始伺服器和分佈中逐一移除原始存取控制相比，此可節省時間和精力。使用此設定時，CloudFront 不會簽署傳送至 MediaStore 原始伺服器的任何請求。  
如要使用此設定，MediaStore 原始伺服器必須可公開存取。如果您對無法公開存取的 MediaStore 原始伺服器使用此設定，CloudFront 將無法存取該原始伺服器。MediaStore 原始伺服器會將錯誤傳回 CloudFront，而 CloudFront 會將這些錯誤傳遞給檢視器。如需詳細資訊，請參閱[透過 HTTPS 的公有讀取存取](https://docs.aws.amazon.com/mediastore/latest/ug/policies-examples-public-https.html)的 MediaStore 容器政策範例。

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