AWS Key Management Service
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Amazon Elastic Transcoder 如何使用 AWS KMS

您可以使用 Amazon Elastic Transcoder 将存储在 Amazon S3 存储桶中的媒体文件转换为消费者播放设备所要求的格式。对于输入文件和输出文件,均可以进行加密和解密。以下各部分讨论如何使用 AWS KMS 执行这两个过程。

为输入文件加密

您必须先创建 Amazon S3 存储桶并将您的媒体文件上传到该存储桶中,然后才可以使用 Elastic Transcoder。您可以在上传前使用 AES 客户端加密为该文件加密,也可以在上传后使用 Amazon S3 服务器端加密为该文件加密。

如果您选择使用 AES 的客户端加密,则您需负责在将文件上传到 Amazon S3 之前为文件加密,并且您必须为 Elastic Transcoder 提供对加密密钥的访问权限。通过使用 AWS KMS 客户主密钥 (CMK) 保护您用于为媒体文件加密的 AES 加密密钥,即可实现此目的。

如果您选择服务器端加密,即表示您要允许 Amazon S3 代表您执行所有文件加密和解密操作。您可以将 Amazon S3 配置为使用以下三种不同主密钥之一来保护用于为您的文件加密的唯一数据密钥:

  • Amazon S3 主密钥,这是由 AWS 拥有和管理的密钥

  • 适用于 Amazon S3 的 AWS 托管 CMK,这是一个由您的账户拥有但由 AWS 管理的主密钥

  • 您使用 AWS KMS 创建的任何客户托管 CMK

您可以通过 Amazon S3 控制台或适当的 Amazon S3 API 请求加密和所需的主密钥。有关 Amazon S3 如何执行加密的更多信息,请参阅 Amazon Simple Storage Service 开发人员指南 中的使用加密保护数据

在使用账户中 Amazon S3 的 AWS 托管 CMK 或客户托管 CMK 来保护输入文件时,Amazon S3 和 AWS KMS 将通过以下方式进行交互:

  1. Amazon S3 请求明文数据密钥以及使用指定 CMK 加密的数据密钥的副本。

  2. AWS KMS 创建数据密钥,使用指定的 CMK 为其进行加密,然后将明文数据密钥和加密的数据密钥发送到 Amazon S3。

  3. Amazon S3 使用明文数据密钥为媒体文件加密,然后将该文件存储在指定的 Amazon S3 存储桶中。

  4. Amazon S3 将加密的数据密钥与加密的媒体文件一起存储。

将输入文件解密

如果您选择使用 Amazon S3 服务器端加密来为输入文件加密,则 Elastic Transcoder 不会将该文件解密。相反,Elastic Transcoder 依赖于 Amazon S3 执行解密,具体取决于您创建任务和管道时指定的设置

可用的设置组合如下:

加密模式 AWS KMS 密钥 含义
S3 默认 Amazon S3 创建并管理用于为媒体文件加密和解密的密钥。此过程对用户是不透明的。
S3-AWS-KMS 默认 Amazon S3 使用由您的账户中用于 Amazon S3 的默认 AWS 托管 CMK 加密的数据密钥来为媒体文件加密。
S3-AWS-KMS 自定义 (使用 ARN) Amazon S3 使用由指定的客户托管 CMK 加密的数据密钥来为媒体文件加密。

如果已指定 S3-AWS-KMS,Amazon S3 和 AWS KMS 采用以下方式协同工作来执行解密。

  1. Amazon S3 向 AWS KMS 发送加密的数据密钥。

  2. AWS KMS 使用适当的 CMK 为数据密钥解密,然后将明文数据密钥发送回到 Amazon S3。

  3. Amazon S3 使用明文数据密钥将密文解密。

如果您选择采纳 AES 密钥的客户端加密,Elastic Transcoder 将从 Amazon S3 存储桶中检索加密的文件并将其解密。Elastic Transcoder 使用您创建管道时指定的 CMK 将 AES 密钥解密,然后使用 AES 密钥将媒体文件解密。

为输出文件加密

Elastic Transcoder 根据您创建任务和管道时是如何指定加密设置的为输出文件加密。可用选项如下:

加密模式 AWS KMS 密钥 含义
S3 默认 Amazon S3 创建并管理用于为输出文件加密的密钥。
S3-AWS-KMS 默认 Amazon S3 使用由 AWS KMS 创建并由您的账户中用于 Amazon S3 的 AWS 托管 CMK 加密的数据密钥。
S3-AWS-KMS 自定义 (使用 ARN) Amazon S3 使用由 ARN 指定的客户托管 CMK 加密的数据密钥来为媒体文件加密。
AES- 默认 Elastic Transcoder 使用您的账户中用于 Amazon S3 的 AWS 托管 CMK 为您提供的指定 AES 密钥解密,并使用该密钥为输出文件加密。
AES- 自定义 (使用 ARN) Elastic Transcoder 使用 ARN 指定的客户托管 CMK 为您提供的指定 AES 密钥解密,并使用该密钥为输出文件加密。

当您指定使用账户中 Amazon S3 的 AWS 托管 CMK 或客户托管 CMK 来加密输出文件时,Amazon S3 和 AWS KMS 将通过以下方式进行交互:

  1. Amazon S3 请求明文数据密钥以及使用指定 CMK 加密的数据密钥的副本。

  2. AWS KMS 创建数据密钥,使用 CMK 为其进行加密,然后将明文数据密钥和加密的数据密钥发送到 Amazon S3。

  3. Amazon S3 使用该数据密钥为媒体文件加密,并将其存储在指定的 Amazon S3 存储桶中。

  4. Amazon S3 将加密的数据密钥与加密的媒体文件一起存储。

当您指定使用您提供的 AES 密钥为输出文件解密时,必须使用 AWS KMS 中的 CMK 为该 AES 密钥加密。Elastic Transcoder、AWS KMS 和您使用以下方式进行交互:

  1. 您可以通过在 AWS KMS API 中调用 Encrypt 操作来为您的 AES 密钥加密。AWS KMS 使用指定的 CMK 为密钥加密。您在创建管道时指定要使用的 CMK。

  2. 您在创建 Elastic Transcoder 任务时指定包含加密的 AES 密钥的文件。

  3. Elastic Transcoder 通过在 AWS KMS API 中调用 Decrypt 操作来为密钥解密,将加密的密钥以密文形式传递。

  4. Elastic Transcoder 使用解密的 AES 密钥来为输出媒体文件加密,然后从内存中删除已解密的 AES 密钥。仅将您最初在任务中定义的加密副本保存到磁盘。

  5. 您可以下载加密的输出文件,并使用您定义的原始 AES 密钥在本地将其解密。

重要

AWS 不会存储您的私有加密密钥。因此,请务必妥善安全地管理您的密钥。如果您丢失了加密密钥,将无法解密数据。

HLS 内容保护

HTTP 实时流 (HLS) 是自适应流式处理协议。Elastic Transcoder 通过将您的输入文件拆分为更小的名为媒体区段 的单个文件来支持 HLS。一组相应的单个媒体区段包含以不同比特率编码的相同材料,使播放器可以选择最适合可用带宽的流。Elastic Transcoder 还将创建播放列表,列表中包含可流式处理的各种区段的元数据。

当您启用 HLS 内容保护 时,将使用 128 位 AES 加密密钥为每个媒体区段加密。在查看内容时,玩家可在播放过程中下载密钥并为媒体区段解密。

使用两种类型的密钥:AWS KMS CMK 和数据密钥。您必须创建 CMK 以用于为数据密钥加密和解密。Elastic Transcoder 使用该数据密钥为媒体区段加密和解密。数据密钥必须为 AES-128。对于相同内容的所有变体和区段,使用相同数据密钥进行加密。您可以提供数据密钥,或者让 Elastic Transcoder 为您创建数据密钥。

在以下时间点,可以使用 CMK 为数据密钥加密。

  • 如果您提供自己的数据密钥,则必须在将其传递给 Elastic Transcoder 之前对其进行加密。

  • 如果您请求 Elastic Transcoder 生成数据密钥,则 Elastic Transcoder 会为您将数据密钥加密。

在以下时间点,可以使用 CMK 将数据密钥解密。

  • Elastic Transcoder 在需要使用数据密钥为输出文件加密或为输入文件解密时将您提供的数据密钥解密。

  • 您将解密由 Elastic Transcoder 生成的数据密钥,并使用它来将输出文件解密。

有关更多信息,请参阅 Amazon Elastic Transcoder Developer Guide 中的 HLS 内容保护

Elastic Transcoder 加密上下文

加密上下文 是一组包含任意非机密数据的键值对。在加密数据的请求中包含加密上下文时,AWS KMS 会以加密方式将加密上下文绑定到加密的数据。要解密数据,您必须传入相同的加密上下文。

Elastic Transcoder 在所有 AWS KMS API 请求中使用相同的加密上下文,以生成数据密钥、加密和解密。

"service" : "elastictranscoder.amazonaws.com"

加密上下文将写入您的 CloudTrail 日志中,以帮助您了解如何使用给定的 AWS KMS CMK。在 CloudTrail 日志文件的 requestParameters 字段中,加密上下文与以下内容类似:

"encryptionContext": { "service" : "elastictranscoder.amazonaws.com" }

有关如何配置 Elastic Transcoder 任务以使用其中一个受支持的加密选项的更多信息,请参阅 Amazon Elastic Transcoder Developer Guide 中的数据加密选项