

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

# 数据保护
<a name="data-protection"></a>

分 AWS [担责任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)适用于 EKS 上的 Amazon EMR 中的数据保护。如本模型所述 AWS ，负责保护运行所有 AWS 云的全球基础架构。您负责维护对托管在此基础设施上的内容的控制。此内容包括您所使用的 AWS 服务的安全配置和管理任务。有关数据隐私的更多信息，请参阅[数据隐私常见问题](https://aws.amazon.com/compliance/data-privacy-faq/)。有关欧洲数据保护的信息，请参阅 AWS 安全博客上的[责任 AWS 共担模型和 GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 博客文章。

出于数据保护目的，我们建议您使用 AWS 身份与访问管理 (IAM) and Identity Access Management 来保护 AWS 账户凭证并设置个人账户。这仅向每个用户授予履行其工作职责所需的权限。我们还建议您通过以下方式保护数据：
+ 对每个账户使用多重身份验证（MFA）。
+ 用于 SSL/TLS 与 AWS 资源通信。建议使用 TLS 1.2 或更高版本。
+ 使用设置 API 和用户活动日志 AWS CloudTrail。
+ 使用 AWS 加密解决方案以及 AWS 服务中的所有默认安全控制。
+ 使用高级托管安全服务（例如 Amazon Macie），它有助于发现和保护存储在 Amazon S3 中的个人数据。
+ 使用 Amazon EMR on EKS 加密选项对静态数据和传输中的数据进行加密。
+ 如果您在 AWS 通过命令行界面或 API 进行访问时需要经过 FIPS 140-2 验证的加密模块，请使用 FIPS 端点。有关可用的 FIPS 端点的更多信息，请参阅[美国联邦信息处理标准（FIPS）第 140-2 版](https://aws.amazon.com/compliance/fips/)。

我们强烈建议您切勿将敏感的可识别信息（例如您客户的账号）放入自由格式字段（例如**名称**字段）。这包括您使用控制台、API 或，在 EKS 或其他 AWS 服务上使用 Amazon EMR 时。 AWS CLI AWS SDKs您输入到 Amazon EMR on EKS 或其它服务中的任何数据都可能被选取以包含在诊断日志中。当您向外部服务器提供网址时，请勿在网址中包含凭证信息来验证您对该服务器的请求。

## 静态加密
<a name="encryption-at-rest"></a>

数据加密有助于防止未经授权的用户在集群和关联的数据存储系统中读取数据。这包括保存到持久性媒体的数据（称为静态数据）和在网络中传输时可能被拦截的数据（称为传输中的数据）。

数据加密需要密钥和凭证。您可以从多个选项中进行选择，包括由管理的密钥 AWS Key Management Service、由 Amazon S3 管理的密钥以及您提供的自定义提供商提供的密钥和证书。 AWS KMS 用作密钥提供商时，加密密钥的存储和使用将产生费用。有关更多信息，请参阅 [AWS KMS 定价](https://aws.amazon.com/kms/pricing/)。

在指定加密选项前，确定要使用的密钥和凭证管理系统。然后，针对您指定为加密设置一部分的自定义提供程序，来创建密钥和凭证。

### Amazon S3 中 EMRFS 数据的静态加密
<a name="encryption-emrfs"></a>

Amazon S3 加密适用于在 Amazon S3 中读取和写入的 EMR 文件系统（EMRFS）对象。在您启用静态加密时，请指定 Amazon S3 服务器端加密（SSE）或客户端加密（CSE）作为**默认加密模式**。（可选）您可以使用 **Per bucket encryption overrides (每存储桶加密覆盖)** 为单个存储桶指定不同的加密方法。无论是否启用了 Amazon S3 加密，传输层安全性（TLS）都会对 EMR 集群节点和 Amazon S3 之间正在传输的 EMRFS 对象进行加密。有关 Amazon S3 加密的更多信息，请参阅《Amazon Simple Storage Service 开发人员指南》中的[使用加密保护数据](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingEncryption.html)。

**注意**  
使用时 AWS KMS，会收取加密密钥的存储和使用费用。有关更多信息，请参阅[AWS KMS 定价](https://aws.amazon.com/kms/pricing/)。

### Amazon S3 服务器端加密
<a name="encryption-server-side"></a>

设置 Amazon S3 服务器端加密时，Amazon S3 在向磁盘写入数据时会在对象级别加密数据，并在访问数据时对数据进行解密。有关 SSE 的更多信息，请参阅《Amazon Simple Storage Service 开发人员指南》中的[使用服务器端加密保护数据](https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html)。

在 Amazon EMR on EKS 中指定 SSE 时，您可以在两个不同的密钥管理系统之间进行选择：
+ **SSE-S3** - Amazon S3 为您管理密钥。
+ **SSE-KMS**-您可以使用 AWS KMS key 来设置适用于 EKS 上亚马逊 EMR 的政策。

客户提供密钥的 SSE（SSE-C）不能用于 Amazon EMR on EKS。

### Amazon S3 客户端加密
<a name="encryption-client-side"></a>

对于 Amazon S3 客户端加密，Amazon S3 加密和解密过程在您的 EMR 集群上的 EMRFS 客户端中进行。在对象上载到 Amazon S3 之前对其进行加密，并在下载后对其进行解密。您指定的提供程序会提供客户端使用的加密密钥。客户端可以使用 AWS KMS 提供的密钥（CSE-KMS）或提供客户端根密钥（CSE-C）的自定义 Java 类。CSE-KMS 和 CSE-C 之间的加密细节略有不同，具体取决于指定的提供程序以及正在解密或加密对象的元数据。有关这些区别的更多信息，请参阅《Amazon Simple Storage Service 开发人员指南》中的[使用客户端加密保护数据](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingClientSideEncryption.html)。

**注意**  
Amazon S3 CSE 仅确保与 Amazon S3 交换的 EMRFS 数据已加密；不确保集群实例卷上的所有数据都已加密。此外，由于 Hue 不使用 EMRFS，因此 Hue S3 文件浏览器写入 Amazon S3 的对象没有加密。

### 本地磁盘加密
<a name="local-disk-encryption"></a>

Apache Spark 支持对写入本地磁盘的临时数据进行加密。其中包括随机文件、随机溢出以及存储在磁盘上的缓存和广播变量的数据块。它不包括使用`saveAsHadoopFile`或 APIs `saveAsTable`等对应用程序生成的输出数据进行加密。它也可能不包括用户明确创建的临时文件。有关更多信息，请参阅 Spark 文档中的[本地存储加密](https://spark.apache.org/docs/latest/security.html#local-storage-encryption)。Spark 不支持本地磁盘上的加密数据，例如，当数据不适合内存时，执行程序进程将中间数据写入本地磁盘。保留到磁盘的数据的作用域为任务运行时，用于加密数据的密钥由 Spark 为每次任务运行动态生成。一旦 Spark 任务终止，任何其它进程都无法解密数据。

对于驱动程序和执行程序 Pod，您可以加密保留到挂载卷的静态数据。[您可以在 Kubernetes 上使用三种不同的 AWS 原生存储选项：E [B](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html)[S、EFS](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEFS.html) 和 For Lustre。FSx ](https://docs.aws.amazon.com/fsx/latest/LustreGuide/what-is.html)这三者都使用服务托管式密钥或 AWS KMS key进行静态加密。有关更多信息，请参阅 [EKS 最佳实践指南](https://aws.github.io/aws-eks-best-practices/security/docs/data)。使用此方法，所有保留到挂载卷的数据都会加密。

### 密钥管理
<a name="key-management"></a>

您可以将 KMS 配置为自动轮换 KMS 密钥。这会每年转动一次密钥，同时无限期地保存旧密钥，以便您的数据仍然可以被解密。有关更多信息，请参阅[旋转 AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html)。

## 传输中加密
<a name="encryption-in-trasit"></a>

传输中加密会启用几种加密机制。这些是特定于应用程序的开源功能，可能因 Amazon EMR on EKS 版本而异。Amazon EMR on EKS 可以启用以下特定于应用程序的加密功能：
+ Spark
  + 在 Amazon EMR 版本 5.9.0 及更高版本中，使用 AES-256 密码对 Spark 组件（例如，数据块传输服务和外部随机服务）之间的内部 RPC 通信进行加密。在早期版本中，内部 RPC 通信使用以 DIGEST-MD5 作为密码的 SASL 进行加密。
  + 使用 Spark 的 SSL 配置对与用户界面（如 Spark History Server 和支持 HTTPS 的文件服务器）的 HTTP 协议通信进行加密。有关更多信息，请参阅 Spark 文档中的 [SSL 配置](https://spark.apache.org/docs/latest/security.html#ssl-configuration)。

  有关更多信息，请参阅 [Spark 安全设置](http://spark.apache.org/docs/latest/security.html)。
+ 您应该仅允许使用 Amazon S3 存储桶 IAM 策略上的 a [ws: SecureTransport 条件通过 HTTPS](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Boolean) (TLS) 进行加密连接。
+ 流式传输到 JDBC 或 ODBC 客户端的查询结果使用 TLS 进行加密。