

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

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

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

**注意**  
CloudFront OAC 僅支援 MediaPackage v2。不支援 MediaPackage v1。

**Topics**
+ [

## 建立新的 OAC
](#create-oac-overview-mediapackage)
+ [

## 原始存取控制的進階設定
](#oac-advanced-settings-mediapackage)

## 建立新的 OAC
<a name="create-oac-overview-mediapackage"></a>

完成下列主題中說明的步驟，在 CloudFront 中設定新的 OAC。

**Topics**
+ [

### 先決條件
](#oac-prerequisites-mediapackage)
+ [

### 授予 CloudFront 存取 MediaPackage v2 原始伺服器的許可
](#oac-permission-to-access-mediapackage)
+ [

### 建立 OAC
](#create-oac-mediapackage)

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

在建立和設定 OAC 之前，您必須擁有具 MediaPackage v2 原始伺服器的 CloudFront 分佈。如需詳細資訊，請參閱[使用 MediaStore 容器或 MediaPackage 頻道](DownloadDistS3AndCustomOrigins.md#concept_AWS_Media)。

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

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

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

**Example ：IAM 政策，允許啟用 OAC 之 CloudFront 分佈的唯讀存取**  
下列政策允許 CloudFront 分佈 (`E1PDK09ESKHJWT`) 存取 MediaPackage v2 原始伺服器。原始伺服器是為 `Resource` 元素指定的 ARN。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowCloudFrontServicePrincipal",
            "Effect": "Allow",
            "Principal": {"Service": "cloudfront.amazonaws.com"},
            "Action": "mediapackagev2:GetObject",
            "Resource": "arn:aws:mediapackagev2:us-east-1:123456789012:channelGroup/channel-group-name/channel/channel-name/originEndpoint/origin_endpoint_name",
            "Condition": {
                "StringEquals": {"AWS:SourceArn": "arn:aws:cloudfront::123456789012:distribution/E1PDK09ESKHJWT"}
            }
        }
    ]
}
```

**備註**  
如果您已啟用 MQAR 功能和原始存取控制 (OAC)，請將 `mediapackagev2:GetHeadObject` 動作新增至 IAM 政策。MQAR 需要此許可才能將 `HEAD` 請求傳送至 MediaPackage v2 原始伺服器。如需有關 MQAR 的詳細資訊，請參閱 [媒體品質感知彈性](media-quality-score.md)。
如果您建立的分佈沒有 MediaPackage v2 原始伺服器的許可，您可以從 CloudFront 主控台選擇**複製政策**，然後選擇**更新端點許可**。然後，您可以將複製的許可連接到端點。如需詳細資訊，請參閱《*AWS Elemental MediaPackage 使用者指南*》中的[端點政策欄位](https://docs.aws.amazon.com/mediapackage/latest/userguide/endpoints-policy.html)。

### 建立 OAC
<a name="create-oac-mediapackage"></a>

若要建立 OAC，您可以使用 AWS 管理主控台 CloudFormation、 AWS CLI、 或 CloudFront API。

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

**建立 OAC**

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. 在**建立新 OAC** 表單上，執行下列操作：

   1. 輸入 OAC 的**名稱**，(選用) 輸入**描述**。

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

1. 針對**原始伺服器類型**，選擇 **MediaPackage V2**。

1. 選擇**建立**。
**提示**  
建立 OAC 之後，請記下**名稱**。您需要於下列程序中進行使用。

**將 OAC 新增至分佈中的 MediaPackage v2 原始伺服器**

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

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

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

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

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

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

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

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

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

```
Type: AWS::CloudFront::OriginAccessControl
Properties: 
  OriginAccessControlConfig: 
      Description: An optional description for the origin access control
      Name: ExampleOAC
      OriginAccessControlOriginType: mediapackagev2
      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-mediapackage)。

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

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

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

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

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

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

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

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

建立 OAC 之後，您可以使用下列其中一個 API 呼叫，將其連接至分佈中的 MediaPackage v2 原始伺服器：
+ 如要將其附加至現有分佈中，請使用 [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` 欄位中提供 OAC ID。如需您在這些 API 呼叫中指定之其他欄位的詳細資訊，請參閱 [所有分佈設定參考](distribution-web-values-specify.md)和 AWS SDK 或其他 API 用戶端的 API 參考文件。

------

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

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

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

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

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

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