

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

# 中的 CDN 授權 AWS Elemental MediaPackage
<a name="cdn-auth"></a>

*內容交付網路 (CDN) 授權*可協助您保護內容以避免未經授權的使用。當您設定 CDN 授權時，MediaPackage 只會滿足 MediaPackage 和 CDN 之間授權的播放請求。這可避免使用者繞過 CDN 來直接存取您原始伺服器上的內容。

## 運作方式
<a name="working-with-cdn-auth"></a>

您可以將 Amazon CloudFront 等 CDN 設定為在對 MediaPackage 的內容請求中包含*自訂 HTTP 標頭*。

自訂 HTTP 標頭和範例值。

```
X-MediaPackage-CDNIdentifier: 9ceebbe7-9607-4552-8764-876e47032660
```

您會以*私密*的形式將標頭值存放在 AWS Secrets Manager中。當您的 CDN 傳送播放請求時，MediaPackage 會驗證秘密的值是否符合自訂 HTTP 標頭值。MediaPackage 獲得使用許可政策和角色讀取秘密的 AWS Identity and Access Management 許可。

私密金鑰和範例值。

```
{“MediaPackageCDNIdentifier”: "9ceebbe7-9607-4552-8764-876e47032660"}
```

如果值相符，MediaPackage 會提供內容以及 HTTP `200 OK` 狀態碼。如果不相符，或授權請求失敗，則 MediaPackage 不提供內容，並傳送 HTTP `403 Unauthorized` 狀態碼。

下圖顯示使用 Amazon CloudFront 的成功 CDN 授權。

![\[此圖顯示成功的 CDN 授權流程。左下角顯示播放裝置從 Amazon CloudFront 請求內容，並以箭頭表示。CloudFront 在其 MediaPackage 請求中包含自訂 HTTP 標頭和值 (以箭頭表示)。MediaPackage 向 請求秘密資訊 AWS Secrets Manager，以箭頭表示，這取決於來自 IAM 的許可。 將秘密值 AWS Secrets Manager 對應至 MediaPackage。MediaPackage 會驗證私密是否符合標頭值 (以綠色核取方塊表示)。MediaPackage 會將 HTTP 200 OK 狀態碼以及影片內容傳送至 CloudFront。CloudFront 會提供視訊內容給播放裝置。\]](http://docs.aws.amazon.com/zh_tw/mediapackage/latest/ug/images/cdn_auth.png)


如需有關如何設定 CDN 授權的逐步說明，請參閱[設定 CDN 授權](cdn-auth-setup.md)。

# 設定 CDN 授權
<a name="cdn-auth-setup"></a>

完成下列步驟以設定 CDN 授權。

**Topics**
+ [步驟 1：設定 CDN 自訂原始伺服器 HTTP 標頭](#cdn-aut-setup-cdn)
+ [步驟 2：將值儲存為 中的秘密 AWS Secrets Manager](#cdn-aut-setup-secret)
+ [步驟 3：建立 MediaPackage 存取 Secrets Manager 的 IAM 政策和角色](#cdn-aut-setup-iam)
+ [步驟 4：在 MediaPackage 中啟用 CDN 授權](#cdn-aut-setup-endpoint)

## 步驟 1：設定 CDN 自訂原始伺服器 HTTP 標頭
<a name="cdn-aut-setup-cdn"></a>

在 CDN 中，設定包含 **X-MediaPackage-CDNIdentifier** 標頭和值的自訂原始伺服器 HTTP 標頭。對於 值，我們建議您使用 [UUID 第 4 版](https://www.ietf.org/rfc/rfc4122.txt)格式，這會產生 36 個字元的字串。如果您使用的不是 UUID 第 4 版格式，此值的長度必須介於 8 至 128 個字元。

如果您的 CDN 已設定授權標頭，MediaPackage 會傳回錯誤 404，直到端點上啟用 CDN 授權為止。

**重要**  
您選擇的值應為靜態值。CDN 和 之間沒有原生整合 AWS Secrets Manager，因此該值應該在 CDN 和 中都是靜態的 AWS Secrets Manager。如果您在設定 CDN 和秘密之後變更此值，則必須手動輪換該值。如需詳細資訊，請參閱[輪換 CDN 標頭值](cdn-auth-rotate.md)。

**範例標頭和值**

```
X-MediaPackage-CDNIdentifier: 9ceebbe7-9607-4552-8764-876e47032660
```

**在 Amazon CloudFront 中建立自訂標頭**

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

1. 建立或編輯分佈。

1. 在 **Origin Settings (原點設定)** 中，完成該欄位。您將對 Secrets Manager 中的秘密使用相同的值。
   + 針對 **Header Name (標頭名稱)**，輸入 **X-MediaPackage-CDNIdentifier**。
   + 在**值**中，輸入值。我們建議您使用 UUID 第 4 版格式，這會產生 36 個字元的字串。如果您使用的不是 UUID 第 4 版格式，此值的長度必須介於 8 至 128 個字元。

1. 完成其餘的欄位，然後儲存此分發。

如需 CloudFront 中自訂標頭的詳細資訊，請參閱《*Amazon CloudFront 開發人員指南*》中的[將客戶標頭轉送至原始伺服器](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/forward-custom-headers.html)。

## 步驟 2：將值儲存為 中的秘密 AWS Secrets Manager
<a name="cdn-aut-setup-secret"></a>

將您在原始伺服器 HTTP 標頭中使用的同一個值以*私密*形式存放在 AWS Secrets Manager中。秘密必須使用與 AWS Elemental MediaPackage 資源相同的 AWS 帳戶和區域設定。MediaPackage 不支援跨帳戶或區域共用秘密。不過，您可在同一個區域中和同一個帳戶上跨多個端點使用同一個私密。

**在 Secrets Manager 中存放秘密**

1. 在 https：//[https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/) 登入 AWS Secrets Manager 主控台。

1. 選擇**儲存新機密**。針對**秘密類型**，選擇**其他類型的秘密**。

1. 對於**鍵/值對**，輸入鍵和值資訊。
   + 在左側的方塊中，輸入 **MediaPackageCDNIdentifier**。
   + 在右側的方塊中，輸入您已針對自訂原始伺服器 HTTP 標頭設定的值。例如 `9ceebbe7-9607-4552-8764-876e47032660`。

1. 對於**加密金鑰**，您可以將預設值保留為 **DefaultEncryptionKey**。

1. 選擇**下一步**。

1. 對於**秘密名稱**，我們建議您在前面加上 ，**MediaPackage/**以便您知道它是用於 MediaPackage 的秘密。例如 **MediaPackage/cdn\$1auth\$1us-west-2**。

1. 選擇**下一步**。

1. 針對 **Configure automatic rotation (設定自動輪換)**，保留預設 **Disable automatic rotation (停用自動輪換)** 設定。

   如果您稍後需要輪換授權碼，請參閱 [輪換 CDN 標頭值](cdn-auth-rotate.md)。

1. 選擇 **Next (下一步)**，然後選擇 **Store (存放)**。

   這會帶您前往私密清單。

1. 選取私密名稱以檢視 **Secret ARN (私密 ARN)**。ARN 具有與 `arn:aws:secretsmanager:us-west-2:123456789012:secret:MediaPackage/cdn_auth_test-xxxxxx` 類似的值。當您在步驟 4：在 MediaPackage 中啟用 CDN 授權中設定 MediaPackage 的 CDN 授權時，您可以使用秘密 ARN。

## 步驟 3：建立 MediaPackage 存取 Secrets Manager 的 IAM 政策和角色
<a name="cdn-aut-setup-iam"></a>

建立 IAM 政策和角色，以授予 MediaPackage 對 Secrets Manager 的讀取存取權。當 MediaPackage 從 CDN 接收播放請求時，它會驗證儲存的秘密值是否符合自訂 HTTP 標頭中的值。請按照[允許 AWS Elemental MediaPackage 存取其他 AWS 服務](setting-up-create-trust-rel.md) 中的步驟設定政策和角色。

## 步驟 4：在 MediaPackage 中啟用 CDN 授權
<a name="cdn-aut-setup-endpoint"></a>

您可以使用 MediaPackage 主控台或 MediaPackage API AWS CLI，為您的端點或隨需視訊 (VOD) 封裝群組啟用 CDN 授權。您將 ARN 用於您在步驟 3：建立 MediaPackage 存取 Secrets Manager 的 IAM 政策和角色。

**提示**  
在相同區域和相同帳戶的多個端點上使用相同的秘密。只有在工作流程需要時，才建立新的私密來降低成本。

如果您的 CDN 已設定授權標頭，MediaPackage 會傳回錯誤 404，直到端點上啟用 CDN 授權為止。

**使用主控台啟用即時內容的 CDN 授權**

1. 在 https：//[https://console.aws.amazon.com/mediapackage/](https://console.aws.amazon.com/mediapackage/) 開啟 MediaPackage 主控台。

1. 如果您還沒有頻道，請建立頻道。如需協助，請參閱 [建立頻道](channels-create.md)。

1. 建立或編輯端點。

1. 在**存取控制設定**中，選取**使用 CDN 授權**。完成欄位：
   + 在 **Secrets 角色 ARN** 中，輸入您在 中建立之 IAM 角色的 ARN[步驟 3：建立 MediaPackage 存取 Secrets Manager 的 IAM 政策和角色](#cdn-aut-setup-iam)。
   + 在 **CDN 識別符秘密 ARN** 中，在您的 CDN 用於授權存取端點的 Secrets Manager 中輸入秘密的 ARN。

1. 根據需要完成其餘欄位並儲存端點。

**使用主控台啟用 VOD 內容的 CDN 授權**

1. 在 https：//[https://console.aws.amazon.com/mediapackage/](https://console.aws.amazon.com/mediapackage/) 開啟 MediaPackage 主控台。

1. 如果您還沒有 VOD 封裝群組，請建立一個。如需協助，請參閱 [建立封裝群組](pkg-group-create.md)。

1. 建立或編輯封裝群組。

1. 在**設定存取控制**中，選取**啟用授權**。完成欄位：
   + 在 **Secrets 角色 ARN** 中，輸入您在 中建立之 IAM 角色的 ARN[步驟 3：建立 MediaPackage 存取 Secrets Manager 的 IAM 政策和角色](#cdn-aut-setup-iam)。
   + 在 **CDN 識別符秘密 ARN** 中，在您的 CDN 用於授權存取端點的 Secrets Manager 中輸入秘密的 ARN。

1. 視需要完成其餘欄位，並儲存封裝群組。

您現在已經完成 CDN 授權的設定。此端點的請求必須包含您在 Secrets Manager 中儲存的相同授權碼。

**使用 MediaPackage API 啟用 CDN 授權**  
如需使用 MediaPackage API 啟用 CDN 授權的資訊，請參閱下列 API 參考：
+ [MediaPackage 即時 API 參考](https://docs.aws.amazon.com/mediapackage/latest/apireference/resources.html)
+ [MediaPackage VOD API 參考](https://docs.aws.amazon.com/mediapackage-vod/latest/apireference/)

# 輪換 CDN 標頭值
<a name="cdn-auth-rotate"></a>

如果您變更 CDN 自訂原始伺服器 HTTP 標頭值，則需要輪換 Secrets Manager 中存放的秘密值。下列程序說明如何在 Secrets Manager 中輪換您的值，以確保您 CDN 的 HTTP 標頭值和 Secrets Manager 存放的秘密值是同步的。

**如何輪換值**

1. 更新 Secrets Manager 中存放的秘密值，如 *AWS Secrets Manager 使用者指南*中的[修改秘密](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_update-secret.html)中所述。

   為了確保持續播放作用中串流，MediaPackage 會授權使用 Secrets Manager 中目前值或傳回一個版本的請求。

1. 等待 10 分鐘讓 MediaPackage 辨識 Secrets Manager 中的值已變更。

1. 在 CDN 中，將 `X-MediaPackage-CDNIdentifier` 中的值更新為新的授權碼。

1. 等待 CDN 以新值完全更新，然後再透過 CDN 將任何請求傳送到 MediaPackage。

   若要停用上一個私密值，請將新的私密值儲存兩次。如此一來，目前和先前的秘密版本都會具有相同的值。