

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

# 使用 Amazon EMR 加密靜態和傳輸中的資料
<a name="emr-data-encryption"></a>

資料加密有助於防止未經授權的使用者讀取叢集上的資料和相關的資料儲存體系統。這包括儲存到持久性媒體的資料 (稱為*靜態*資料)，以及透過網路傳送時可能會被攔截的資料 (稱為*傳輸中*資料)。

從 Amazon EMR 4.8.0 版開始，您可以使用 Amazon EMR 安全組態設定，更輕鬆地進行叢集的資料加密設定。安全組態提供的設定，可讓 Amazon Elastic Block Store (Amazon EBS) 磁碟區和 Amazon S3 上 EMRFS 中的傳輸中的資料及靜態資料，獲得安全的保障。

或者，從 Amazon EMR 發行版本 4.1.0 和更新版本開始，您可選擇在 HDFS 中設定透明加密，此加密不是使用安全組態進行設定。如需詳細資訊，請參閱《Amazon EMR 版本指南》**中的[在 Amazon EMR 上 HDFS 中的透明加密](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-encryption-tdehdfs.html)。

**Topics**
+ [Amazon EMR 的加密選項](emr-data-encryption-options.md)
+ [使用 EMR WAL 服務的客戶 KMS 金鑰進行靜態加密](encryption-at-rest-kms.md)
+ [使用 Amazon EMR 建立用於資料加密的金鑰和憑證](emr-encryption-enable.md)
+ [了解傳輸中加密](emr-encryption-support-matrix.md)

# Amazon EMR 的加密選項
<a name="emr-data-encryption-options"></a>

透過 Amazon EMR 4.8.0 版及更高版本，您可以使用安全組態來指定加密靜態資料、傳輸中資料或兩者的設定。啟用靜態資料加密時，您可以選擇對在 Amazon S3 的 EMRFS 資料，在本機磁碟的資料或兩者進行加密。您建立的每個安全組態都儲存在 Amazon EMR 中，而非叢集組態中，因此無論何時建立叢集，都可以輕鬆重複使用組態來指定資料加密設定。如需詳細資訊，請參閱[使用 Amazon EMR 主控台或使用 建立安全組態 AWS CLI](emr-create-security-configuration.md)。

下圖顯示安全組態提供的不同資料加密選項。

![\[Amazon EMR 提供數種傳輸中和靜態加密選項。\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/images/emr-encryption-options.png)


以下加密選項也可供使用，且未使用安全組態來設定：
+ 或者，您可以使用 Amazon EMR 4.1.0 版及更新版本，來選擇在 HDFS 中設定透明加密。如需詳細資訊，請參閱《Amazon EMR 版本指南》**中的[在 Amazon EMR 上 HDFS 中的透明加密](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-encryption-tdehdfs.html)。
+ 如果您使用的是不支援安全組態的 Amazon EMR 發行版本，可以在 Amazon S3 中手動設定 EMRFS 資料的加密。如需詳細資訊，請參閱[使用 EMRFS 屬性指定 Amazon S3 加密](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-emrfs-encryption.html)。
+  如果您使用的是早於 5.24.0 的 Amazon EMR 版本，則只有在使用自訂 AMI 時，才支援加密的 EBS 根裝置磁碟區。如需詳細資訊，請參閱《Amazon EMR 管理指南》**中的[使用加密的 Amazon EBS 根裝置磁碟區建立自訂 AMI](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-custom-ami.html#emr-custom-ami-encrypted)。

**注意**  
從 Amazon EMR 5.24.0 版開始，當您將 指定 AWS KMS 為金鑰提供者時，您可以使用安全組態選項來加密 EBS 根裝置和儲存磁碟區。如需詳細資訊，請參閱[本機磁碟加密](#emr-encryption-localdisk)。

資料加密需要金鑰和憑證。安全組態可讓您靈活地選擇多個選項，包括 管理的金鑰 AWS Key Management Service、Amazon S3 管理的金鑰，以及您提供的自訂提供者的金鑰和憑證。使用 AWS KMS 做為金鑰提供者時， 會收取儲存和使用加密金鑰的費用。如需詳細資訊，請參閱 [AWS KMS 定價](https://aws.amazon.com/kms/pricing/)。

指定加密選項前，請決定您想使用的金鑰和憑證管理系統，才能先建立金鑰和憑證或您指定為加密設定一部分的自訂提供者。

## Amazon S3 中 EMRFS 資料的靜態加密
<a name="emr-encryption-s3"></a>

Amazon S3 加密適用於從 Amazon S3 讀取和寫入的 Amazon EMR 檔案系統 (EMRFS) 物件。啟用靜態加密時，會指定 Amazon S3 伺服器端加密 (SSE) 或用戶端加密 (CSE) 作為**預設加密模式**。或者，您可以使用 **Per bucket encryption overrides (每個儲存貯體加密覆寫)** 為個別儲存貯體指定不同的加密方法。無論是否啟用了 Amazon S3 加密功能，Transport Layer Security (TLS) 都會將 EMR 叢集節點和 Amazon S3 之間傳送中的 EMRFS 物件加密。如需 Amazon S3 加密的詳細資訊，請參閱《*Amazon Simple Storage Service 使用者指南*》中的[使用加密保護資料](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingEncryption.html)。

**注意**  
當您使用 時 AWS KMS， 會收取儲存和使用加密金鑰的費用。如需詳細資訊，請參閱[AWS KMS 定價](https://aws.amazon.com/kms/pricing/)。

### Amazon S3 伺服器端加密
<a name="emr-encryption-s3-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。

### Amazon S3 用戶端加密
<a name="emr-encryption-s3-cse"></a>

使用 Amazon S3 用戶端加密，Amazon S3 加密及解密會在您 EMR 叢集上的 EMRFS 用戶端中進行。物件在上傳至 Amazon S3 之前會先加密，並在下載後解密。您指定的提供者會提供用戶端使用的加密金鑰。用戶端可以使用 AWS KMS (CSE-KMS) 提供的金鑰或提供用戶端根金鑰 (CSE-C) 的自訂 Java 類別。CSE-KMS 和 CSE-C 之間的加密細節略有不同，具體取決於指定的提供者和要解密或加密之物件的中繼資料。如需有關這些差異的詳細資訊，請參閱《Amazon Simple Storage Service 使用者指南》**中的[使用用戶端加密保護資料](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryption.html)。

**注意**  
Amazon S3 CSE 只能確保與 Amazon S3 交換的 EMRFS 資料經過加密；而不會加密叢集執行個體磁碟區上的所有資料。此外，由於 Hue 不使用 EMRFS，因此 Hue S3 檔案瀏覽器寫入到 Amazon S3 的物件不會被加密。

## Amazon EMR WAL 中資料的靜態加密
<a name="emr-encryption-wal"></a>

當您設定預先寫入記錄 (WAL) 的伺服器端加密 (SSE) 時，Amazon EMR 會加密靜態資料。當您在 Amazon EMR 中指定 SSE 時，您可以從兩個不同的金鑰管理系統中選擇：

**SSE-EMR-WAL**  
Amazon EMR 會為您管理金鑰。根據預設，Amazon EMR 會使用 加密您存放在 Amazon EMR WAL 中的資料SSE-EMR-WAL。

**SSE-KMS-WAL**  
您可以使用 AWS KMS 金鑰來設定套用至 Amazon EMR WAL 的政策。如需使用客戶 KMS 金鑰為 EMR WAL 設定靜態加密的詳細資訊，請參閱[使用 EMR WAL 服務的客戶 KMS 金鑰進行靜態加密](https://docs.aws.amazon.com/emr/latest/ManagementGuide/encryption-at-rest-kms.html)。

**注意**  
當您透過 Amazon EMR 啟用 WAL 時，您無法將自己的金鑰與 SSE 搭配使用。如需詳細資訊，請參閱 [Amazon EMR 的預先寫入日誌 (WAL)](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hbase-wal.html)。

## 本機磁碟加密
<a name="emr-encryption-localdisk"></a>

當您使用 Amazon EMR 安全組態啟用本機磁碟加密時，下列機制會一起運作來加密本機磁碟。

### 開放原始碼 HDFS 加密
<a name="w2aac30c19c13c11c23b5"></a>

HDFS 會在分散式處理期間，在叢集執行個體之間交換資料。它也會讀取和寫入資料至執行個體存放磁碟區以及連接到執行個體的 EBS 磁碟區。您啟用本機磁碟加密時，會啟動以下的開放原始碼 Hadoop 加密選項：
+ [安全 Hadoop RPC](https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SecureMode.html#Data_Encryption_on_RPC) 設定為「`Privacy`」，此選項使用 Simple Authentication Security Layer (SASL)。
+ [HDFS 區塊資料傳輸的資料加密](https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SecureMode.html#Data_Encryption_on_Block_data_transfer.)設為 `true` 並設定為使用 AES 256 加密。

**注意**  
您可以透過啟用傳輸中加密，啟動額外的 Apache Hadoop 加密。如需詳細資訊，請參閱[傳輸中加密](#emr-encryption-intransit)。這些加密設定不會啟動您可手動設定的 HDFS 透明加密。如需詳細資訊，請參閱《Amazon EMR 版本指南》**中的[在 Amazon EMR 上 HDFS 中的透明加密](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-encryption-tdehdfs.html)。

### 執行個體儲存體加密
<a name="w2aac30c19c13c11c23b7"></a>

對於使用 NVMe 型 SSD 作為執行個體儲存體磁碟區的 EC2 執行個體類型，無論 Amazon EMR 加密設定為何，都會使用 NVMe 加密。如需詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的 [NVMe SSD 磁碟區](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ssd-instance-store.html#nvme-ssd-volumes)。對於其他執行個體儲存體磁碟區，當本機磁碟加密啟用時，Amazon EMR 使用 LUKS 加密執行個體儲存體磁碟區，無論 EBS 磁碟區是使用 EBS 加密還是 LUKS 來加密。

### EBS 磁碟區加密
<a name="w2aac30c19c13c11c23b9"></a>

如果您在帳戶預設啟用 EBS 磁碟區 Amazon EC2 加密的區域中建立叢集，即使本機磁碟未啟用加密，EBS 磁碟區仍會加密。如需詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的[預設加密](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#encryption-by-default)。當安全組態中啟用本機磁碟加密時，Amazon EMR 設定會優先於叢集 EC2 執行個體的 Amazon EC2 預設加密設定。

下列選項可用於使用安全組態加密 EBS 磁碟區：
+ **EBS 加密** – 從 Amazon EMR 5.24.0 版開始，您可以選擇啟用 EBS 加密。EBS 加密選項會加密 EBS 根設備磁碟區和連接的儲存磁碟區。只有在您將 指定 AWS Key Management Service 為金鑰提供者時，才能使用 EBS 加密選項。建議使用 EBS 加密。
+ **LUKS 加密** – 如果您針對 Amazon EBS 磁碟區選擇使用 LUKS 加密，則 LUKS 加密只會套用至附接的儲存磁碟區，而不會套用至根裝置磁碟區。如需關於 LUKS 加密的詳細資訊，請參閱 [ 磁碟上 LUKS 規格](https://gitlab.com/cryptsetup/cryptsetup/wikis/Specification)。

  對於您的金鑰提供者，您可以使用適用於 Amazon EMR AWS KMS key 的政策，或提供加密成品的自訂 Java 類別來設定 。當您使用 時 AWS KMS， 會收取儲存和使用加密金鑰的費用。如需詳細資訊，請參閱 [AWS KMS 定價](https://aws.amazon.com/kms/pricing/)。

**注意**  
若要檢查您的叢集是否已啟用 EBS 加密，建議您使用 `DescribeVolumes` API 呼叫。如需詳細資訊，請參閱 [DescribeVolumes](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeVolumes.html)。在叢集上執行 `lsblk` 只會檢查 LUKS 加密的狀態，而非 EBS 加密。

## 傳輸中加密
<a name="emr-encryption-intransit"></a>

數種加密機制在使用傳輸中加密時啟用。這些是開放原始碼功能，是應用程式特定的，可能因 Amazon EMR 版本而異。若要啟用傳輸中加密，請在 Amazon EMR [使用 Amazon EMR 主控台或使用 建立安全組態 AWS CLI](emr-create-security-configuration.md)中使用 。對於啟用傳輸中加密的 EMR 叢集，Amazon EMR 會自動設定開放原始碼應用程式組態，以啟用傳輸中加密。對於進階使用案例，您可以直接設定開放原始碼應用程式組態，以覆寫 Amazon EMR 中的預設行為。如需詳細資訊，請參閱[傳輸中加密支援矩陣](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-encryption-support-matrix.html)和[設定應用程式](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps.html)。

如需傳輸中加密相關開放原始碼應用程式的詳細資訊，請參閱下列內容：
+ 當您使用安全組態啟用傳輸中加密時，Amazon EMR 會為所有支援傳輸中加密的開放原始碼應用程式端點啟用傳輸中加密。支援不同應用程式端點的傳輸中加密，因 Amazon EMR 發行版本而異。如需詳細資訊，請參閱[傳輸中加密支援矩陣](https://docs.aws.amazon.com/)。
+ 您可以覆寫開放原始碼組態，以執行下列動作：
  + 如果您的使用者提供的 TLS 憑證不符合要求，請停用 TLS 主機名稱驗證
  + 根據您的效能和相容性需求，停用特定端點的傳輸中加密
  + 控制要使用的 TLS 版本和密碼套件。

  您可以在[傳輸中加密支援矩陣](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-encryption-support-matrix.html)中找到有關應用程式特定組態的詳細資訊
+ 除了使用安全組態啟用傳輸中加密之外，某些通訊通道還需要額外的安全組態，才能啟用傳輸中加密。例如，某些開放原始碼應用程式端點使用 Simple Authentication and Security Layer (SASL) 進行傳輸中加密，這需要在 EMR 叢集的安全組態中啟用 Kerberos 身分驗證。若要進一步了解這些端點，請參閱[傳輸中加密支援矩陣](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-encryption-support-matrix.html)。
+ 我們建議您使用支援 TLS v1.2 或更高版本的軟體。EC2 上的 Amazon EMR 會隨附預設 Corretto JDK 分佈，以決定在 Java 上執行的開放原始碼網路允許哪些 TLS 版本、密碼套件和金鑰大小。目前，大多數開放原始碼架構會針對 Amazon EMR 7.0.0 及更高版本強制執行 TLS v1.2 或更高版本。這是因為大多數開放原始碼架構在適用於 Amazon EMR 7.0.0 及更高版本的 Java 17 上執行。較舊的 Amazon EMR 發行版本可能因為使用較舊的 Java 版本而支援 TLS v1.0 和 v1.1，但 Corretto JDK 可能會變更 Java 支援的 TLS 版本，這可能會影響現有的 Amazon EMR 發行版本。

您可透過下列兩種方法之一指定用於傳輸中加密的加密成品：提供您上傳到 Amazon S3 的憑證壓縮檔案，或參考提供加密成品的自訂 Java 類別。如需詳細資訊，請參閱[使用 Amazon EMR 加密提供傳輸中資料的加密憑證](emr-encryption-enable.md#emr-encryption-certificates)。

# 使用 EMR WAL 服務的客戶 KMS 金鑰進行靜態加密
<a name="encryption-at-rest-kms"></a>

EMR 預先寫入日誌 (WAL) 提供客戶 KMS encryption-at-rest支援。Amazon EMR WAL 如何與 整合的高階詳細資訊如下 AWS KMS：

在下列操作 AWS 期間，EMR 預先寫入日誌 (WAL) 會與 互動：`CreateWAL`、`AppendEdit`、`ArchiveWALCheckPoint``CompleteWALFlush``DeleteWAL`、`GetCurrentWALTime`、、`ReplayEdits`、，`EMR_EC2_DefaultRole`根據預設，`TrimWAL`透過 叫用任何先前列出的操作時，EMR WAL 會`GenerateDataKey`針對 KMS 金鑰進行 `Decrypt`和 。

## 考量事項
<a name="encryption-at-rest-considerations"></a>

使用 EMR WAL AWS KMS 的 型加密時，請考慮下列事項：
+ 加密組態無法在建立 EMR WAL 之後變更。
+ 當您使用 KMS 加密搭配您自己的 KMS 金鑰時，金鑰必須與 Amazon EMR 叢集位於相同的區域中。
+ 您有責任維護所有必要的 IAM 許可，建議您不要在 WAL 生命週期內撤銷所需的許可。否則，將導致非預期的失敗案例，例如無法刪除 EMR WAL，因為關聯的加密金鑰不存在。
+ 使用 AWS KMS 金鑰會產生相關費用。如需詳細資訊，請參閱 [AWS Key Management Service 定價](https://aws.amazon.com/kms/pricing/)。

## 所需的 IAM 許可
<a name="encryption-at-rest-required-iam-permissions"></a>

若要使用客戶 KMS 金鑰來加密 EMR WAL 靜態，您需要確保為 EMR WAL 用戶端角色和 EMR WAL 服務主體 設定適當的許可`emrwal.amazonaws.com`。

### EMR WAL 用戶端角色的許可
<a name="encryption-at-rest-permissions-client-role"></a>

以下是 EMR WAL 用戶端角色所需的 IAM 政策：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey*"
      ],
      "Resource": [
        "*"
      ],
      "Sid": "AllowKMSDecrypt"
    }
  ]
}
```

------

根據`EMR_EC2_DefaultRole`預設，EMR 叢集上的 EMR WAL 用戶端將使用 。如果您針對 EMR 叢集中的執行個體描述檔使用不同的角色，請確定每個角色都有適當的許可。

如需管理角色政策的詳細資訊，請參閱[新增和移除 IAM 身分許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。

### KMS 金鑰政策的許可
<a name="encryption-at-rest-permissions-kms-key-policy"></a>

您需要在 KMS 政策中提供 EMR WAL 用戶端角色和 EMR WAL 服務和`Decrypt``GenerateDataKey*`許可。如需金鑰政策管理的詳細資訊，請參閱 [KMS 金鑰政策](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey*"
      ],
      "Resource": [
        "arn:aws:kms:*:123456789012:key/*"
      ],
      "Sid": "AllowKMSDecrypt"
    }
  ]
}
```

------

如果您變更預設角色，程式碼片段中指定的角色可能會變更。

## 監控 Amazon EMR WAL 與 的互動 AWS KMS
<a name="encryption-at-rest-monitoring-emr-wal-kms"></a>

### Amazon EMR WAL 加密內容
<a name="encryption-at-rest-encryption-context"></a>

加密內容是一組金鑰/值對，其中包含任意的非秘密資料。當您在加密資料的請求中包含加密內容時， 會以 AWS KMS 加密方式將加密內容繫結至加密的資料。若要解密資料，您必須傳遞相同的加密內容。

在其 [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) 和 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 請求中 AWS KMS，Amazon EMR WAL 使用加密內容搭配一個識別 EMR WAL 名稱的名稱/值對。

```
"encryptionContext": {
    "aws:emrwal:walname": "111222333444555-testworkspace-emrwalclustertest-emrwaltestwalname"
}
```

您可以使用加密內容來識別稽核記錄和日誌中的這些密碼編譯操作，例如 AWS CloudTrail 和 [Amazon CloudWatch Logs](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)，並做為政策和授權的授權條件。

# 使用 Amazon EMR 建立用於資料加密的金鑰和憑證
<a name="emr-encryption-enable"></a>

使用安全組態指定加密選項之前，決定您想要使用的金鑰和加密成品提供者。例如，您可以使用 AWS KMS 或您建立的自訂提供者。接著，如本區段所述，建立金鑰或金鑰提供者。

## 提供用於加密靜態資料的金鑰
<a name="emr-encryption-create-keys"></a>

您可以在 Amazon EMR 中使用 AWS Key Management Service (AWS KMS) 或自訂金鑰提供者進行靜態資料加密。當您使用 時 AWS KMS， 會收取儲存和使用加密金鑰的費用。如需詳細資訊，請參閱 [AWS KMS 定價](https://aws.amazon.com/kms/pricing/)。

本主題提供金鑰政策的詳細資訊，KMS 金鑰搭配 Amazon EMR 使用時會用到，並提供準則和程式碼範例，以說明如何針對 Amazon S3 加密編寫自訂金鑰提供者類別。如需有關建立金鑰的詳細資訊，請參閱《AWS Key Management Service 開發人員指南》**中的[建立金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。

### 使用 AWS KMS keys 進行加密
<a name="emr-awskms-keys"></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. 選擇**新增**。

### 為 KMS 金鑰提供額外的許可來啟用 EBS 加密
<a name="emr-awskms-ebs-encryption"></a>

從 Amazon EMR 5.24.0 版開始，您可以使用安全組態選項來加密 EBS 根裝置和儲存磁碟區。若要啟用此類選項，您必須指定 AWS KMS 做為金鑰提供者。此外，您必須授予服務角色`EMR_DefaultRole`使用您指定 AWS KMS key 的許可。

您可以使用 AWS 管理主控台 將服務角色新增至指定 KMS 金鑰的金鑰使用者清單，或使用 AWS CLI 或 AWS SDK 連接適當的金鑰政策。

下列程序說明如何使用 AWS 管理主控台 將預設 Amazon EMR 服務角色新增`EMR_DefaultRole`為*金鑰使用者*。這裡假設您已建立 KMS 金鑰。若要建立新的 KMS 金鑰，請參閱《AWS Key Management Service 開發人員指南》**中的[建立金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。

**將 Amazon EMR 服務角色新增至加密金鑰使用者清單**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms) 的 AWS Key Management Service (AWS KMS) 主控台。

1. 若要變更 AWS 區域，請使用頁面右上角的區域選擇器。

1. 在左側邊欄選擇**客戶受管金鑰**。

1. 選取要修改的 KMS 金鑰別名。

1. 在 **Key Users (金鑰使用者)** 下的金鑰詳細資訊頁面上，選擇 **Add (新增)**。

1. 在**新增金鑰使用者**區段中，選取適當的角色。Amazon EMR 預設服務角色的名稱為 `EMR_DefaultRole`。

1. 選擇**新增**。

### 建立自訂金鑰提供者
<a name="emr-custom-keys"></a>

使用安全組態時，您必須為本機磁碟加密和 Amazon S3 加密指定不同的提供者類別名稱。自訂金鑰提供者的需求取決於您是否使用本機磁碟加密和 Amazon S3 加密，以及 Amazon EMR 發行版本。

根據您在建立自訂金鑰提供者時使用的加密類型，應用程式也必須實作不同的 EncryptionMaterialsProvider 介面。適用於 Java 的 AWS 開發套件 1.11.0 版及更新版本提供這兩個界面。
+ 若要實作 Amazon S3 加密，請使用 [ com.amazonaws.services.s3.model.EncryptionMaterialsProvider 介面](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/model/EncryptionMaterialsProvider.html)。
+ 若要實作本機磁碟加密，請使用 [ com.amazonaws.services.elasticmapreduce.spi.security.EncryptionMaterialsProvider 介面](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/elasticmapreduce/spi/security/EncryptionMaterialsProvider.html)。

您可以使用任何策略來提供實作的加密資料。例如，您可以選擇提供靜態加密資料，或與更複雜的金鑰管理系統整合。

如果您使用 Amazon S3 加密，則必須將加密演算法 **AES/GCM/NoPadding** 用於自訂加密資料。

如果您使用的是本機磁碟加密，則用於自訂加密資料的加密演算法會因 EMR 版本而有所不同。對於 Amazon EMR 7.0.0 及更低版本，您必須使用 **AES/GCM/NoPadding**。對於 Amazon EMR 7.1.0 及更高版本，您必須使用 **AES**。

EncryptionMaterialsProvider 類別會透過加密內容取得加密資料。Amazon EMR 會在執行期填入加密內容資訊，以協助呼叫者判斷要傳回的正確加密資料。

**Example 範例：透過 EMRFS 使用自訂金鑰提供者進行 Amazon S3 加密**  
當 Amazon EMR 從 EncryptionMaterialsProvider 類別擷取加密資料以執行加密時，EMRFS 會選擇性地將 materialsDescription 引數填入兩個欄位：物件的 Amazon S3 URI 和叢集的 JobFlowId (可供 EncryptionMaterialsProvider 類別使用以選擇性地傳回加密資料)。  
例如，提供者可能會針對不同的 Amazon S3 URI 字首傳回不同的金鑰。這是傳回的加密資料的描述，最終會與 Amazon S3 物件一起儲存，而不是 EMRFS 產生並傳遞給提供者的 materialsDescription 值。解密 Amazon S3 物件時，加密資料描述會傳遞至 EncryptionMaterialsProvider 類別，以便再次選擇性地傳回相符的金鑰以解密物件。  
下面提供了 EncryptionMaterialsProvider 參考實作。另一個自訂提供者 [EMRFSRSAEncryptionMaterialsProvider](https://github.com/awslabs/emr-sample-apps/tree/master/emrfs-plugins/EMRFSRSAEncryptionMaterialsProvider) 可從 GitHub 取得。  

```
import com.amazonaws.services.s3.model.EncryptionMaterials;
import com.amazonaws.services.s3.model.EncryptionMaterialsProvider;
import com.amazonaws.services.s3.model.KMSEncryptionMaterials;
import org.apache.hadoop.conf.Configurable;
import org.apache.hadoop.conf.Configuration;

import java.util.Map;

/**
 * Provides KMSEncryptionMaterials according to Configuration
 */
public class MyEncryptionMaterialsProviders implements EncryptionMaterialsProvider, Configurable{
  private Configuration conf;
  private String kmsKeyId;
  private EncryptionMaterials encryptionMaterials;

  private void init() {
    this.kmsKeyId = conf.get("my.kms.key.id");
    this.encryptionMaterials = new KMSEncryptionMaterials(kmsKeyId);
  }

  @Override
  public void setConf(Configuration conf) {
    this.conf = conf;
    init();
  }

  @Override
  public Configuration getConf() {
    return this.conf;
  }

  @Override
  public void refresh() {

  }

  @Override
  public EncryptionMaterials getEncryptionMaterials(Map<String, String> materialsDescription) {
    return this.encryptionMaterials;
  }

  @Override
  public EncryptionMaterials getEncryptionMaterials() {
    return this.encryptionMaterials;
  }
}
```

## 使用 Amazon EMR 加密提供傳輸中資料的加密憑證
<a name="emr-encryption-certificates"></a>

使用 Amazon EMR 發行版本 4.8.0 或更新版本時，對於使用安全組態的傳輸中資料加密，指定成品的選項有兩種：
+ 您可以手動建立 PEM 憑證，將這些憑證包含在 .zip 檔案內，然後在 Amazon S3 中參考此 .zip 檔案。
+ 您可以實作自訂憑證提供者為 Java 類別。您可以在 Amazon S3 中指定應用程式的 JAR 檔案，然後提供如應用程式中所宣告的提供者完整類別名稱。此類別必須實作 [ 1.11.0 版本開始提供的 ](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/elasticmapreduce/spi/security/TLSArtifactsProvider.html)TLSArtifactsProvider 適用於 Java 的 AWS SDK 界面。

Amazon EMR 會自動下載成品到叢集中的每個節點，並在稍後用於實作開放原始碼的傳輸中加密功能。如需可用選項的詳細資訊，請參閱「[傳輸中加密](emr-data-encryption-options.md#emr-encryption-intransit)」。

### 使用 PEM 憑證
<a name="emr-encryption-pem-certificate"></a>

您為傳輸中加密指定 zip 檔案時，安全組態預期該 zip 檔案中的 PEM 檔案會完全以下方所顯示的命名：


**傳輸中加密憑證**  

| 檔案名稱 | 必要/選用 | 詳細資訊 | 
| --- | --- | --- | 
| privateKey.pem | 必要 | 私有金鑰 | 
| certificateChain.pem | 必要 | 憑證鏈 | 
| trustedCertificates.pem | 選用 | 我們建議您提供不是由 Java 預設信任根憑證授權機構 (CA) 簽署的憑證，或可連結至 Java 預設信任根 CA 的中繼 CA。當您使用萬用字元憑證或停用主機名稱驗證時，我們不會重新認為您使用公有 CAs。 | 

您可能會想要設定私有金鑰 PEM 檔案為萬用字元憑證，以允許存取您叢集執行個體所在的 Amazon VPC 域。例如，如果您的叢集位於 us-east-1 (維吉尼亞北部)，您可能會選擇在憑證組態中指定常見名稱，該組態會透過在憑證主體定義中指定 `CN=*.ec2.internal`，來允許存取該叢集。如果您的叢集位於 us-west-2 (奧勒岡)，可以指定 `CN=*.us-west-2.compute.internal`。

如果加密成品中提供的 PEM 檔案沒有通用名稱中網域的萬用字元，您必須將 的值變更為 `hadoop.ssl.hostname.verifier` `ALLOW_ALL`。若要在 Amazon EMR 7.3.0 版及更高版本中執行此操作，請在將組態提交至叢集時新增 `core-site`分類。在低於 7.3.0 的版本`"hadoop.ssl.hostname.verifier": "ALLOW_ALL"`中，直接將組態新增至 `core-site.xml` 檔案。此變更是必要的，因為預設主機名稱驗證器需要不含萬用字元的主機名稱，因為叢集中的所有主機都使用它。如需有關 Amazon VPC 內 EMR 叢集組態的詳細資訊，請參閱 [在 Amazon EMR 的 VPC 中設定聯網](emr-plan-vpc-subnet.md)。

下列範例示範如何使用 [OpenSSL](https://www.openssl.org/) 產生具有 2048 位元 RSA 私有金鑰的自我簽署 X.509 憑證。金鑰可允許存取發行者在 `us-west-2` (奧勒岡) 區域中的 Amazon EMR 叢集執行個體，如 `*.us-west-2.compute.internal` 將域名稱指定為常見名稱。

也會指定選用的其他主體項目，例如國家/地區 (C)、州 (S)、地區 (L)。由於已經產生自我簽署憑證，範例中的第二個指令會將 `certificateChain.pem` 檔案複製到 `trustedCertificates.pem` 檔案。第三個指令會使用 `zip` 來建立包含憑證的 `my-certs.zip` 檔案。



**重要**  
此範例僅為概念驗證示範。自我簽署憑證並不建議使用，且可能具有安全風險。若為生產系統，請使用信任的憑證授權機構 (CA) 發行憑證。

```
$ openssl req -x509 -newkey rsa:2048 -keyout privateKey.pem -out certificateChain.pem -days 365 -nodes -subj '/C=US/ST=Washington/L=Seattle/O=MyOrg/OU=MyDept/CN=*.us-west-2.compute.internal'
$ cp certificateChain.pem trustedCertificates.pem
$ zip -r -X my-certs.zip certificateChain.pem privateKey.pem trustedCertificates.pem
```

# 了解傳輸中加密
<a name="emr-encryption-support-matrix"></a>

您可以設定 EMR 叢集來執行開放原始碼架構，例如 [Apache Spark](https://aws.amazon.com/emr/features/spark/)、[Apache Hive](https://aws.amazon.com/emr/features/hive/) 和 [Presto](https://aws.amazon.com/emr/features/presto/)。每個開放原始碼架構都有一組在叢集的 EC2 執行個體上執行的程序。每個程序都可以託管網路端點以進行網路通訊。

如果在 EMR 叢集上啟用傳輸中加密，則不同的網路端點會使用不同的加密機制。請參閱下列各節，進一步了解傳輸中加密支援的特定開放原始碼架構網路端點、相關的加密機制，以及哪些 Amazon EMR 版本新增支援。每個開放原始碼應用程式也可能有您可以變更的不同最佳實務和開放原始碼架構組態。

 對於最多的傳輸中加密涵蓋範圍，我們建議您同時啟用傳輸中加密和 Kerberos。如果您只啟用傳輸中加密，則傳輸中加密僅適用於支援 TLS 的網路端點。Kerberos 是必要的，因為某些開放原始碼架構網路端點使用 Simple Authentication and Security Layer (SASL) 進行傳輸中加密。

請注意，Amazon EMR 7.x.x 版本中不支援的任何開放原始碼架構都不會包含在內。

## Spark
<a name="emr-encryption-support-matrix-spark"></a>

當您在安全組態中啟用傳輸中加密時， `spark.authenticate` 會自動設定為 ，`true`並針對 RPC 連線使用 AES 型加密。

從 Amazon EMR 7.3.0 開始，如果您使用傳輸中加密和 Kerberos 身分驗證，則無法使用依賴 Hive 中繼存放區的 Spark 應用程式。Hive 3 修正 [HIVE-16340](https://issues.apache.org/jira/browse/HIVE-16340) 中的此問題。當開放原始碼 Spark 可以升級至 Hive 3 時，[HIVE-44114](https://issues.apache.org/jira/browse/SPARK-44114) 會完全解決此問題。同時，您可以將 `hive.metastore.use.SSL` 設定為 `false`以解決此問題。如需詳細資訊，請參閱[設定應用程式](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps.html)。

如需詳細資訊，請參閱 Apache [Spark 文件](https://spark.apache.org/docs/latest/security)中的 Spark 安全性。


| 元件 | Endpoint | 站點 | 傳輸中加密機制 | 從版本支援 | 
| --- | --- | --- | --- | --- | 
|  Spark 歷史記錄伺服器  |  spark.ssl.history.port  |  18480  |  TLS  |  emr-5.3.0\$1、emr-6.0.0\$1、emr-7.0.0\$1  | 
|  Spark 使用者介面  |  spark.ui.port  |  4440  |  TLS  |  emr-5.3.0\$1、emr-6.0.0\$1、emr-7.0.0\$1  | 
|  Spark 驅動程式  |  spark.driver.port  |  動態  |  Spark AES 型加密  |  emr-4.8.0\$1、emr-5.0.0\$1、emr-6.0.0\$1、emr-7.0.0\$1  | 
|  Spark 執行器  |  執行器連接埠 （無具名組態）  |  動態  |  Spark AES 型加密  |  emr-4.8.0\$1、emr-5.0.0\$1、emr-6.0.0\$1、emr-7.0.0\$1  | 
|  YARN NodeManager  |  spark.shuffle.service.port1  |  7337  |  Spark AES 型加密  |  emr-4.8.0\$1、emr-5.0.0\$1、emr-6.0.0\$1、emr-7.0.0\$1  | 

1`spark.shuffle.service.port` 託管於 YARN NodeManager，但僅供 Apache Spark 使用。

**已知問題**

在啟用傳輸中的叢集`spark.yarn.historyServer.address`組態目前使用連接埠 `18080`，這可防止使用 YARN 追蹤 URL 存取 Spark 應用程式 UI。**影響版本：**EMR - 7.3.0 到 EMR - 7.9.0。

使用下列解決方法：

1. 在 中修改`spark.yarn.historyServer.address`組態`/etc/spark/conf/spark-defaults.conf`，以在執行中的叢集`18480`上使用`HTTPS`連接埠號碼。

1. 這也可以在啟動叢集時的組態覆寫中提供。

範例組態：

```
[
                               {
                                 "Classification": "spark-defaults",
                                 "Properties": {
                                     "spark.yarn.historyServer.address": "${hadoopconf-yarn.resourcemanager.hostname}:18480"
                                 }
                               }
  
                               ]
```

## Hadoop YARN
<a name="emr-encryption-support-matrix-hadoop-yarn"></a>

[ Secure Hadoop RPC](https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SecureMode.html#Data_Encryption_on_RPC) 設定為 `privacy`，並使用 SASL 型傳輸中加密。這需要在安全組態中啟用 Kerberos 身分驗證。如果您不想要 Hadoop RPC 的傳輸中加密，請設定 `hadoop.rpc.protection = authentication`。我們建議您使用預設組態，以獲得最大的安全性。

如果您的 TLS 憑證不符合 TLS 主機名稱驗證要求，您可以設定 `hadoop.ssl.hostname.verifier = ALLOW_ALL`。我們建議您使用 的預設組態`hadoop.ssl.hostname.verifier = DEFAULT`，這會強制執行 TLS 主機名稱驗證。

若要停用 YARN Web 應用程式端點的 HTTPS，請設定 `yarn.http.policy = HTTP_ONLY`。這會使這些端點的流量保持未加密。我們建議您使用預設組態，以獲得最大的安全性。

如需詳細資訊，請參閱 Apache Hadoop 文件中的[處於安全模式的 Hadoop](https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SecureMode.html)。


| 元件 | Endpoint | 站點 | 傳輸中加密機制 | 從版本支援 | 
| --- | --- | --- | --- | --- | 
| ResourceManager |  yarn.resourcemanager.webapp.address  |  8088  |  TLS  |  emr-7.3.0\$1  | 
| ResourceManager |  yarn.resourcemanager.resource-tracker.address  |  8025  |  SASL \$1 Kerberos  |  emr-4.8.0\$1、emr-5.0.0\$1、emr-6.0.0\$1、emr-7.0.0\$1  | 
| ResourceManager |  yarn.resourcemanager.scheduler.address  |  8030  |  SASL \$1 Kerberos  |  emr-4.8.0\$1、emr-5.0.0\$1、emr-6.0.0\$1、emr-7.0.0\$1  | 
| ResourceManager |  yarn.resourcemanager.address  |  8032  |  SASL \$1 Kerberos  |  emr-4.8.0\$1、emr-5.0.0\$1、emr-6.0.0\$1、emr-7.0.0\$1  | 
| ResourceManager |  yarn.resourcemanager.admin.address  |  8033  |  SASL \$1 Kerberos  |  emr-4.8.0\$1、emr-5.0.0\$1、emr-6.0.0\$1、emr-7.0.0\$1  | 
| TimelineServer |  yarn.timeline-service.address  |  10200  |  SASL \$1 Kerberos  |  emr-4.8.0\$1、emr-5.0.0\$1、emr-6.0.0\$1、emr-7.0.0\$1  | 
| TimelineServer |  yarn.timeline-service.webapp.address  |  8188  |  TLS  |  emr-7.3.0\$1  | 
|  WebApplicationProxy  |  yarn.web-proxy.address  |  20888  |  SASL \$1 Kerberos  |  emr-4.8.0\$1、emr-5.0.0\$1、emr-6.0.0\$1、emr-7.0.0\$1  | 
|  NodeManager  |  yarn.nodemanager.address  |  8041  |  SASL \$1 Kerberos  |  emr-4.8.0\$1、emr-5.0.0\$1、emr-6.0.0\$1、emr-7.0.0\$1  | 
|  NodeManager  |  yarn.nodemanager.localizer.address  |  8040  |  SASL \$1 Kerberos  |  emr-4.8.0\$1、emr-5.0.0\$1、emr-6.0.0\$1、emr-7.0.0\$1  | 
|  NodeManager  |  yarn.nodemanager.webapp.address  |  8044  |  TLS  |  emr-7.3.0\$1  | 
|  NodeManager  |  mapreduce.shuffle.port1  |  13562  |  TLS  |  emr-4.8.0\$1、emr-5.0.0\$1、emr-6.0.0\$1、emr-7.0.0\$1  | 
|  NodeManager  |  spark.shuffle.service.port2  |  7337  |  Spark AES 型加密  |  emr-4.8.0\$1、emr-5.0.0\$1、emr-6.0.0\$1、emr-7.0.0\$1  | 

1 `mapreduce.shuffle.port` 託管在 YARN NodeManager 上，但僅供 Hadoop MapReduce 使用。

2 `spark.shuffle.service.port` 託管在 YARN NodeManager 上，但僅供 Apache Spark 使用。

**已知問題**

中的`yarn.log.server.url`組態目前使用 HTTP 搭配連接埠 19888，這可防止從 Resource Manager UI 存取應用程式日誌。**影響版本：**EMR - 7.3.0 到 EMR - 7.8.0。

使用下列解決方法：

1. 修改 中的`yarn.log.server.url`組態`yarn-site.xml`，以使用`HTTPS`通訊協定和連接埠號碼 `19890`。

1. 重新啟動 YARN Resource Manager：`sudo systemctl restart hadoop-yarn-resourcemanager.service`。

## Hadoop HDFS
<a name="emr-encryption-support-matrix-hadoop-hdfs"></a>

如果 EMR 叢集中啟用傳輸中加密，Hadoop 名稱節點、資料節點和日誌節點預設都支援 TLS。

[ Secure Hadoop RPC](https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SecureMode.html#Data_Encryption_on_RPC) 設定為 `privacy`，並使用 SASL 型傳輸中加密。這需要在安全組態中啟用 Kerberos 身分驗證。

建議您不要變更用於 HTTPS 端點的預設連接埠。

[ HDFS 區塊傳輸上的資料加密使用](https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SecureMode.html#Data_Encryption_on_Block_data_transfer.) AES 256，並要求在安全組態中啟用靜態加密。

如需詳細資訊，請參閱 Apache Hadoop 文件中的[處於安全模式的 Hadoop](https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SecureMode.html)。


| 元件 | Endpoint | 站點 | 傳輸中加密機制 | 從版本支援 | 
| --- | --- | --- | --- | --- | 
|  Namenode  |  dfs.namenode.https-address  |  9871  |  TLS  |  emr-4.8.0\$1、emr-5.0.0\$1、emr-6.0.0\$1、emr-7.0.0\$1  | 
|  Namenode  |  dfs.namenode.rpc-address  |  8020  |  SASL \$1 Kerberos  |  emr-4.8.0\$1、emr-5.0.0\$1、emr-6.0.0\$1、emr-7.0.0\$1  | 
|  Datanode  |  dfs.datanode.https.address  |  9865  |  TLS  |  emr-4.8.0\$1、emr-5.0.0\$1、emr-6.0.0\$1、emr-7.0.0\$1  | 
|  Datanode  |  dfs.datanode.address  |  9866  |  SASL \$1 Kerberos  |  emr-4.8.0\$1、emr-5.0.0\$1、emr-6.0.0\$1、emr-7.0.0\$1  | 
|  日誌節點  |  dfs.journalnode.https-address  |  8481  |  TLS  |  emr-4.8.0\$1、emr-5.0.0\$1、emr-6.0.0\$1、emr-7.0.0\$1  | 
|  日誌節點  |  dfs.journalnode.rpc-address  |  8485  |  SASL \$1 Kerberos  |  emr-4.8.0\$1、emr-5.0.0\$1、emr-6.0.0\$1、emr-7.0.0\$1  | 
|  DFSZKFailoverController  |  dfs.ha.zkfc.port  |  8019  |  無  |  TLS for ZKFC 僅支援 Hadoop 3.4.0。如需詳細資訊，請參閱 [HADOOP-18919](https://issues.apache.org/jira/browse/HADOOP-18919)。Amazon EMR 7.1.0 版目前在 Hadoop 3.3.6 上。日後 Hadoop 3.4.0 上會有較高的 Amazon EMR 版本  | 

## Hadoop MapReduce
<a name="emr-encryption-support-matrix-hadoop-mapreduce"></a>

在 EMR 叢集中啟用傳輸中加密時，Hadoop MapReduce、任務歷史記錄伺服器和 MapReduce 隨機播放預設支援 TLS。

[ Hadoop MapReduce 加密隨機播放](https://hadoop.apache.org/docs/r2.7.1/hadoop-mapreduce-client/hadoop-mapreduce-client-core/EncryptedShuffle.html)使用 TLS。

建議您不要變更 HTTPS 端點的預設連接埠。

如需詳細資訊，請參閱 Apache Hadoop 文件中的[處於安全模式的 Hadoop](https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SecureMode.html)。


| 元件 | Endpoint | 站點 | 傳輸中加密機制 | 從版本支援 | 
| --- | --- | --- | --- | --- | 
|  JobHistoryServer  |  mapreduce.jobhistory.webapp.https.address  |  19890  |  TLS  |  emr-7.3.0\$1  | 
|  YARN NodeManager  |  mapreduce.shuffle.port1  |  13562  |  TLS  |  emr-4.8.0\$1、emr-5.0.0\$1、emr-6.0.0\$1、emr-7.0.0\$1  | 

1 `mapreduce.shuffle.port` 託管在 YARN NodeManager 上，但僅供 Hadoop MapReduce 使用。

## Presto
<a name="emr-encryption-support-matrix-presto"></a>

在 Amazon EMR 5.6.0 版及更高版本中，Presto 協調器和工作者之間的內部通訊會使用 TLS Amazon EMR 設定所有必要組態，以在 Presto 中啟用[安全的內部通訊](https://prestodb.io/docs/current/security/internal-communication.html)。

如果連接器使用 Hive 中繼存放區做為中繼資料存放區，通訊器和 Hive 中繼存放區之間的通訊也會使用 TLS 加密。


| 元件 | Endpoint | 站點 | 傳輸中加密機制 | 從版本支援 | 
| --- | --- | --- | --- | --- | 
|  Presto 協調器  |  http-server.https.port  |  8446  |  TLS  |  emr-5.6.0\$1、emr-6.0.0\$1、emr-7.0.0\$1  | 
|  Presto 工作者  |  http-server.https.port  |  8446  |  TLS  |  emr-5.6.0\$1、emr-6.0.0\$1、emr-7.0.0\$1  | 

## Trino
<a name="emr-encryption-support-matrix-trino"></a>

在 Amazon EMR 6.1.0 版及更高版本中，Presto 協調器和工作者之間的內部通訊會使用 TLS Amazon EMR 設定所有必要組態，以在 Trino 中啟用[安全的內部通訊](https://trino.io/docs/current/security/internal-communication.html)。

如果連接器使用 Hive 中繼存放區做為中繼資料存放區，通訊器和 Hive 中繼存放區之間的通訊也會使用 TLS 加密。


| 元件 | Endpoint | 站點 | 傳輸中加密機制 | 從版本支援 | 
| --- | --- | --- | --- | --- | 
|  Trino 協調器  |  http-server.https.port  |  8446  |  TLS  |  emr-6.1.0\$1、emr-7.0.0\$1  | 
|  Trino 工作者  |  http-server.https.port  |  8446  |  TLS  |  emr-6.1.0\$1、emr-7.0.0\$1  | 

## Hive 和 Tez
<a name="emr-encryption-support-matrix-hive-tez"></a>

在預設情況下，在 EMR 叢集中啟用傳輸中加密時，Hive 伺服器 2、Hive 中繼存放區伺服器、Hive LLAP Daemon Web UI 和 Hive LLAP 隨機播放都支援 TLS。如需 Hive 組態的詳細資訊，請參閱[組態屬性](https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties)。

在 EMR 叢集中啟用傳輸中加密時，託管在 Tomcat 伺服器上的 Tez UI 也會啟用 HTTPS。不過，Tez AM Web UI 服務已停用 HTTPS，因此 AM 使用者無法存取開啟 SSL 接聽程式的金鑰存放區檔案。您也可以使用布林值組態 `tez.am.tez-ui.webservice.enable.ssl`和 啟用此行為`tez.am.tez-ui.webservice.enable.client.auth`。


| 元件 | Endpoint | 站點 | 傳輸中加密機制 | 從版本支援 | 
| --- | --- | --- | --- | --- | 
|  HiveServer2  |  hive.server2.thrift.port  |  10000  |  TLS  |  emr-6.9.0\$1、emr-7.0.0\$1  | 
|  HiveServer2  |  hive.server2.thrift.http.port  |  10001  |  TLS  |  emr-6.9.0\$1、emr-7.0.0\$1  | 
|  HiveServer2  |  hive.server2.webui.port  |  10002  |  TLS  |  emr-7.3.0\$1  | 
|  HiveMetastoreServer  |  hive.metastore.port  |  9083  |  TLS  |  emr-7.3.0\$1  | 
|  LLAP 協助程式  |  hive.llap.daemon.yarn.shuffle.port  |  15551  |  TLS  |  emr-7.3.0\$1  | 
|  LLAP 協助程式  |  hive.llap.daemon.web.port  |  15002  |  TLS  |  emr-7.3.0\$1  | 
|  LLAP 協助程式  |  hive.llap.daemon.output.service.port  |  15003  |  無  |  Hive 不支援此端點的傳輸中加密  | 
|  LLAP 協助程式  |  hive.llap.management.rpc.port  |  15004  |  無  |  Hive 不支援此端點的傳輸中加密  | 
|  LLAP 協助程式  |  hive.llap.plugin.rpc.port  |  動態  |  無  |  Hive 不支援此端點的傳輸中加密  | 
|  LLAP 協助程式  |  hive.llap.daemon.rpc.port  |  動態  |  無  |  Hive 不支援此端點的傳輸中加密  | 
|  WebHCat  |  templeton.port  |  50111  |  TLS  |  emr-7.3.0\$1  | 
|  Tez 應用程式主伺服器  |  tez.am.client.am.port-range tez.am.task.am.port-range  |  動態  |  無  |  Tez 不支援此端點的傳輸中加密  | 
|  Tez 應用程式主伺服器  |  tez.am.tez-ui.webservice.port-range  |  動態  |  無  |  預設為停用。可以使用 emr-7.3.0\$1 中的 Tez 組態啟用  | 
|  Tez 任務  |  不適用 - 無法設定  |  動態  |  無  |  Tez 不支援此端點的傳輸中加密  | 
|  Tez UI  |  可透過託管 Tez UI 的 Tomcat 伺服器進行設定  |  8080  |  TLS  |  emr-7.3.0\$1  | 

## Flink
<a name="emr-encryption-support-matrix-flink"></a>

 當您在 EMR 叢集中啟用傳輸中加密時，Apache Flink REST 端點和 flink 程序之間的內部通訊預設支援 TLS。

 [https://nightlies.apache.org/flink/flink-docs-release-1.18/docs/deployment/config/#security-ssl-internal-enabled](https://nightlies.apache.org/flink/flink-docs-release-1.18/docs/deployment/config/#security-ssl-internal-enabled) 設定為 `true`，並使用傳輸中加密進行 Flink 程序之間的內部通訊。如果您不希望內部通訊的傳輸中加密，請停用該組態。我們建議您使用預設組態，以獲得最大的安全性。

 Amazon EMR [https://nightlies.apache.org/flink/flink-docs-release-1.18/docs/deployment/config/#security-ssl-rest-enabled](https://nightlies.apache.org/flink/flink-docs-release-1.18/docs/deployment/config/#security-ssl-rest-enabled)會將 設定為 ，`true`並為 REST 端點使用傳輸中加密。此外，Amazon EMR 也會[https://nightlies.apache.org/flink/flink-docs-release-1.18/docs/deployment/config/#historyserver-web-ssl-enabled](https://nightlies.apache.org/flink/flink-docs-release-1.18/docs/deployment/config/#historyserver-web-ssl-enabled)將 設為 true，以使用與 Flink 歷史記錄伺服器的 TLS 通訊。如果您不希望 REST 點的傳輸中加密，請停用這些組態。我們建議您使用預設組態，以獲得最大的安全性。

Amazon EMR 使用 [https://nightlies.apache.org/flink/flink-docs-release-1.18/docs/deployment/config/#security-ssl-algorithms](https://nightlies.apache.org/flink/flink-docs-release-1.18/docs/deployment/config/#security-ssl-algorithms)。 指定使用 AES 型加密的密碼清單。覆寫此組態以使用您想要的加密。

如需詳細資訊，請參閱 Flink 文件中的 [SSL 設定](https://nightlies.apache.org/flink/flink-docs-release-1.18/docs/deployment/security/security-ssl/)。


| 元件 | Endpoint | 站點 | 傳輸中加密機制 | 從版本支援 | 
| --- | --- | --- | --- | --- | 
|  Flink 歷史記錄伺服器  |  historyserver.web.port  |  8082  |  TLS  |  emr-7.3.0\$1  | 
|  Job Manager Rest 伺服器  |  rest.bind-port rest.port  |  動態  |  TLS  |  emr-7.3.0\$1  | 

## HBase
<a name="emr-encryption-support-matrix-hbase"></a>

 Amazon EMR 會將 [ Secure Hadoop RPC](https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SecureMode.html#Data_Encryption_on_RPC) 設定為 `privacy`。HMaster 和 RegionServer 使用以 SASL 為基礎的傳輸中加密。這需要在安全組態中啟用 Kerberos 身分驗證。

Amazon EMR `hbase.ssl.enabled`將 設為 true，並針對 UI 端點使用 TLS。如果您不想針對 UI 端點使用 TLS，請停用此組態。我們建議您使用預設組態，以獲得最大的安全性。

Amazon EMR 會分別為 REST `hbase.rest.ssl.enabled`和 Thirft 伺服器端點設定 和 `hbase.thrift.ssl.enabled`，並使用 TLS。如果您不想對這些端點使用 TLS，請停用此組態。我們建議您使用預設組態，以獲得最大的安全性。

從 EMR 7.6.0 開始，HMaster 和 RegionServer 端點支援 TLS。Amazon EMR 也會設定 `hbase.server.netty.tls.enabled`和 `hbase.client.netty.tls.enabled`。如果您不想對這些端點使用 TLS，請停用此組態。我們建議您使用預設組態，該組態可提供加密，從而提高安全性。若要進一步了解，請參閱《Apache [HBase 參考指南》中的 HBase RPC 通訊中的 Transport Level Security (TLS)](https://hbase.apache.org/book.html#_transport_level_security_tls_in_hbase_rpc_communication)。 * HBase * 


| 元件 | Endpoint | 站點 | 傳輸中加密機制 | 從版本支援 | 
| --- | --- | --- | --- | --- | 
|  HMaster  |  HMaster  |  16000  |  SASL \$1 Kerberos TLS  |  emr-4.8.0\$1、emr-5.0.0\$1、emr-6.0.0\$1 和 emr-7.0.0\$1 中的 SASL \$1 Kerberos emr-7.6.0\$1 中的 TLS  | 
|  HMaster  |  HMaster 使用者介面  |  16010  |  TLS  |  emr-7.3.0\$1  | 
|  RegionServer  |  RegionServer  |  16020  |  SASL \$1 Kerberos TLS  |  emr-4.8.0\$1、emr-5.0.0\$1、emr-6.0.0\$1 和 emr-7.0.0\$1 中的 SASL \$1 Kerberos emr-7.6.0\$1 中的 TLS  | 
|  RegionServer  |  RegionServer 資訊  |  16030  |  TLS  |  emr-7.3.0\$1  | 
|  HBase Rest 伺服器  |  靜態伺服器  |  8070  |  TLS  |  emr-7.3.0\$1  | 
|  HBase Rest 伺服器  |  靜態 UI  |  8085  |  TLS  |  emr-7.3.0\$1  | 
|  Hbase Thrift 伺服器  |  Thrift 伺服器  |  9090  |  TLS  |  emr-7.3.0\$1  | 
|  Hbase Thrift 伺服器  |  Thrift 伺服器使用者介面  |  9095  |  TLS  |  emr-7.3.0\$1  | 

## Phoenix
<a name="emr-encryption-support-matrix-phoenix"></a>

 如果您在 EMR 叢集中啟用傳輸中加密，Phoenix Query Server 支援 TLS 屬性 `phoenix.queryserver.tls.enabled`，此屬性`true`預設為 。

若要進一步了解，請參閱 Phoenix Query Server 文件中的與 [ HTTPS 相關的組態](https://phoenix.apache.org/server.html#Configuration)。


| 元件 | Endpoint | 站點 | 傳輸中加密機制 | 從版本支援 | 
| --- | --- | --- | --- | --- | 
|  查詢伺服器  |  phoenix.queryserver.http.port  |  8765  |  TLS  |  emr-7.3.0\$1  | 

## Oozie
<a name="emr-encryption-support-matrix-oozie"></a>

如果您在 Amazon EMR 7.3.0 及更高版本上執行 Oozie，則 [OOZIE-3673](https://issues.apache.org/jira/browse/OOZIE-3673) 可在 Amazon EMR 上使用。如果您在執行電子郵件動作時需要設定自訂 SSL 或 TLS 通訊協定，您可以在 `oozie-site.xml` `oozie.email.smtp.ssl.protocols`檔案中設定 屬性。根據預設，如果您啟用傳輸中加密，Amazon EMR 會使用 TLS v1.3 通訊協定。

如果您在 Amazon EMR [OOZIE-3677](https://issues.apache.org/jira/browse/OOZIE-3677).0 及更高版本上執行 [OOZIE-3674](https://issues.apache.org/jira/browse/OOZIE-3674)7 和 OOZIE-3674。這可讓您在 `trustStoreType`中指定屬性 `keyStoreType`和 `oozie-site.xml`。OOZIE-3674 `--insecure` 會將 參數新增至 Oozie 用戶端，以便忽略憑證錯誤。

Oozie 會強制執行 TLS 主機名稱驗證，這表示您用於傳輸中加密的任何憑證都必須符合主機名稱驗證要求。如果憑證不符合條件，當 Amazon EMR 佈建叢集時，叢集可能會卡在`oozie share lib update`階段。我們建議您更新憑證，以確保其符合主機名稱驗證。不過，如果您無法更新憑證，您可以透過在叢集組態`false`中將 `oozie.https.enabled` 屬性設定為 來停用 Oozie 的 SSL。


| 元件 | Endpoint | 站點 | 傳輸中加密機制 | 從版本支援 | 
| --- | --- | --- | --- | --- | 
|  EmbeddedOozieServer  |  oozie.https.port  |  11443  |  TLS  |  emr-7.3.0\$1  | 
|  EmbeddedOozieServer  |  oozie.email.smtp.port  |  25  |  TLS  |  emr-7.3.0\$1  | 

## Hue
<a name="emr-encryption-support-matrix-hue"></a>

根據預設，在 Amazon EMR 叢集中啟用傳輸中加密時，Hue 支援 TLS。如需 Hue 組態的詳細資訊，請參閱[使用 HTTPS / SSL 設定 Hue](https://gethue.com/configure-hue-with-https-ssl/)。


| 元件 | Endpoint | 站點 | 傳輸中加密機制 | 從版本支援 | 
| --- | --- | --- | --- | --- | 
|  Hue  |  http\$1port  |  8888  |  TLS  |  emr-7.4.0\$1  | 

## Livy
<a name="emr-encryption-support-matrix-livy"></a>

根據預設，在 Amazon EMR 叢集中啟用傳輸中加密時，Livy 支援 TLS。如需 Livy 組態的詳細資訊，請參閱[使用 Apache Livy 啟用 HTTPS](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/enabling-https.html)。

從 Amazon EMR 7.3.0 開始，如果您使用傳輸中加密和 Kerberos 身分驗證，則無法使用依賴 Hive 中繼存放區的 Spark 應用程式的 Livy 伺服器。此問題已在 [HIVE-16340](https://issues.apache.org/jira/browse/HIVE-16340) 中修正，並在開放原始碼 Spark 應用程式可以升級至 Hive 3 時，在 [SPARK-44114](https://issues.apache.org/jira/browse/SPARK-44114) 中完全解決。同時，如果您將 `hive.metastore.use.SSL`設定為 ，則可以解決此問題`false`。如需詳細資訊，請參閱[設定應用程式](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps.html)。

如需詳細資訊，請參閱[使用 Apache Livy 啟用 HTTPS](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/enabling-https.html)。


| 元件 | Endpoint | 站點 | 傳輸中加密機制 | 從版本支援 | 
| --- | --- | --- | --- | --- | 
|  livy-server  |  livy.server.port  |  8998  |  TLS  |  emr-7.4.0\$1  | 

## JupyterEnterpriseGateway
<a name="emr-encryption-matrix-jupyter-enterprise"></a>

根據預設，在 Amazon EMR 叢集中啟用傳輸中加密時，Jupyter Enterprise Gateway 支援 TLS。如需 Jupyter Enterprise Gateway 組態的詳細資訊，請參閱[保護企業閘道伺服器](https://jupyter-enterprise-gateway.readthedocs.io/en/v1.2.0/getting-started-security.html#securing-enterprise-gateway-server)。


| 元件 | Endpoint | 站點 | 傳輸中加密機制 | 從版本支援 | 
| --- | --- | --- | --- | --- | 
|  jupyter\$1enterprise\$1gateway  |  c.EnterpriseGatewayApp.port  |  9547  |  TLS  |  emr-7.4.0\$1  | 

## JupyterHub
<a name="emr-encryption-matrix-jupyter-hub"></a>

根據預設，在 Amazon EMR 叢集中啟用傳輸中加密時，JupyterHub 支援 TLS。如需詳細資訊，請參閱 JupyterHub 文件中的[啟用 SSL 加密](https://jupyterhub.readthedocs.io/en/latest/tutorial/getting-started/security-basics.html#enabling-ssl-encryption)。不建議停用加密。


| 元件 | Endpoint | 站點 | 傳輸中加密機制 | 從版本支援 | 
| --- | --- | --- | --- | --- | 
|  jupyter\$1hub  |  c.JupyterHub.port  |  9443  |  TLS  |  emr-5.14.0\$1、emr-6.0.0\$1、emr-7.0.0\$1  | 

## Zeppelin
<a name="emr-encryption-matrix-zeppelin"></a>

 根據預設，當您在 EMR 叢集中啟用傳輸中加密時，Zeppelin 支援 TLS。如需 Zeppelin 組態的詳細資訊，請參閱 Zeppelin 文件中的 [ SSL 組態](https://zeppelin.apache.org/docs/0.11.1/setup/operation/configuration.html#ssl-configuration)。


| 元件 | Endpoint | 站點 | 傳輸中加密機制 | 從版本支援 | 
| --- | --- | --- | --- | --- | 
|  塞普林  |  zeppelin.server.ssl.port  |  8890  |  TLS  |  7.3.0\$1  | 

## Zookeeper
<a name="emr-encryption-matrix-zookeeper"></a>

Amazon EMR `serverCnxnFactory`將 設定為 `org.apache.zookeeper.server.NettyServerCnxnFactory`，以為 Zookeeper 規定人數和用戶端通訊啟用 TLS。

`secureClientPort` 指定接聽 TLS 連線的連接埠。如果用戶端不支援與 Zookeeper 的 TLS 連線，用戶端可以連線到 中指定的不安全連接埠 2181`clientPort`。您可以覆寫或停用這兩個連接埠。

Amazon EMR 同時`admin.forceHttps`將 `sslQuorum`和 設定為 `true`，以啟用規定人數和管理伺服器的 TLS 通訊。如果您不想為規定人數和管理員伺服器進行傳輸中加密，您可以停用這些組態。我們建議您使用預設組態，以獲得最大的安全性。

如需詳細資訊，請參閱 Zookeeper 文件中的[加密、身分驗證、授權選項](https://zookeeper.apache.org/doc/r3.9.2/zookeeperAdmin.html#sc_authOptions)。


| 元件 | Endpoint | 站點 | 傳輸中加密機制 | 從版本支援 | 
| --- | --- | --- | --- | --- | 
|  Zookeeper 伺服器  |  secureClientPort  |  2281  |  TLS  |  emr-7.4.0\$1  | 
|  Zookeeper 伺服器  |  配額連接埠  |  有 2 個： 跟隨者使用 2888 連線到領導者。 領導者選擇使用 3888  |  TLS  |  emr-7.4.0\$1  | 
|  Zookeeper 伺服器  |  admin.serverPort  |  8341  |  TLS  |  emr-7.4.0\$1  | 