Amazon EMR 使用 Amazon EMR 的方式。Amazon KMS - Amazon Key Management Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

Amazon EMR 使用 Amazon EMR 的方式。Amazon KMS

当您使用Amazon EMR群集,您可以将群集配置为对数据进行加密静态时,,然后将其保存到永久存储位置。您可以在 EMR 文件系统 (EMRFS) 上、在群集节点的存储卷上,或同时在这两者上对静态数据进行加密。要加密静态数据,您可以使用 Amazon KMS 中的客户主密钥 (CMK)。以下主题介绍 Amazon EMR 群集如何使用 CMK 来加密静态数据。

重要

Amazon EMR Amazon EMR 仅支持 Amazon EMR对称 CMK 对称 CMK。不能使用非对称 CMK 非对称 CMK来加密 Amazon EMR 群集中的静态数据。要获取确定 CMK 是对称还是非对称的帮助,请参阅识别对称 CMK 和非对称 CMK

Amazon EMR 集群还会对数据进行加密在途中运输中,这意味着群集会先加密数据,然后将其通过网络发送。您不能使用 CMK 加密传输中的数据。有关更多信息,请参阅 。传输中数据加密中的Amazon EMR 管理指南指南。

有关 Amazon EMR 中所有可用加密选项的更多信息,请参阅 Amazon EMR EMR EMR 中的加密选项中的Amazon EMR 管理指南指南。

在 EMR 文件系统 (EMRFS) 上加密数据

Amazon EMR 群集使用两个分布式文件系统:Amazon EMR 群集

  • Hadoop 分布式文件系统 (HDFS)。HDFS 加密不会使用 Amazon KMS 中的 CMK。

  • EMR 文件系统 (EMRFS)。EMRFS 是 HDFS 的一种实施方式,使 Amazon EMR 群集能够在 Amazon EMR Simple Storage Service (Amazon S3) 中存储数据。EMRFS 支持四种加密选项,其中两种会使用 Amazon KMS 中的 CMK。有关所有四种 EMRFS 加密选项的更多信息,请参阅。加密选项中的Amazon EMR 管理指南指南。

使用 CMK 的两个 EMRFS 加密选项使用 Amazon S3 提供的以下加密功能:

当您将 Amazon EMR 群集配置为使用 SSE-KMS 或 CSE-KMS 在 EMRFS 上加密数据时,您需要在Amazon KMS,您希望 Amazon S3 或 Amazon EMR 集群使用。使用 SSE-KMS,您可以选择AmazonAmazon S3 托管 CMK,其别名为 Amazon S3 的 CMK。aws/S3或您创建的对称客户托管 CMK。使用 CSE-KMS 时,您必须选择您创建的对称客户托管 CMK。当您选择客户托管 CMK 时,您必须确保 Amazon EMR 群集有权使用该 CMK。有关更多信息,请参阅 。使用Amazon KMS用于加密的客户主密钥 (CMK)中的Amazon EMR 管理指南指南。

对于 SSE-KMS 和 CSE-KMS 这两者而言,您选择的 CMK 就是信封加密工作流程中的主密钥。该数据会使用唯一数据加密密钥(即数据密钥)对数据进行加密,而这个数据密钥将使用 Amazon KMS 中的 CMK 进行加密。已加密的数据及其数据密钥的加密副本将作为单个加密对象共同存储在 S3 存储桶中。有关其工作方式的更多信息,请参阅以下主题。

使用 SSE-KMS 在 EMRFS 上加密数据的过程

当您将 Amazon EMR 群集配置为使用 SSE-KMS 时,加密过程的工作方式如下所示:

  1. 群集将数据发送到 Amazon S3,以存储在 S3 存储桶中。

  2. Amazon S3 发送一个 Amazon S3。GenerateDataKey请求到:Amazon KMS,指定您在将群集配置为使用 SSE-KMS 时所选的 CMK 的密钥 ID。该请求包含加密上下文;有关更多信息,请参阅加密上下文

  3. Amazon KMS生成一个唯一数据加密密钥(数据密钥),然后将此数据密钥的两个副本发送到 Amazon S3。一个副本未加密 (明文),另一个副本使用 CMK 加密。

  4. Amazon S3 使用明文数据密钥加密它在步骤 1 中收到的数据,并在使用后尽快从内存中删除该明文数据密钥。

  5. Amazon S3 将已加密的数据及数据密钥的加密副本作为单个加密对象共同存储在 S3 存储桶中。

解密过程的工作方式如下所示:

  1. 群集从 S3 存储桶请求加密的数据对象。

  2. Amazon S3 从 S3 对象提取加密的数据密钥,然后将已加密的数据密钥发送到Amazon KMS使用Decrypt请求. 该请求包括一个加密上下文

  3. Amazon KMS使用加密数据密钥时使用的同一 CMK 解密该加密数据密钥,然后将已解密的(明文)数据密钥发送到 Amazon S3。

  4. Amazon S3 使用明文数据密钥解密已加密的数据,并在使用后尽快从内存中删除该明文数据密钥。

  5. Amazon S3 将解密数据发送给群集。

使用 CSE-KMS 在 EMRFS 上加密数据的过程

当您将 Amazon EMR 群集配置为使用 CSE-KMS 时,加密过程的工作方式如下所示:

  1. 当群集准备好将数据存储在 Amazon S3 中后,群集将发送一个GenerateDataKey请求到:Amazon KMS,指定您在将群集配置为使用 CSE-KMS 时所选的 CMK 的密钥 ID。该请求包含加密上下文;有关更多信息,请参阅加密上下文

  2. Amazon KMS 生成一个唯一数据加密密钥(数据密钥),然后将此数据密钥的两个副本发送到群集。一个副本未加密 (明文),另一个副本使用 CMK 加密。

  3. 群集使用明文数据密钥加密数据,并在使用后尽快从内存中删除该明文数据密钥。

  4. 群集将已加密的数据及数据密钥的加密副本组合为单个加密对象。

  5. 群集将加密的对象发送给 Amazon S3 进行存储。

解密过程的工作方式如下所示:

  1. 群集从 S3 存储桶请求加密的数据对象。

  2. Amazon S3 将加密的对象发送给群集。

  3. 群集从加密的对象提取加密的数据密钥,然后使用 Amazon KMSDecrypt 请求将已加密的数据密钥发送给 。该请求包括加密上下文

  4. Amazon KMS 借助加密数据密钥时使用的同一 CMK 解密该加密数据密钥,然后将已解密的(明文)数据密钥发送到群集。

  5. 群集使用明文数据密钥解密已加密的数据,并在使用后尽快从内存中删除该明文数据密钥。

在集群节点的存储卷上加密数据

Amazon EMR 群集是 Amazon EMR 群集的 Amazon EMR Elastic Compute Cloud (Amazon EC2) 实例的集合。群集中的每个实例称作群集节点节点。每个节点都可以有两类存储卷:实例存储卷和 Amazon EElastic Block Store (Amazon EBS) 卷。您可以将群集配置为使用 Linux Unified Key Setup (LUKS) 来加密节点上的两类存储卷 (但不包括每个节点的启动卷)。这称为本地磁盘加密

在为群集启用本地磁盘加密后,您可以选择使用 Amazon KMS 中的 CMK 加密 LUKS 主密钥。您必须选择您创建的客户托管 CMK;不能使用 Amazon 托管 CMK。如果您选择客户托管 CMK,您必须确保 Amazon EMR 群集有权使用该 CMK。有关更多信息,请参阅 。使用Amazon KMS用于加密的客户主密钥 (CMK)中的Amazon EMR 管理指南指南。

当您使用 CMK 启用本地磁盘加密时,加密过程的工作方式如下所示:

  1. 在每个群集节点启动后,它将向 发送 GenerateDataKeyAmazon KMS 请求,同时指定您在为群集启用本地磁盘加密时所选的 CMK 的密钥 ID。

  2. Amazon KMS 生成一个唯一数据加密密钥(数据密钥),然后将此数据密钥的两个副本发送到节点。一个副本未加密 (明文),另一个副本使用 CMK 加密。

  3. 该节点将明文数据密钥的 base64 编码版本作为保护 LUKS 主密钥的密码。节点会将加密的数据密钥副本保存在启动卷上。

  4. 如果节点重启,重启节点会使用 Amazon KMSDecrypt 请求将已加密的数据密钥发送到

  5. Amazon KMS 借助加密数据密钥时使用的同一 CMK 解密该加密数据密钥,然后将已解密的(明文)数据密钥发送到节点。

  6. 该节点将明文数据密钥的 base64 编码版本作为解锁 LUKS 主密钥的密码。

加密上下文

EACHAmazon服务集成到Amazon KMS可以指定一个加密上下文当它使用Amazon KMS生成数据密钥或者加密或解密数据。加密上下文是 Amazon KMS 检查数据完整性时使用的额外的身份验证信息。当服务为加密操作指定加密上下文时,它还必须为对应的解密操作指定同一加密上下文,否则解密会失败。加密上下文也将写入 Amazon CloudTrail 日志文件中,这可以帮助您了解为什么要使用给定的 CMK。

以下部分介绍每个 Amazon EMR 加密场景中使用的加密上下文。

使用 SSE-KMS 的 EMRFS 加密的加密上下文

借助 SSE-KMS,Amazon EMR 群集将数据发送到 Amazon S3,Amazon S3 使用 CMK 加密数据,然后,Amazon S3 使用 CMK 加密数据,然后将其存储到 S3 存储桶中。在这种情况下,Amazon S3 使用 S3 对象的 Amazon 资源名称 (ARN) 作为加密上下文,同时使用每个GenerateDataKeyDecrypt请求它发送到Amazon KMS。以下示例显示 Amazon S3 使用的加密上下文的 JSON 表示形式。

{ "aws:s3:arn" : "arn:aws:s3:::S3_bucket_name/S3_object_key" }

使用 CSE-KMS 的 EMRFS 加密的加密上下文

借助 CSE-KMS,Amazon EMR 群集使用 CMK 加密数据,然后将其发送到 Amazon S3 进行存储。在这种情况下,群集使用它发送给 的每个 GenerateDataKeyDecryptAmazon KMS 请求将 CMK 的 Amazon 资源名称 (ARN) 作为加密上下文。以下示例显示了群集使用的加密上下文的 JSON 表示形式。

{ "kms_cmk_id" : "arn:aws:kms:us-east-2:111122223333:key/0987ab65-43cd-21ef-09ab-87654321cdef" }

使用 LUKS 的本地磁盘加密的加密上下文

Amazon EMR 群集使用 LUKS 进行本地磁盘加密时,群集节点不使用 LUKS 指定加密上下文时,GenerateDataKeyDecrypt请求,他们发送到Amazon KMS。