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

使用 EMRFS 属性指定 Amazon S3 加密

重要

从 Amazon EMR 发布版 4.8.0 开始,您可以使用安全配置以更轻松的方式应用安全设置,并获得更多选项。建议您使用安全配置。有关信息,请参阅 配置数据加密。此部分中所述的控制台说明适用于 4.8.0 之前的发布版。如果您使用 AWS CLI 配置后续版本中的集群配置和安全配置中的 Amazon S3 加密,则安全配置将覆盖集群配置。

在创建集群时,您可以使用控制台或通过 AWS CLI 或 EMR 开发工具包使用 emrfs-site 分类属性为 Amazon S3 中的 EMRFS 数据指定服务器端加密 (SSE) 或客户端加密 (CSE)。Amazon S3 SSE 和 CSE 是互斥的;您可以任选其一,但不能同时选择两者。

有关 AWS CLI 说明,请参阅加密类型的相应部分。

使用 AWS Management Console指定 EMRFS 加密选项

  1. Open the Amazon EMR console at https://console.amazonaws.cn/elasticmapreduce/.

  2. Choose Create cluster, Go to advanced options.

  3. 选择 Release 4.7.2 或更早版本。

  4. Software and Steps 选择适用于您的应用程序的其他选项,然后选择 Next

  5. HardwareGeneral Cluster Settings 窗格中选择适用于您的应用程序的设置。

  6. Security 窗格上的 Authentication and encryption 下,选择要使用的 S3 Encryption (with EMRFS) 选项。

    注意

    在使用 Amazon EMR 发布版 4.4 或更早版本时,S3 server-side encryption with KMS Key Management (SSE-KMS) 不可用。

  7. 选择适用于您的应用程序的其他选项,然后选择 Create Cluster

使用 AWS KMS 客户主密钥 (CMK) 进行 EMRFS 加密

必须在 Amazon EMR 群集实例和 EMRFS 所用的 Amazon S3 存储桶所在的区域中创建 AWS KMS 加密密钥。如果指定的密钥与用于配置群集的账户不同,则必须使用其 ARN 指定密钥。

Amazon EC2 实例配置文件的角色必须有权使用您指定的 CMK。Amazon EMR 中的实例配置文件的默认角色是 EMR_EC2_DefaultRole。如果您对实例配置文件使用其他角色,或使用 IAM 角色向 Amazon S3 发出 EMRFS 请求,请确保根据需要将每个角色添加为密钥用户。这将为该角色授予使用 CMK 的权限。有关更多信息,请参阅 AWS Key Management Service Developer Guide 中的使用密钥策略以及使用默认 IAM 角色和托管策略尽管您可以将 AWS KMS 客户主密钥 (CMK) 用于 Amazon S3 数据加密 (就像用于本地磁盘加密一样)。还是建议您使用单独的密钥。

您可以使用 AWS Management Console将实例配置文件或 EC2 实例配置文件添加到指定的 AWS KMS CMK 的密钥用户列表中,也可以使用 AWS CLI 或 AWS 软件开发工具包附加适当的密钥策略。

以下过程介绍如何使用 AWS Management Console 将默认 EMR 实例配置文件 EMR_EC2_DefaultRole 添加为密钥用户。它假定您已创建一个 CMK。要创建新 CMK,请参阅 AWS Key Management Service Developer Guide 中的创建密钥

将 Amazon EMR 的 EC2 实例配置文件添加到加密密钥用户列表中

  1. Sign in to the AWS Management Console and open the AWS Identity and Access Management (IAM) console at https://console.amazonaws.cn/iam/.

  2. In the left navigation pane, choose Encryption keys.

  3. For Region, choose the appropriate AWS Region. Do not use the region selector in the navigation bar (top right corner).

  4. 选择要修改的 CMK 的别名。

  5. 在密钥详细信息页面的 Key Users 下,选择 Add

  6. Attach 对话框中,选择适当的角色。默认角色的名称为 EMR_EC2_DefaultRole

  7. 选择 Attach

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。

使用 AWS CLI 创建启用了 SSE-S3 的集群

  • 键入以下命令:

    aws emr create-cluster --release-label emr-4.7.2 or earlier \ --instance-count 3 --instance-type m4.large --emrfs Encryption=ServerSide

您也可以通过在 emrfs-site 属性中将 fs.s3.enableServerSideEncryption 属性设置为 true 来启用 SSE-S3。请参阅下面的 SSE-KMS 示例并忽略密钥 ID 的属性。

使用 AWS CLI 创建启用了 SSE-KMS 的集群

注意

SSE-KMS 仅在 Amazon EMR 发布版 4.5.0 及更高版本中可用。

  • 键入以下 AWS CLI 命令可创建带 SSE-KMS 的集群,其中 keyID 是 AWS KMS 客户主密钥 (CMK),例如 a4567b8-9900-12ab-1234-123a45678901

    aws emr create-cluster --release-label emr-4.7.2 or earlier --instance-count 3 \ --instance-type m4.large --use-default-roles \ --emrfs Encryption=ServerSide,Args=[fs.s3.serverSideEncryption.kms.keyId=keyId]

    --OR--

    使用 emrfs-site 分类键入以下 AWS CLI 命令,并为配置 JSON 文件提供类似于以下示例中的 myConfig.json 的所示内容:

    aws emr create-cluster --release-label emr-4.7.2 or earlier --instance-count 3 --instance-type m4.large --applications Name=Hadoop --configurations file://myConfig.json --use-default-roles

    myConfig.json 的示例内容:

    [ { "Classification":"emrfs-site", "Properties": { "fs.s3.enableServerSideEncryption": "true", "fs.s3.serverSideEncryption.kms.keyId":"a4567b8-9900-12ab-1234-123a45678901" } } ]

SSE-S3 和 SSE-KMS 的配置属性

可使用 emrfs-site 配置分类来配置这些属性。SSE-KMS 仅在 Amazon EMR 发布版 4.5.0 及更高版本中可用。

属性 默认值 描述
fs.s3.enableServerSideEncryption false

设置为 true 时,使用服务器端加密对 Amazon S3 中存储的对象进行加密。如果未指定密钥,则使用 SSE-S3。

fs.s3.serverSideEncryption.kms.keyId 不适用

指定 AWS KMS 密钥 ID 或 ARN。如果未指定密钥,则使用 SSE-KMS。