

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 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) AWS CLI 或用戶端加密 (CSE)。Amazon S3 SSE 和 CSE 互斥；您可以選擇其中之一，但無法同時選擇。

如需 AWS CLI 說明，請參閱下方適用於加密類型的適當區段。

**使用 指定 EMRFS 加密選項 AWS 管理主控台**

1. 導覽至新的 Amazon EMR 主控台，然後從側邊導覽選取**切換至舊主控台**。如需有關切換至舊主控台時預期情況的詳細資訊，請參閱[使用舊主控台](https://docs.aws.amazon.com/emr/latest/ManagementGuide/whats-new-in-console.html#console-opt-in)。

1. 選擇 **Create cluster (建立叢集)**，然後選擇 **Go to advanced options (前往進階選項)**。

1. 選擇 4.7.2 或之前的 **Release (版本)**。

1. 選擇適用於應用程式的 **Software and Steps (軟體和步驟)** 的其他選項，然後選擇 **Next (下一步)**。

1. 選擇在 **Hardware (硬體)** 和 **General Cluster Settings (一般叢集設定)** 窗格中適用於您的應用程式的設定。

1. 在 **Security (安全)** 窗格上，在 **Authentication and encryption (身分驗證和加密)** 下，選取要使用的 **S3 Encryption (with EMRFS) (S3 加密 (搭配 EMRFS))**。
**注意**  
**使用 KMS 金鑰管理的 S3 伺服器端加密** (SSE-KMS) 在使用 Amazon EMR 發行版本 4.4 或更早版本時無法使用。
   + 如果您選擇使用 **AWS 金鑰管理**的選項，請選擇 **AWS KMS 金鑰 ID**。如需詳細資訊，請參閱[使用 AWS KMS keys 進行 EMRFS 加密](#emr-emrfs-awskms)。
   + 如果您選擇 **S3 client-side encryption with custom materials provider (S3 用戶端加密搭配自訂資料供應商)**，請提供 **Class name (類別名稱)** 和 **JAR location (JAR 位置)**。如需詳細資訊，請參閱[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 開發人員指南》**中的[使用金鑰政策](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-default-allow-users)和[設定向 Amazon S3 請求使用 EMRFS 的 IAM 角色](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-emrfs-iam-roles.html)。

您可以使用 AWS 管理主控台 將執行個體描述檔或 EC2 執行個體描述檔新增至指定 KMS 金鑰的金鑰使用者清單，也可以使用 AWS CLI 或 AWS SDK 連接適當的金鑰政策。

請記住，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 金鑰為對稱或非對稱的說明，請參閱[識別對稱和非對稱 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：//[https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms) 的 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
  ```

您也可以透過在 `emrfs-site` 屬性中將 fs.s3.enableServerSideEncryption 屬性設定為 true 來啟用 SSE-S3。請參閱以下 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 及更新版本中使用。


| 屬性  | 預設值 | Description  | 
| --- | --- | --- | 
| fs.s3.enableServerSideEncryption | false | 設定為 **true** 時，會使用伺服器端加密對儲存在 Amazon S3 中的物件加密。如果沒有指定金鑰，則會使用 SSE-S3。 | 
| fs.s3.serverSideEncryption.kms.keyId | n/a | 指定 AWS KMS 金鑰 ID 或 ARN。如果已指定金鑰，則會使用 SSE-KMS。 | 