Amazon HDFS 上有透明加密 EMR - Amazon EMR

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

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 keyhdfs 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" } } ]
在主节点上手动创建加密区域及其密钥
  1. 使用高于 4.1.0 的 Amazon EMR 版本启动您的集群。

  2. 使用 Connect 连接到集群的主节点SSH。

  3. 在 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 要求您的密钥名称必须为小写。如果您使用的密钥包含大写字符,则您的集群将在启动过程中失败。

  4. 在中创建加密区域路径HDFS。

    $ hadoop fs -mkdir /myHDFSPath2
  5. 使用您创建的密钥将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 集群实现加密服务,并且可以充当 Hadoop 集群的密钥供应商。Amazon HDFS 上有透明加密 EMR当您在启动集群时选择 Hadoop 应用程序时,会默认安装并启用KMS亚马逊EMR中的 Hadoop。EMR除了临时缓存之外,Hadoop 本身KMS不存储密钥。Hadoop KMS 充当密钥提供商和客户受托人之间对后备密钥库的代理,它不是密钥库。为 Hadoop 创建的默认密钥库KMS是 Java 加密扩展 ()。 KeyStore JCEKS还包括JCE无限强度政策,因此您可以创建所需长度的密钥。Hadoop KMS 还支持一系列ACLs控制密钥访问权限和密钥操作的方式,独立于其他客户端应用程序,例如。HDFSAmazon 中的默认密钥长度EMR为 256 位。

要配置 HadoopKMS,请使用 hadoop-kms-site 分类来更改设置。要进行配置ACLs,您可以使用分类 kms-acls。

有关更多信息,请参阅 Hadoop 文档KMS。Hadoop 用KMS于 Hadoop 透明加密HDFS。要了解有关HDFS透明加密的更多信息,请参阅 Apache Hadoop 文档中的HDFS透明加密主题。

注意

在亚马逊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 KMS 用于具有多个主节点的亚马逊EMR集群中,用于在中进行透明加密。HDFS

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 配置分类。