本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon HDFS 上有透明加密 EMR
透明加密是通过使用加密区域来实现的,HDFS加密区域是您定义的HDFS路径。每个加密区域都有其自己的密钥 (存储在使用 hdfs-site
配置分类指定的密钥服务器中)。
从 Amazon EMR 发行版 4.8.0 开始,您可以使用亚马逊EMR安全配置更轻松地为集群配置数据加密设置。安全配置提供的设置可以保护亚马逊弹性区块存储 (AmazonEBS) 存储卷中的传输数据和静态EMRFS数据以及 Amazon S3 中的数据。有关更多信息,请参阅 Amazon EMR 管理指南中的加密传输和静态数据。
亚马逊KMS默认EMR使用 Hadoop;但是,您可以使用另一个来实现KMS该 KeyProvider API操作。HDFS加密区域中的每个文件都有自己唯一的数据加密密钥,该密钥由加密区域密钥加密。HDFS由于加密和解密活动仅在客户端进行,因此当数据写入加密区域时,会对数据进行加密 end-to-end (静态和传输中)。
您无法在加密区域之间移动文件,也无法将文件从加密区域移至未加密路径。
NameNode 和HDFS客户端通过该操作与 HadoopKMS(或KMS您配置的替代方案)进行交互。 KeyProvider APIKMS负责将加密密钥存储在备用密钥库中。此外,Amazon 还EMR包含JCE无限强度政策,因此您可以创建所需长度的密钥。
有关更多信息,请参阅 Hadoop HDFS 文档中的透明加密
注意
在亚马逊KMS中EMR,Hadoop KMS 默认HTTPS不启用 over。有关如何启KMS用的更多信息HTTPS,请参阅 Hadoop 文档KMS
配置HDFS透明加密
您可以EMR通过创建密钥和添加加密区域在 Amazon 中配置透明加密。有几种方式可以实现:
-
在创建集群时使用 Amazon EMR 配置API操作
-
在 command-runner.jar 中使用 Hadoop JAR 步骤
-
登录到 Hadoop 集群的主节点并使用
hadoop key
和hdfs crypto
命令行客户端 -
使用 Hadoop 和 REST APIs KMS HDFS
有关的更多信息 RESTAPIs,请参阅 Hadoop KMS 和的相应文档。HDFS
要在创建集群时使用创建加密区域及其密钥 CLI
配置API操作中的hdfs-encryption-zones
分类允许您在创建集群时指定密钥名称和加密区域。Amazon 在您的集群KMS上的 Hadoop 中EMR创建此密钥并配置加密区域。
-
使用以下命令创建集群。
aws emr create-cluster --release-label
emr-7.2.0
--instance-type m5.xlarge --instance-count 2 \ --applications Name=App1
Name=App2
--configurations https://s3.amazonaws.com/mybucket/myfolder/myConfig.json注意
为了便于读取,包含 Linux 行继续符(\)。它们可以通过 Linux 命令删除或使用。对于 Windows,请将它们删除或替换为脱字号(^)。
myConfig.json
:[ { "Classification": "hdfs-encryption-zones", "Properties": { "/myHDFSPath1": "path1_key", "/myHDFSPath2": "path2_key" } } ]
在主节点上手动创建加密区域及其密钥
-
使用高于 4.1.0 的 Amazon EMR 版本启动您的集群。
-
使用 Connect 连接到集群的主节点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
要配置 HadoopKMS,请使用 hadoop-kms-site 分类来更改设置。要进行配置ACLs,您可以使用分类 kms-acls。
有关更多信息,请参阅 Hadoop 文档KMS
注意
在亚马逊KMS中EMR,Hadoop KMS 默认HTTPS不启用 over。要了解如何启用 KMSHTTPS,请参阅 Hadoop 文档KMS
重要
Hadoop KMS 要求您的密钥名称必须为小写。如果您使用的密钥包含大写字符,则您的集群将在启动过程中失败。
在亚马逊中配置 Hadoop KMS EMR
如果使用亚马逊EMR发布的4.6.0或更高版本,则为9700,kms-http-port
为9701。kms-admin-port
您可以在创建集群KMS时使用API亚马逊EMR版本的配置来配置 Hadoop。以下是 Hadoop KMS 可用的配置对象分类:
Hadoop 配置分类 KMS | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
分类 | 文件名 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
hadoop-kms-site | kms-site.xml |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
hadoop-kms-acls | kms-acls.xml |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
hadoop-kms-env | kms-env.sh |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
hadoop-kms-log4j | kms-log4j.properties |
要使用 Hadoop 来设置 Hadoop KMS ACLs CLI
-
使用以下命令ACLs使用 Hadoop KMS 创建集群:
aws emr create-cluster --release-label
emr-7.2.0
--instance-type m5.xlarge --instance-count 2 \ --applications Name=App1
Name=App2
--configurations https://s3.amazonaws.com/mybucket/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
-
使用以下命令创建 Hadoop KMS
hadoop.kms.cache.enable
设置为false
的集群:aws emr create-cluster --release-label
emr-7.2.0
--instance-type m5.xlarge --instance-count 2 \ --applications Name=App1
Name=App2
--configurations https://s3.amazonaws.com/mybucket/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.2.0
--instance-type m5.xlarge --instance-count 2 \ --applications Name=App1
Name=App2
--configurations https://s3.amazonaws.com/mybucket/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
RDS对于具有多个主节点的亚马逊EMR集群,Apache Ranger 将其根密钥和加密区域 (EZ) 密钥KMS存储在您的亚马逊中。要在具有多个主节点的 Amazon EMR 集群HDFS上启用透明加密,您必须提供以下配置。
-
Amazon RDS 或者你自己的 SQL My Server 连接URL来存储 Ranger KMS 根密钥和 EZ 密钥
-
“我的” 的用户名和密码 SQL
-
Ranger KMS 根密钥的密码
-
用于SSL连接到 “我的SQL服务器” 的证书颁发机构 (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 Rang KMS er 的配置对象分类。
Hadoop 配置分类 KMS | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
分类 | 描述 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ranger-kms-dbks-site | 更改 Ranger KMS 的 dbks-site.xml 文件中的值。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ranger-kms-site | 更改 Ran ranger-kms-site KMS ger .xml 文件中的值。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ranger-kms-env | 在游侠KMS环境中更改值。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ranger-kms-log4j | 更改 Ranger 的 kms-log4j.properties 文件中的值。KMS | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ranger-kms-db-ca | 更改 S3 上我与 Ranger SQL SSL KMS 连接的 CA 文件值。 |
注意事项
-
强烈建议您加密您的 Amazon RDS 实例以提高安全性。有关更多信息,请参阅加密 Amazon RDS 资源概述。
-
强烈建议您为每个具有多个主节点的 Amazon EMR 集群使用单独的 “我的SQL数据库”,以实现高安全性。
-
要在具有多个主节点的 Amazon EMR 集群HDFS上配置透明加密,您必须在创建集群时指定
hdfs-encryption-zones
分类。否则,KMS将无法配置或启动 Ranger。具有多个主节点的 Ama EMR zon 集群不支持在正在运行的集群上重新KMS配置hdfs-encryption-zones
分类或任何 Hadoop 配置分类。