

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# CDN 授权在 AWS Elemental MediaPackage
<a name="cdn-auth"></a>

*内容分发网络 (CDN) 授权* 可帮助您保护您的内容免受未经授权的使用。配置 CDN 授权时， MediaPackage 仅满足与您的 CDN MediaPackage 之间授权的播放请求。这可以防止用户绕过 CDN 来直接访问源上的内容。

## 工作原理
<a name="working-with-cdn-auth"></a>

您可以将您的 CDN（例如 Amazon CloudFront）配置为在向的内容请求中包含*自定义 HTTP 标头*。 MediaPackage

自定义 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 在其请求中包含自定义 HTTP 标头和值 MediaPackage，由箭头指示。 MediaPackage 请求来自的秘密信息 AWS Secrets Manager，由箭头指示，这取决于 IAM 的许可。 AWS Secrets Manager 使用对的秘密值进行响应 MediaPackage。 MediaPackage 验证密钥是否与标题值匹配，标题值由绿色复选框指示。 MediaPackage 向发送 HTTP 200 OK 状态码和视频内容 CloudFront。 CloudFront 向播放设备提供视频内容。\]](http://docs.aws.amazon.com/zh_cn/mediapackage/latest/ug/images/cdn_auth.png)


有关如何设置 CDN 授权的 step-by-step说明，请参阅[设置 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：在中启用 CDN 授权 MediaPackage](#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 配置了授权标头，则在终端节点上启用 CDN 授权之前，会 MediaPackage 返回错误 404。

**重要**  
您选择的值应为静态值。您的 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，请参阅《*亚马逊 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. 登录 AWS Secrets Manager 控制台，网址为[https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)。

1. 选择**存储新密钥**。对于**密钥类型**，选择**其他密钥类型**。

1. 对于**键/值对**，输入键和值信息。
   + 在左侧的框中，输入 **MediaPackageCDNIdentifier**。
   + 在右侧的框中，输入您为自定义源 HTTP 标头配置的值。例如 `9ceebbe7-9607-4552-8764-876e47032660`。

1. 对于**加密密钥**，您可以将默认值保留为**DefaultEncryptionKey**。

1. 选择**下一步**。

1. 对于 **Secret name (密钥名称)**，我们建议您为它添加前缀 **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 策略和角色以授予对 Secrets Manager 的 MediaPackage 读取权限。当 MediaPackage 收到来自 CDN 的播放请求时，它会验证存储的密钥值是否与自定义 HTTP 标头中的值匹配。按照[AWS Elemental MediaPackage 允许访问其他 AWS 服务](setting-up-create-trust-rel.md)中的步骤设置策略和角色。

## 步骤 4：在中启用 CDN 授权 MediaPackage
<a name="cdn-aut-setup-endpoint"></a>

您可以使用 MediaPackage 控制台、或 API 为终端节点或视频点播 (VOD) 打包组启用 CDN 授权。 AWS CLI MediaPackage 您可以将 ARN 用于您在步骤 3：创建 IAM 策略和角色以 MediaPackage 访问 Secrets Manager 中创建的 IAM 策略和角色。

**提示**  
在同一区域和同一账户上跨多个终端节点使用相同的密钥。仅当工作流需要时，才能通过创建新密钥来降低成本。

如果您的 CDN 配置了授权标头，则在终端节点上启用 CDN 授权之前，会 MediaPackage 返回错误 404。

**要使用控制台为实时内容启用 CDN 授权**

1. 打开 MediaPackage 控制台，网址为[https://console.aws.amazon.com/mediapackage/](https://console.aws.amazon.com/mediapackage/)。

1. 如果您还没有通道，请创建一个通道。有关帮助信息，请参阅 [创建通道](channels-create.md)。

1. 创建或编辑终端节点。

1. 在**访问控制设置**中，选择**使用 CDN 授权**。填写以下字段：
   + 在**密钥角色 ARN** 中，输入您在 [第 3 步：创建用于 MediaPackage 访问 Secrets Manager 的 IAM 策略和角色](#cdn-aut-setup-iam) 中创建的 IAM 角色的 ARN。
   + 在 **CDN 标识符密钥 ARN** 中，输入 Secrets Manager 中密钥的 ARN，供 CDN 用于授权访问您的端点。

1. 根据需要完成剩余字段并保存终端节点。

**要使用控制台为 VOD 内容启用 CDN 授权**

1. 打开 MediaPackage 控制台，网址为[https://console.aws.amazon.com/mediapackage/](https://console.aws.amazon.com/mediapackage/)。

1. 如果您还没有 VOD 打包组，请创建一个。有关帮助信息，请参阅 [创建打包组](pkg-group-create.md)。

1. 创建或编辑打包组。

1. 在**配置访问控制**中，选择**启用授权**。填写以下字段：
   + 在**密钥角色 ARN** 中，输入您在 [第 3 步：创建用于 MediaPackage 访问 Secrets Manager 的 IAM 策略和角色](#cdn-aut-setup-iam) 中创建的 IAM 角色的 ARN。
   + 在 **CDN 标识符密钥 ARN** 中，输入 Secrets Manager 中密钥的 ARN，供 CDN 用于授权访问您的端点。

1. 根据需要完成剩余字段并保存打包组。

您现在已完成 CDN 授权的设置。对此端点的请求必须包含您在 Secrets Manager 中保存的相同授权代码。

**使用 API 启用 CDN 授权 MediaPackage**  
有关使用 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. 按照《AWS Secrets Manager 用户指南》**中[修改密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_update-secret.html)的说明，更新 Secrets Manager 中存储的密钥值。

   为确保活跃直播的持续播放，请对使用 Secrets Manager 中的当前值或一个版本的请求进行 MediaPackage 授权。

1. 等待 10 分钟， MediaPackage 即可识别出 Secrets Manager 中的值已更改。

1. 在 CDN 中，将 `X-MediaPackage-CDNIdentifier` 中的值更新为新授权代码。

1. 等待 CDN 使用新值完全更新，然后再通过它向 MediaPackage发送任何请求。

   要禁用上一个密钥值，请将新密钥值保存两次。这样，当前和之前的密钥版本都具有相同的值。