

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

# 使用 EMRFS 属性指定 Amazon S3 加密
<a name="emr-emrfs-encryption"></a>

**重要**  
从 Amazon EMR 发行版 4.8.0 开始，您可以使用安全配置以更轻松的方式应用安全设置，并获得更多选项。建议您使用安全配置。有关更多信息，请参阅[配置数据加密](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-create-security-configuration.html#emr-security-configuration-encryption)。此部分中所述的控制台说明适用于 4.8.0 之前的版本。如果您使用在 AWS CLI 集群配置和后续版本的安全配置中配置 Amazon S3 加密，则安全配置将覆盖集群配置。

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

有关 AWS CLI 说明，请参阅下面与您的加密类型对应的部分。

**要指定 EMRFS 加密选项，请使用 AWS 管理控制台**

1. 导航到 Amazon EMR 新控制台，然后从侧面导航栏中选择**切换到旧控制台**。有关切换到旧控制台后预期情况的更多信息，请参阅 [Using the old console](https://docs.aws.amazon.com/emr/latest/ManagementGuide/whats-new-in-console.html#console-opt-in)。

1. 依次选择 **Create cluster (创建集群)**、**Go to advanced options (转到高级选项)**。

1. 选择 **Release (版本)** 4.7.2 或更早版本。

1. 为 **Software and Steps (软件和步骤)** 选择适用于您的应用程序的其它选项，然后选择 **Next (下一步)**。

1. 在 **Hardware (硬件)** 和 **General Cluster Settings (常规集群设置)** 窗格中选择适用于您的应用程序的设置。

1. 在 **Security (安全)** 窗格上的 **Authentication and encryption (身份验证和加密)** 下，选择要使用的 **S3 Encryption (with EMRFS)** 选项。
**注意**  
在使用 Amazon EMR 发行版 4.4 或更早版本时，**S3 server-side encryption with KMS Key Management (利用 KMS Key Management 进行 S3 服务器端加密)**（SSE-KMS）不可用。
   + 如果您选择一个使用 **AWS Key Management** 的选项，请选择一个 **AWS KMS Key ID**。有关更多信息，请参阅[用 AWS KMS keys 于 EMRFS 加密](#emr-emrfs-awskms)。
   + 如果您选择 **S3 client-side encryption with custom materials provider (利用自定义材料提供程序进行 S3 客户端加密)**，请提供 **Class name (类名称)** 和 **JAR location (AR 位置)**。有关更多信息，请参阅[Amazon S3 客户端加密](emr-emrfs-encryption-cse.md)。

1. 选择适用于您的应用程序的其它选项，然后选择 **Create Cluster (创建集群)**。

## 用 AWS KMS keys 于 EMRFS 加密
<a name="emr-emrfs-awskms"></a>

 AWS KMS 加密密钥必须与您的 Amazon EMR 集群实例和与 EMRFS 一起使用的 Amazon S3 存储桶所在的区域创建。如果指定的密钥没有位于用于配置集群的账户中，则必须使用它的 ARN 指定密钥。

Amazon EC2 实例配置文件的角色必须具有使用您指定的 KMS 密钥的权限。Amazon EMR 中实例配置文件的默认角色是 `EMR_EC2_DefaultRole`。如果您对实例配置文件使用不同的角色，或者对 Amazon S3 的 EMRFS 请求使用 IAM 角色，请确保根据需要将每个角色添加为密钥用户。这会为该角色授予使用该 KMS 密钥的权限。有关更多信息，请参阅*《AWS Key Management Service 开发人员指南》*和[为向 Amazon S3 发出的 EMRFS 请求配置 IAM 角色](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-emrfs-iam-roles.html)中的[使用密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-default-allow-users)。

您可以使用将您的实例配置文件或 EC2 实例配置文件 AWS 管理控制台 添加到指定 KMS 密钥的密钥用户列表中，也可以使用 AWS CLI 或 AWS 软件开发工具包来附加相应的密钥策略。

请注意 Amazon EMR 仅支持[对称 KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#symmetric-cmks)。不能使用[非对称 KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html#asymmetric-cmks)加密 Amazon EMR 集群中的静态数据。要获取确定 KMS 密钥是对称还是非对称的帮助，请参阅[识别对称密钥和非对称密钥](https://docs.aws.amazon.com/kms/latest/developerguide/find-symm-asymm.html)。

以下步骤介绍了如何使用 AWS 管理控制台将 Amazon EMR 实例配置文件 `EMR_EC2_DefaultRole` 作为*密钥用户*添加。它假定您已创建一个 KMS 密钥。要创建新的 KMS 密钥，请参阅*《AWS Key Management Service 开发人员指南》*中的[创建密钥](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。

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

1. 登录 AWS 管理控制台 并在 [https://console.aws.amazon.com/km](https://console.aws.amazon.com/kms) s 处打开 AWS Key Management Service (AWS KMS) 控制台。

1. 要更改 AWS 区域，请使用页面右上角的区域选择器。

1. 选择要修改的 KMS 密钥的别名。

1. 在密钥详细信息页面的 **Key Users (密钥用户)** 下，选择 **Add (添加)**。

1. 在 **Add key users (添加密钥用户)** 对话框中，选择适当的角色。默认角色的名称为 `EMR_EC2_DefaultRole`。

1. 选择**添加**。

## Amazon S3 服务器端加密
<a name="emr-emrfs-encryption-sse"></a>

默认情况下，所有 Amazon S3 存储桶都配置了加密，所有上传到 S3 存储桶的新对象都会自动静态加密，Amazon S3 在向磁盘写入数据时会在对象级别对数据进行加密，并在访问数据时对其进行解密。有关 SSE 的更多信息，请参阅*《Amazon Simple Storage Service 用户指南》*中的[使用服务器端加密保护数据](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)。

在 Amazon EMR 中指定 SSE 时，可以在两个不同的密钥管理系统之间进行选择：
+ **SSE-S3**：Amazon S3 为您管理密钥。
+ **SSE-KMS** — 您可以使用 AWS KMS key 来设置适用于 Amazon EMR 的策略。有关 Amazon EMR 密钥要求的更多信息，请参阅[AWS KMS keys 用于](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-encryption-enable.html#emr-awskms-keys)加密。

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

**要创建启用了 SSE-S3 的集群，请使用 AWS CLI**
+ 键入以下命令：

  ```
  aws emr create-cluster --release-label {{emr-4.7.2 or earlier}} \
  --instance-count 3 --instance-type m5.xlarge --emrfs Encryption=ServerSide
  ```

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

**要创建启用了 SSE-KMS 的集群，请使用 AWS CLI**
**注意**  
SSE-KMS 仅在 Amazon EMR 发行版 4.5.0 及更高版本中可用。
+ 键入以下 AWS CLI 命令创建带有 SSE-KMS 的集群，其中{{keyID}}是 AWS KMS key，例如：{{a4567b8-9900-12ab-1234-123a45678901}}

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

  **或者**

  使用`emrfs-site`分类键入以下 AWS CLI 命令，并提供包含内容的配置 JSON 文件，如下例`myConfig.json`所示：

  ```
  aws emr create-cluster --release-label {{emr-4.7.2 or earlier}} --instance-count 3 --instance-type {{m5.xlarge}} {{--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 的配置属性
<a name="emr-emrfs-encryption-site-sse-properties"></a>

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


| 属性  | 默认 值 | 说明  | 
| --- | --- | --- | 
| fs.s3.enableServerSideEncryption | false | 设置为 **true** 时，使用服务器端加密对 Amazon S3 中存储的对象进行加密。如果未指定密钥，则使用 SSE-S3。 | 
| fs.s3.serverSideEncryption.kms.keyId | n/a | 指定密 AWS KMS 钥 ID 或 ARN。如果未指定密钥，则使用 SSE-KMS。 | 