数据保护 - Amazon EMR

数据保护

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

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

  • 对每个账户使用多重身份验证(MFA)。

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

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

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

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

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

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

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

静态加密

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

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

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

Amazon S3 中 EMRFS 数据的静态加密

每个 EMR Serverless 应用程序都使用特定的发行版,其中包括 EMRFS(EMR 文件系统)。Amazon S3 加密适用于在 Amazon S3 中读取和写入的 EMR 文件系统(EMRFS)对象。启用静态加密时,您可以指定 Amazon S3 服务器端加密(SSE)或客户端加密(CSE)作为默认加密模式。(可选)您可以使用 Per bucket encryption overrides (每存储桶加密覆盖) 为单个存储桶指定不同的加密方法。无论是否启用了 Amazon S3 加密,传输层安全性(TLS)都会对 EMR 集群节点和 Amazon S3 之间正在传输的 EMRFS 对象进行加密。如果使用带有客户管理密钥的 Amazon S3 CSE,则在 EMR Serverless 应用程序中运行作业的执行角色必须有权访问密钥。有关 Amazon S3 加密的详细信息,请参阅《Amazon Simple Storage Service 开发人员指南》中的使用加密保护数据

注意

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

Amazon S3 服务器端加密

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

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

  • SSE-S3 - Amazon S3 为您管理密钥。无需在 EMR Serverless 上进行额外设置。

  • SSE-KMS:您可以使用 AWS KMS key 设置适用于 EMR Serverless 的策略。无需在 EMR Serverless 上进行额外设置。

要对写入 Amazon S3 的数据使用 AWS KMS 加密,在使用 StartJobRun API 时有两种选择。您可以对写入 Amazon S3 的所有内容启用加密,也可以对写入特定存储桶的数据启用加密。有关 StartJobRun API 的更多信息,请参阅 EMR Serverless API 参考

要对写入 Amazon S3 的所有数据启用 AWS KMS 加密,请在调用 StartJobRun API 时使用以下命令。

--conf spark.hadoop.fs.s3.enableServerSideEncryption=true --conf spark.hadoop.fs.s3.serverSideEncryption.kms.keyId=<kms_id>

要对写入特定存储桶的所有数据启用 AWS KMS 加密,请在调用 StartJobRun API 时使用以下命令。

--conf spark.hadoop.fs.s3.bucket.<amzn-s3-demo-bucket1>.enableServerSideEncryption=true --conf spark.hadoop.fs.s3.bucket.<amzn-s3-demo-bucket1>.serverSideEncryption.kms.keyId=<kms-id>

使用客户提供密钥的 SSE(SSE-C)不能与 EMR Serverless 一起使用。

Amazon S3 客户端加密

对于 Amazon S3 客户端加密,在每个 Amazon EMR 发行版上提供的 EMRFS 客户端中进行 Amazon S3 加密和解密。在对象上载到 Amazon S3 之前对其进行加密,并在下载后对其进行解密。您指定的提供程序会提供客户端使用的加密密钥。客户端可以使用 AWS KMS 提供的密钥(CSE-KMS)或提供客户端根密钥(CSE-C)的自定义 Java 类。CSE-KMS 和 CSE-C 之间的加密细节略有不同,具体取决于指定的提供程序以及正在解密或加密对象的元数据。如果使用带有客户管理密钥的 Amazon S3 CSE,则在 EMR Serverless 应用程序中运行作业的执行角色必须有权访问密钥。可能会收取额外的 KMS 费用。有关这些差异的更多信息,请参阅《Amazon Simple Storage Service 开发人员指南》中的使用客户端加密保护数据

本地磁盘加密

临时存储中的数据使用行业标准 AES-256 加密算法通过服务自有的密钥加密。

密钥管理

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

传输中加密

Amazon EMR Serverless 提供以下特定于应用程序的加密功能:

  • Spark

    • 默认情况下,Spark 驱动程序和执行程序之间的通信是经过身份验证的内部通信。驱动程序和执行程序之间的 RPC 通信是加密的。

  • Hive

    • AWS Glue 元存储与 EMR Serverless 应用程序之间通过 TLS 通信。

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