Amazon EMR
管理指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

加密选项

从 Amazon EMR 发布版 4.8.0 开始,您可以使用安全配置来指定用于对静态数据和/或传输中的数据进行加密的设置。您创建的每个安全配置都存储在 Amazon EMR 中而不是集群配置中,因此无论何时创建集群,您都可以轻松地重复使用某个配置来指定数据加密设置。有关更多信息,请参阅 创建安全配置

下图显示了安全配置可用的不同数据加密选项。当您启用静态数据加密时,可以指定用于加密 Amazon S3 中的 EMRFS 数据和本地磁盘加密的选项。您可以选择仅启用静态加密和/或仅启用传输中加密。

以下加密选项也可用,并且不是使用安全配置来配置的:

  • 使用安全配置不会加密集群实例上的 EBS 根设备卷。从 Amazon EMR 发布版 5.7.0 开始,您可以使用加密的 EBS 根设备卷指定自定义 AMI 来实现此目的。有关更多信息,请参阅 Amazon EMR 管理指南 中的使用自定义 AMI

  • 如果您使用的是不支持安全配置的 Amazon EMR 版本,则可以在 Amazon S3 中为 EMRFS 数据手动配置加密。有关更多信息,请参阅 使用 EMRFS 属性指定 Amazon S3 加密

  • (可选) 从 Amazon EMR 版本 4.1.0 和更高版本开始,您可以选择在 HDFS 中配置透明加密。有关更多信息,请参阅 Amazon EMR 版本指南 中的 Amazon EMR 上的 HDFS 中的透明加密

数据加密需要密钥和证书。安全配置可让您从多个选项中灵活选择,这些选项包括 AWS Key Management Service托管的密钥;Amazon S3 托管的密钥和来自您提供的自定义提供商的密钥和证书。当使用 AWS KMS 作为您的密钥提供商时,您需支付加密密钥的存储和使用费用。有关更多信息,请参阅 AWS KMS 定价

在指定加密选项前,要确定所用的密钥和证书管理系统,因此您可以先创建密钥和证书或您在加密设置中指定的自定义提供商。

Amazon S3 中的 EMRFS 数据的静态加密

Amazon S3 加密适用于在 Amazon S3 中读取和写入的 EMR 文件系统 (EMRFS) 对象。请在启用静态加密时指定 Amazon S3 服务器端加密 (SSE) 或客户端加密 (CSE)。EMRFS 的 Amazon S3 SSE 和 CSE 加密是互斥的;您可以任选其一,不能同时选择两者。无论是否启用 Amazon S3 加密,传输层安全性 (TLS) 都对 Amazon EMR 集群节点和 Amazon S3 之间正在传输的 EMRFS 对象进行加密。有关 Amazon S3 加密的详细信息,请参阅 Amazon Simple Storage Service Developer Guide 中的使用加密保护数据

Amazon S3 服务器端加密

如果设置 Amazon S3 服务器端加密,Amazon S3 在数据写入磁盘时在对象级别加密数据,并在有人访问数据时解密数据。有关 SSE 的更多信息,请参阅 Amazon Simple Storage Service Developer Guide 中的使用服务器端加密保护数据

在 Amazon EMR 中指定 SSE 时,可以在两个不同的密钥管理系统之间进行选择:

  • SSE-S3:Amazon S3 管理密钥。

  • SSE-KMS:您使用一个根据适合 Amazon EMR 的策略设置的 AWS KMS 客户主密钥 (CMK)。有关 Amazon EMR 密钥要求的更多信息,请参阅使用 AWS KMS 客户主密钥 (CMK) 进行加密。使用 AWS KMS 时,加密密钥的存储和使用将产生费用。有关更多信息,请参阅 AWS KMS 定价

使用客户提供密钥 (SSE-C) 的 SSE 不能用于 Amazon EMR。

Amazon S3 客户端加密

对于 Amazon S3 客户端加密,Amazon S3 加密和解密在您的 EMR 集群上的 EMRFS 客户端中进行。对象在上传至 Amazon S3 之前加密,在下载后解密。您指定的提供商提供客户端使用的加密密钥。客户端可以使用 AWS KMS (CSE-KMS) 提供的密钥或使用自定义 Java 类来提供客户端主密钥 (CSE-C)。CSE-KMS 和 CSE-C 的加密细节略有不同,取决于指定的提供商以及所解密或加密对象的元数据。有关这些区别的更多信息,请参阅 Amazon Simple Storage Service Developer Guide 中的使用客户端加密保护数据

注意

Amazon S3 CSE 只确保通过 Amazon S3 交换的 EMRFS 数据是加密的,不保证集群实例卷上的所有数据都加密。此外,由于 Hue 不使用 EMRFS,因此 Hue S3 文件浏览器写入到 Amazon S3 的对象不会加密。

本地磁盘静态加密

安全配置中的本地磁盘加密适用于集群中的实例存储和 EBS 存储卷。它不适用于 EBS 根设备卷。从 Amazon EMR 版本 5.7.0 开始,您可以指定自定义 AMI 来加密 EC2 实例的 EBS 根设备卷。这是不同于安全配置的设置。有关更多信息,请参阅 Amazon EMR 管理指南 中的使用自定义 AMI

启用静态数据加密后,两种机制一起加密存储卷:

  • 开源 HDFS 加密:HDFS 在分布式处理期间交换集群实例间的数据,并从挂载到实例的实例存储卷和 EBS 卷读取和向其中写入数据。启用本地磁盘加密会激活以下开源 Hadoop 加密选项:

    注意

    您也可以通过启用传输中加密激活其他 Apache Hadoop 加密 (参阅传输中数据加密)。这些加密设置不会激活 HDFS 透明加密,您可以手动配置透明加密。有关更多信息,请参阅 Amazon EMR 版本指南 中的 Amazon EMR 上的 HDFS 中的透明加密

  • LUKS。除 HDFS 加密外,Amazon EC2 实例存储卷和挂载的集群实例的 Amazon EBS 卷都是用 LUKS 加密的。有关 LUKS 加密的更多信息,请参阅 LUKS 磁盘规格。静态加密不会加密 EBS 根设备卷 (启动卷)。要加密 EBS 根设备卷,请使用 Amazon EMR 版本 5.7.0 或更高版本并指定自定义 AMI。有关更多信息,请参阅 Amazon EMR 管理指南 中的自定义 AMI

    对于您的密钥提供商,您可以使用带有适用于 Amazon EMR 的策略的 AWS KMS CMK 设置,也可以使用提供加密项目的自定义 Java 类。使用 AWS KMS 时,加密密钥的存储和使用将产生费用。有关更多信息,请参阅 AWS KMS 定价

传输中数据加密

传输中加密会启用几种加密机制。这些是开源功能,是特定于应用程序的,可能因 Amazon EMR 版本而异。使用安全配置可以启用以下特定于应用程序的加密功能:

  • Hadoop (有关更多信息,请参阅 Apache Hadoop 文档中的安全模式下的 Hadoop) :

  • HBase:

  • Presto:

    • Presto 节点之间的内部通信使用 SSL/TLS (仅限 Amazon EMR 版本 5.6.0 及更高版本)。

  • Tez:

  • Spark (有关更多信息,请参阅 Spark 安全设置) :

    • 在 Amazon EMR 发布版 5.9.0 及更高版本中,使用 AES-256 密码对 Spark 组件 (例如,数据块传输服务和外部随机服务) 之间的内部 RPC 通信进行加密。在早期版本中,使用将 DIGEST-MD5 作为密码的 SASL 对内部 RPC 通信进行加密。

    • 使用 Spark 的 SSL 配置对与用户界面 (如 Spark History Server 和支持 HTTPS 的文件服务器) 的 HTTP 协议通信进行加密。有关更多信息,请参阅 Spark 文档中的 SSL 配置

您可以通过两种方式指定用于传输中加密的加密项目:一种是提供上传到 Amazon S3 的证书的压缩文件,另一种是引用提供加密项目的自定义 Java 类。有关更多信息,请参阅 通过 Amazon EMR 加密为传输中的数据加密提供证书