数据保护 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

数据保护

了解Amazon责任共担模式如何应用于 Amazon EMR on EKS 中的数据保护。如该模式中所述,Amazon负责保护运行所有Amazon云的全球基础设施。您负责维护对托管在此基础设施上的内容的控制。此内容包括您所使用的 Amazon 服务的安全配置和管理任务。有关数据隐私的更多信息,请参阅数据隐私常见问题。有关欧洲数据保护的信息,请参阅Amazon安全性博客上的 Amazon Shared Responsibility Model and GDPR 博客文章。

出于数据保护目的,我们建议您保护好 Amazon 账户凭证并使用 Amazon Identity and Access Management(IAM)设置单独的账户。这仅向每个用户授予履行其工作职责所需的权限。我们还建议您通过以下方式保护您的数据:

  • 对每个账户使用 multi-factor authentication(MFA)。

  • 使用 SSL/TLS 与 Amazon 资源进行通信。建议使用 TLS 1.2 或更高版本。

  • 使用 Amazon CloudTrail 设置 API 和用户活动日志记录。

  • 使用 Amazon 加密解决方案以及 Amazon 服务中的所有默认安全控制。

  • 使用高级托管安全服务(例如 Amazon Macie),它有助于发现和保护存储在 Simple Storage Service(Amazon S3)中的个人数据。

  • 使用 Amazon EMR on EKS 加密选项对静态数据和传输中的数据进行加密。

  • 如果在通过命令行界面或 API 访问 Amazon 时需要经过 FIPS 140-2 验证的加密模块,请使用 FIPS 端点。有关可用的 FIPS 终端节点的更多信息,请参阅美国联邦信息处理标准 (FIPS) 第 140-2 版

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

静态加密

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

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

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

Amazon S3 中 EMRFS 数据的静态加密

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 开发人员指南》中的使用加密保护数据

注意

使用 Amazon KMS 时,加密密钥的存储和使用将产生费用。有关更多信息,请参阅 Amazon KMS 定价

Amazon S3 服务器端加密

设置 Amazon S3 服务器端加密时,Amazon S3 在向磁盘写入数据时会在对象级别加密数据,并在访问数据时对数据进行解密。有关 SSE 的更多信息,请参阅《Amazon Simple Storage Service 开发人员指南》中的使用服务器端加密保护数据

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

  • SSE-S3 - Amazon S3 为您管理密钥。

  • SSE-KMS - 您使用适用于 Amazon EMR on EKS 的策略设置一个 Amazon KMS key。

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

Amazon S3 客户端加密

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

注意

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

本地磁盘加密

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

对于驱动程序和执行程序 Pod,您可以加密保留到挂载卷的静态数据。有三种不同的Amazon本机存储选项,您可以与 Kubernetes 一起使用:EBSEFSFSx for Lustre。这三者都使用服务托管式密钥或 Amazon KMS key 进行静态加密。有关更多信息,请参阅 EKS 最佳实践指南。使用此方法,所有保留到挂载卷的数据都会加密。

密钥管理

您可以将 KMS 配置为自动轮换 KMS 密钥。这会每年转动一次密钥,同时无限期地保存旧密钥,以便您的数据仍然可以被解密。有关更多信息,请参阅轮换 Amazon KMS keys

传输中加密

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

  • Spark

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

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

    有关更多信息,请参阅 Spark 安全设置

  • 您应该在 Amazon S3 存储桶 IAM policy 上使用 aws:SecureTransport 条件,以只允许通过 HTTPS(TLS)的加密连接。

  • 流式传输到 JDBC 或 ODBC 客户端的查询结果使用 TLS 进行加密。