本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
當使用 Amazon EMR
重要
Amazon EMR 僅支援對稱 KMS 金鑰。您無法使用非對稱 KMS 金鑰來加密 Amazon EMR 叢集中的靜態資料。如需有關如何判斷 KMS 金鑰是對稱還是不對稱的說明,請參閱識別不同的金鑰類型。
Amazon EMR 叢集也會加密傳輸中的資料,這表示叢集會在透過網路傳送資料之前進行加密。您不能使用 KMS 金鑰加密傳輸中的資料。如需詳細資訊,請參閱《Amazon EMR 管理指南》中的傳輸資料加密。
如需 Amazon EMR 中所有可用加密選項的詳細資訊,請參閱《Amazon EMR 管理指南》中的加密選項。
加密 EMR 檔案系統 (EMRFS) 上的資料
Amazon EMR 叢集使用兩個分散式檔案系統:
-
Hadoop 分散式檔案系統 (HDFS)。HDFS 加密不使用 AWS KMS中的 KMS 金鑰。
-
EMR 檔案系統 (EMRFS)。EMRFS 是 HDFS 實作,可讓 Amazon EMR 叢集將資料存放在 Amazon Simple Storage Service (Amazon S3) 中。EMRFS 支援四種加密選項,其中兩種使用 AWS KMS中的 KMS 金鑰。如需所有四個 EMRFS 加密選項的詳細資訊,請參閱《Amazon EMR 管理指南》中的加密選項。
使用 KMS 金鑰的兩個 EMRFS 加密選項使用 Amazon S3 提供的以下加密功能:
-
使用伺服器端加密搭配 AWS Key Management Service (SSE-KMS) 保護資料。Amazon EMR 叢集會將資料傳送至 Simple Storage Service (Amazon S3)。Simple Storage Service (Amazon S3) 使用 KMS 金鑰來加密資料,然後將其儲存至 S3 儲存貯體。如需此操作如何進行的詳細資訊,請參閱使用 SSE-KMS 加密 EMRFS 上資料的程序。
-
使用用戶端加密保護資料 (CSE-KMS)。Amazon EMR 中的資料在 AWS KMS key 下加密,然後將其傳送至 Simple Storage Service (Amazon S3) 進行儲存。如需此操作如何進行的詳細資訊,請參閱使用 CSE-KMS 加密 EMRFS 上資料的程序。
當您設定 Amazon EMR 叢集在 EMRFS 上使用 KMS 金鑰來加密資料時,您可以選擇您想要 Simple Storage Service (Amazon S3) 或 Amazon EMR 叢集使用的 KMS 金鑰。使用 SSE-KMS,您可以選擇具有別名 aws/s3 的 Amazon S3 AWS 受管金鑰 ,或您建立的對稱客戶受管金鑰。使用用戶端加密時,您必須選擇您建立的對稱客戶受管金鑰。選擇客戶受管金鑰時,您必須確保 Amazon EMR 叢集具有使用 KMS 金鑰的許可。如需詳細資訊,請參閱《Amazon EMR 管理指南》中的使用 AWS KMS keys 進行加密。
對於伺服器端和用戶端加密,您選擇的 KMS 金鑰是信封加密工作流程中的根金鑰。資料會使用唯一的資料金鑰進行加密,該金鑰是在 KMS 金鑰下加密 AWS KMS。加密的資料及其資料金鑰的加密副本會以單一加密物件一起存放在 S3 儲存貯體中。如需其如何運作的詳細資訊,請參閱下列主題。
使用 SSE-KMS 加密 EMRFS 上資料的程序
設定 Amazon EMR 叢集使用 SSE-KMS 時,加密程序的運作方式如下:
-
叢集將資料傳送至 Amazon S3 以便儲存在 S3 儲存貯體中。
-
Amazon S3 將 GenerateDataKey 請求傳送到 AWS KMS,指定您在將叢集設定為使用 SSE-KMS 時選擇之 KMS 金鑰的金鑰 ID。請求包含加密內容;如需詳細資訊,請參閱加密內容。
-
AWS KMS 會產生唯一的資料加密金鑰 (資料金鑰),然後將此資料金鑰的兩個副本傳送至 Amazon S3。一個複本是未加密的 (純文字),另一個複本則透過 KMS 金鑰加密。
-
Amazon S3 使用純文字資料金鑰來加密它在步驟 1 收到的資料,然後在使用後盡快從記憶體移除純文字資料金鑰。
-
Amazon S3 將加密的資料及資料金鑰的加密複本以單一加密物件一起存放在 S3 儲存貯體中。
解密程序的運作方式如下:
使用 CSE-KMS 加密 EMRFS 上資料的程序
設定 Amazon EMR 叢集使用 CSE-KMS 時,加密程序的運作方式如下:
-
準備好將資料存放在 Amazon S3 時,叢集會傳送 GenerateDataKey 請求至 AWS KMS,指定您在將叢集設定為使用 CSE-KMS 時所選擇 KMS 金鑰的金鑰 ID。請求包含加密內容;如需詳細資訊,請參閱加密內容。
-
AWS KMS 會產生唯一的資料加密金鑰 (資料金鑰),然後將此資料金鑰的兩個副本傳送至叢集。一個複本是未加密的 (純文字),另一個複本則透過 KMS 金鑰加密。
-
叢集使用純文字資料金鑰來加密資料,然後在使用後盡快從記憶體移除純文字資料金鑰。
-
叢集將加密的資料及資料金鑰的加密副本合併為單一加密物件。
-
叢集將加密的物件傳送到 Amazon S3 以便儲存。
解密程序的運作方式如下:
加密叢集節點之儲存磁碟區上的資料
Amazon EMR 叢集是 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體的集合。叢集中的每個執行個體稱為叢集節點或節點。每個節點可以有兩種類型的儲存磁碟區:執行個體存放磁碟區和 Amazon Elastic Block Store (Amazon EBS) 磁碟區。您可以設定叢集為使用 Linux 統一金鑰設定 (LUKS)
當您啟用叢集的本機磁碟加密時,可以選擇使用 AWS KMS中的 KMS 金鑰來加密 LUKS 金鑰。您必須選擇您建立的客戶受管金鑰,您無法使用 AWS 受管金鑰。如果選擇客戶受管金鑰,則您必須確保 Amazon EMR 叢集具有使用 KMS 金鑰的許可。如需詳細資訊,請參閱《Amazon EMR 管理指南》中的使用 AWS KMS keys 進行加密。
當您啟用使用 KMS 金鑰的本機磁碟加密,加密程序的運作方式如下:
-
當每個叢集節點啟動時,它會傳送 GenerateDataKey 請求給 AWS KMS,指定您在為叢集啟用本機磁碟加密時選擇的 KMS 金鑰的金鑰 ID。
-
AWS KMS 會產生唯一的資料加密金鑰 (資料金鑰),然後將此資料金鑰的兩個副本傳送至節點。一個複本是未加密的 (純文字),另一個複本則透過 KMS 金鑰加密。
-
節點使用純文字資料金鑰的 base64 編碼版本做為保護 LUKS 金鑰的密碼。節點將資料金鑰的加密副本儲存在開機磁碟區。
-
如果節點重新啟動,重新啟動的節點會使用 AWS KMS 解密請求將加密的資料金鑰傳送至 。
-
AWS KMS 使用用來加密的相同 KMS 金鑰來解密加密的資料金鑰,然後將解密的 (純文字) 資料金鑰傳送至節點。
-
節點使用純文字資料金鑰的 base64 編碼版本做為解鎖 LUKS 金鑰的密碼。
加密內容
與 整合的每個 AWS 服務 AWS KMS 都可以在服務使用 AWS KMS 來產生資料金鑰或加密或解密資料時指定加密內容。加密內容是 AWS KMS 用於檢查資料完整性的其他已驗證資訊。當服務指定加密操作的加密內容,它必須為相對應的解密操作指定相同的加密內容,否則解密將失敗。加密內容也會寫入 AWS CloudTrail 日誌檔案,這可協助您了解使用特定 KMS 金鑰的原因。
以下章節說明使用 KMS 金鑰之每個 Amazon EMR 加密案例所用的加密內容。
使用 SSE-KMS 進行 EMRFS 加密的加密內容
透過 SSE-KMS,Amazon EMR 叢集會傳送資料至 Amazon S3,接著 Amazon S3 使用 KMS 金鑰加密資料,然後將其儲存到 S3 儲存貯體。在此情況下,Amazon S3 會使用 S3 物件的 Amazon Resource Name (ARN) 作為加密內容,其中包含其傳送的每個 GenerateDataKey 和 Decrypt 請求 AWS KMS。以下範例顯示 Amazon S3 所用加密內容的 JSON 顯示方式。
{ "aws:s3:arn" : "arn:aws:s3:::
S3_bucket_name
/S3_object_key
" }
使用 CSE-KMS 進行 EMRFS 加密的加密內容
透過 CSE-KMS,Amazon EMR 叢集使用 KMS 金鑰加密資料,然後將其傳送到 Amazon S3 儲存貯體儲存。在此情況下,叢集會使用 KMS 金鑰的 Amazon Resource Name (ARN) 作為加密內容,並傳送每個 GenerateDataKey 和 Decrypt 請求 AWS KMS。以下範例顯示叢集所用加密內容的 JSON 顯示方式。
{ "kms_cmk_id" : "
arn:aws:kms:us-east-2:111122223333:key/0987ab65-43cd-21ef-09ab-87654321cdef
" }
使用 LUKS 進行本機磁碟加密的加密內容
當 Amazon EMR 叢集使用搭配 LUKS 的本機磁碟加密時,叢集節點不會指定加密內容,其中包含其傳送至 AWS KMS的 GenerateDataKey 和 Decrypt 請求。