本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon HDFS上的 中的透明加密 EMR
透明加密是透過使用HDFS加密區域 實作,加密區域 是您定義的HDFS路徑。每個加密區域都有自己的金鑰,該金鑰存放在使用 hdfs-site
組態分類指定的伺服器中。
從 Amazon 4.8.0 EMR版開始,您可以使用 Amazon EMR安全組態來更輕鬆地設定叢集的資料加密設定。安全組態提供設定,以啟用 Amazon Elastic Block Store (Amazon EBS) 儲存磁碟區和 Amazon S3 中資料傳輸中和靜態EMRFS資料的安全性。如需詳細資訊,請參閱 Amazon EMR管理指南 中的傳輸中和靜態資料加密。
根據KMS預設,Amazon EMR會使用 Hadoop;不過,您可以使用另一個 KMS來實作 KeyProvider API操作。HDFS 加密區域中的每個檔案都有自己的唯一資料加密金鑰 ,由加密區域金鑰加密。HDFS 當資料寫入加密區域時,資料會加密 end-to-end (靜態和傳輸中),因為加密和解密活動只會發生在用戶端。
您不能將檔案在加密區域之間移動或從加密區域移動至未加密的路徑。
NameNode 和 HDFS用戶端會透過 操作與 Hadoop KMS(或您KMS設定的替代) KeyProvider API互動。KMS 負責將加密金鑰儲存在後端金鑰存放區中。此外,Amazon EMR包含JCE無限制強度政策,因此您可以建立所需長度的金鑰。
如需詳細資訊,請參閱 Hadoop 文件中的透明加密HDFS
注意
在 Amazon 中EMR,依預設KMSHTTPS, 不會使用 Hadoop 啟用 KMS。如需如何KMS透過 啟用的詳細資訊HTTPS,請參閱 Hadoop KMS 文件
設定HDFS透明加密
您可以透過建立金鑰和新增加密區域EMR,在 Amazon 中設定透明加密。您可以數種方式來執行此動作:
-
建立叢集時使用 Amazon EMR組態API操作
-
搭配 command-runner.jar 使用 Hadoop JAR 步驟
-
登入 Hadoop 的叢集主節點,並使用
hadoop key
和hdfs crypto
命令列用戶端 -
使用 REST APIs for Hadoop KMS和 HDFS
如需 REST 的詳細資訊APIs,請參閱 Hadoop KMS和 的個別文件HDFS。
使用 建立叢集時建立加密區域及其金鑰 CLI
組態API操作中的hdfs-encryption-zones
分類可讓您在建立叢集時指定金鑰名稱和加密區域。Amazon 會在叢集KMS的 Hadoop 中EMR建立此金鑰,並設定加密區域。
-
使用下列命令建立叢集。
aws emr create-cluster --release-label
emr-7.3.0
--instance-type m5.xlarge --instance-count 2 \ --applications Name=App1
Name=App2
--configurations https://s3.amazonaws.com/amzn-s3-demo-bucket/myfolder/myConfig.json注意
包含 Linux 行接續字元 (\) 是為了提高可讀性。它們可以在 Linux 命令中移除或使用。對於 Windows,請將其移除或取代為插入符號 (^)。
myConfig.json
:[ { "Classification": "hdfs-encryption-zones", "Properties": { "/myHDFSPath1": "path1_key", "/myHDFSPath2": "path2_key" } } ]
若要在主節點手動建立加密區域及其金鑰
-
使用大於 4.1.0 的 Amazon EMR版本啟動叢集。
-
使用 連線至叢集的主節點SSH。
-
在 Hadoop 中建立金鑰KMS。
$ hadoop key create path2_key path2_key has been successfully created with options Options{cipher='AES/CTR/NoPadding', bitLength=256, description='null', attributes=null}. KMSClientProvider[http://ip-x-x-x-x.ec2.internal:16000/kms/v1/] has been updated.
重要
Hadoop KMS需要您的金鑰名稱為小寫。如果您使用的金鑰有大寫字元,在啟動叢集將會失敗。
-
在 中建立加密區域路徑HDFS。
$ hadoop fs -mkdir /myHDFSPath2
-
使用您建立的金鑰,將HDFS路徑設為加密區域。
$ hdfs crypto -createZone -keyName path2_key -path /myHDFSPath2 Added encryption zone /myHDFSPath2
使用 手動建立加密區域及其金鑰 AWS CLI
-
使用下列命令新增手動建立KMS金鑰和加密區域的步驟。
aws emr add-steps --cluster-id j-2AXXXXXXGAPLF --steps Type=CUSTOM_JAR,Name="Create First Hadoop KMS Key",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[/bin/bash,-c,"\"hadoop key create path1_key\""] \ Type=CUSTOM_JAR,Name="Create First Hadoop HDFS Path",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[/bin/bash,-c,"\"hadoop fs -mkdir /myHDFSPath1\""] \ Type=CUSTOM_JAR,Name="Create First Encryption Zone",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[/bin/bash,-c,"\"hdfs crypto -createZone -keyName path1_key -path /myHDFSPath1\""] \ Type=CUSTOM_JAR,Name="Create Second Hadoop KMS Key",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[/bin/bash,-c,"\"hadoop key create path2_key\""] \ Type=CUSTOM_JAR,Name="Create Second Hadoop HDFS Path",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[/bin/bash,-c,"\"hadoop fs -mkdir /myHDFSPath2\""] \ Type=CUSTOM_JAR,Name="Create Second Encryption Zone",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[/bin/bash,-c,"\"hdfs crypto -createZone -keyName path2_key -path /myHDFSPath2\""]
注意
包含 Linux 行接續字元 (\) 是為了提高可讀性。它們可以在 Linux 命令中移除或使用。對於 Windows,請將其移除或取代為插入符號 (^)。
HDFS 透明加密的考量事項
最佳實務是為每個應用程式建立他們可以寫入檔案的加密區域。此外,您可以使用組態中的 hdfs-encryption-zones 分類HDFS來加密所有 API,並將根路徑 (/) 指定為加密區域。
Hadoop 金鑰管理伺服器
Hadoop KMS
若要設定 Hadoop KMS,請使用 hadoop-kms-site分類來變更設定。若要設定 ACLs,您可以使用分類 kms-acls。
如需詳細資訊,請參閱 Hadoop KMS 文件
注意
在 Amazon 中EMR,依預設KMSHTTPS, 不會使用 Hadoop 啟用 KMS。若要了解如何KMS透過 啟用 HTTPS,請參閱 Hadoop KMS 文件
重要
Hadoop KMS需要您的金鑰名稱為小寫。如果您使用的金鑰有大寫字元,在啟動叢集將會失敗。
在 Amazon KMS中設定 Hadoop EMR
使用 Amazon EMR4.6.0 版或更新版本, kms-http-port
為 9700,kms-admin-port
9701。
您可以使用 API Amazon EMR版本的組態,KMS在叢集建立時間設定 Hadoop。以下是可用於 Hadoop 的組態物件分類KMS:
分類 | Filename |
---|---|
hadoop-kms-site | kms-site.xml |
hadoop-kms-acls | kms-acls.xml |
hadoop-kms-env | kms-env.sh |
hadoop-kms-log4j | kms-log4j.properties |
KMS ACLs 使用 設定 Hadoop CLI
-
ACLs 使用下列命令使用 建立具有 Hadoop KMS的叢集:
aws emr create-cluster --release-label
emr-7.3.0
--instance-type m5.xlarge --instance-count 2 \ --applications Name=App1
Name=App2
--configurations https://s3.amazonaws.com/amzn-s3-demo-bucket/myfolder/myConfig.json注意
包含 Linux 行接續字元 (\) 是為了提高可讀性。它們可以在 Linux 命令中移除或使用。對於 Windows,請將其移除或取代為插入符號 (^)。
myConfig.json
:[ { "Classification": "hadoop-kms-acls", "Properties": { "hadoop.kms.blacklist.CREATE": "hdfs,foo,myBannedUser", "hadoop.kms.acl.ROLLOVER": "myAllowedUser" } } ]
使用 停用 Hadoop KMS快取 CLI
-
使用下列命令
false
,將 Hadoop KMShadoop.kms.cache.enable
設為 來建立叢集:aws emr create-cluster --release-label
emr-7.3.0
--instance-type m5.xlarge --instance-count 2 \ --applications Name=App1
Name=App2
--configurations https://s3.amazonaws.com/amzn-s3-demo-bucket/myfolder/myConfig.json注意
包含 Linux 行接續字元 (\) 是為了提高可讀性。它們可以在 Linux 命令中移除或使用。對於 Windows,請將其移除或取代為插入符號 (^)。
myConfig.json
:[ { "Classification": "hadoop-kms-site", "Properties": { "hadoop.kms.cache.enable": "false" } } ]
使用 設定kms-env.sh
指令碼中的環境變數 CLI
-
透過
kms-env.sh
組態在hadoop-kms-env
中變更設定。KMS 使用下列命令使用 Hadoop 建立叢集:aws emr create-cluster --release-label
emr-7.3.0
--instance-type m5.xlarge --instance-count 2 \ --applications Name=App1
Name=App2
--configurations https://s3.amazonaws.com/amzn-s3-demo-bucket/myfolder/myConfig.json注意
包含 Linux 行接續字元 (\) 是為了提高可讀性。它們可以在 Linux 命令中移除或使用。對於 Windows,請將其移除或取代為插入符號 (^)。
myConfig.json
:[ { "Classification": "hadoop-kms-env", "Properties": { }, "Configurations": [ { "Classification": "export", "Properties": { "JAVA_LIBRARY_PATH": "
/path/to/files
", "KMS_SSL_KEYSTORE_FILE": "/non/Default/Path/
.keystore", "KMS_SSL_KEYSTORE_PASS": "myPass
" }, "Configurations": [ ] } ] } ]
如需設定 Hadoop 的相關資訊KMS,請參閱 Hadoop KMS 文件
HDFS 具有多個主節點的EMR叢集上的透明加密
Apache Ranger
Apache Ranger 會將其根金鑰和加密區域 (EZ) 金鑰KMS存放在您的 Amazon 中,RDS以用於具有多個主要節點的 Amazon EMR叢集。若要在具有多個主要節點的 Amazon EMR叢集HDFS上啟用 中的透明加密,您必須提供下列組態。
-
Amazon RDS或您自己的 MySQL 伺服器連線URL,用於存放 Ranger KMS根金鑰和 EZ 金鑰
-
My 的使用者名稱和密碼SQL
-
Ranger KMS根金鑰的密碼
-
SSL 用於連線至 MySQL Server 的憑證授權單位 (CA) PEM 檔案
您可以使用 ranger-kms-dbks-site
分類和 ranger-kms-db-ca
分類來提供這些組態,如下列範例所示。
[ { "Classification": "ranger-kms-dbks-site", "Properties": { "ranger.ks.jpa.jdbc.url": "
jdbc:log4jdbc:mysql://mysql-host-url.xx-xxx-1.xxx.amazonaws.com:3306/rangerkms
", "ranger.ks.jpa.jdbc.user": "mysql-user-name
", "ranger.ks.jpa.jdbc.password": "mysql-password
", "ranger.db.encrypt.key.password": "password-for-encrypting-a-master-key
" } }, { "Classification": "ranger-kms-db-ca", "Properties": { "ranger.kms.trust.ca.file.s3.url": "s3://rds-downloads/rds-ca-2019-root.pem
" } } ]
以下是 Apache Ranger 的組態物件分類KMS。
分類 | 描述 |
---|---|
ranger-kms-dbks-site | 變更 Ranger 的 dbks-site.xml 檔案中的值KMS。 |
ranger-kms-site | 變更 Ranger 的 ranger-kms-site.xml 檔案中的值KMS。 |
ranger-kms-env | 在 Ranger KMS環境中變更值。 |
ranger-kms-log4j | 變更 Ranger 的 kms-log4j.properties 檔案中的值KMS。 |
ranger-kms-db-ca | 變更 S3 for MySQL 與 Ranger SSL連線上的 CA 檔案值KMS。 |
考量
-
強烈建議您加密 Amazon RDS執行個體,以提高安全性。如需詳細資訊,請參閱加密 Amazon RDS 資源的概觀。
-
強烈建議您針對具有多個主要節點的每個 Amazon EMR叢集使用單獨的 MySQL 資料庫,以實現高安全性長條。
-
若要在具有多個主要節點的 Amazon EMR叢集HDFS上設定 中的透明加密,您必須在建立叢集時指定
hdfs-encryption-zones
分類。否則,KMS不會設定或啟動 Ranger。在具有多個主節點的 Amazon 叢集上,不支援在執行中的EMR叢集上重新設定hdfs-encryption-zones
分類或任何 Hadoop KMS組態分類。