1、什么是HDFS透明加密?

HDFS Encryption Zone加密空间,即HDFS透明加密,是一种端到端的加密模式,其中的加/解密过程对于客户端来说是完全透明的。数据在客户端读操作的时候被解密,当数据被客户端写的时候被加密,所以HDFS服务端本身并不是一个主要的参与者。形象地说,在HDFS服务端,你看到的只是一堆加密的数据流。

这个功能作用就是保证处于加密空间内的数据不被非法查询,只有经过认证的客户端才能查看解密内容

2、Hadoop Key Management Server (KMS)

Hadoop KMS是一个基于Hadoop KeyProvider API的加密密钥管理服务器。它提供了一个使用REST API通过HTTP进行通信的客户端和服务器组件。客户端是一个KeyProvider实现与KMS交互使用KMS HTTP REST API。KMS及其客户端具有内置的安全性,它们支持HTTP SPNEGO Kerberos身份验证和HTTPS安全传输。KMS是一个Java Jetty网络应用程序。

3、Ranger 集成KMS

1、${rangerhome}/ranger-kms/install.properties设置如下

hadoop加密 hdfs传输加密_hdfs

2、install/lib中添加commons-lang3-3.4.jar和 commons-compress-1.19.jar (这是因为安装时报了相关jar包缺失的问题,没有包相关异常,不必做这一步)

hadoop加密 hdfs传输加密_客户端_02

3、/opt/beh/core/ranger/ranger-kms/ews/webapp/lib/curator-.jar替换成与${hadoop}/share/hadoop/common/lib中的一致。(这一步同样报了异常才进行,这里报的是curator-.jar包冲突)
4、修改配置文件dbks-site.xml、kms-site.xml及hdfs-site.xml
4.1 dbks-site.xml文件

<property>
        <name>ranger.ks.jpa.jdbc.password</name>
        <value>123456</value>
    </property>
    <property>
        <name>ranger.ks.jpa.jdbc.url</name>
        <value>jdbc:log4jdbc:mysql://数据库ip:3306/kms_82</value>
    </property>
    <property>
        <name>ranger.ks.jpa.jdbc.user</name>
        <value>root</value>
    </property>

4.2 kms-site.xml文件

<property>
    <name>hadoop.kms.key.provider.uri</name>
    <value>dbks://http@hadoop01.bonc.com:9292/kms</value>
    <description>
      URI of the backing KeyProvider for the KMS.
    </description>
  </property>
 <property>
    <name>hadoop.kms.authentication.type</name>
    <value>kerberos</value>
    <description>
      Authentication type for the KMS. Can be either "simple"
      or "kerberos".
    </description>
  </property>

  <property>
    <name>hadoop.kms.authentication.kerberos.keytab</name>
    <value>/opt/beh/metadata/key/hadoop.keytab</value>
    <description>
      Path to the keytab with credentials for the configured Kerberos principal.
    </description>
  </property>

  <property>
    <name>hadoop.kms.authentication.kerberos.principal</name>
    <value>HTTP/hadoop01.bonc.com@BONC.COM</value>
    <description>
      The Kerberos principal to use for the HTTP endpoint.
      The principal must start with 'HTTP/' as per the Kerberos HTTP SPNEGO specification.
    </description>
  </property>

4.3 ${hadoop}/etc/hadoop/core-site.xml配置文件添加以下配置
注:需重启hdfs

<property>
  <name>hadoop.security.key.provider.path</name>
<value>kms://http@hadoop01.bonc.com:9092/kms</value>
  <description>
    The KeyProvider to use when interacting with encryption keys used
    when reading and writing to an encryption zone.
  </description>
</property

5、执行./setup.sh安装ranger-kms.
6、执行ranger-kms start启动ranger-kms
7、添加key

hadoop加密 hdfs传输加密_hadoop_03

8、keyadmin用户登录Ranger配置kmsdev服务,保存。

hadoop加密 hdfs传输加密_客户端_04

9、rangeradmin、hadoop、keyadmin用户授权

hadoop加密 hdfs传输加密_hdfs_05


若没有rangeradmin用户则添加rangeradmin用户

hadoop加密 hdfs传输加密_客户端_06


10、测试连接

hadoop加密 hdfs传输加密_hadoop_07


11、测试HDFS加密

11.1 查看key信息

hadoop加密 hdfs传输加密_HTTP_08


11.2 创建空目录(hadoop用户)

hadoop fs -mkdir /jxtest

11.3 创建加密区间

hdfs  crypto -createZone -keyName key -path /jxtest

11.4 查看加密区间内容

hadoop fs -cat  /jxtest/users.txt

此时能正常查看

11.5 剔除hadoop用户

hadoop加密 hdfs传输加密_hadoop加密_09

此时不能正常查看

**

Ranger集成KMS采坑记录

**

1、执行setup.sh安装ranger-kms报jar包缺失问题

解决方案:在/opt/beh/core/ranger/ranger-kms/install/lib中添加commons-compress-1.19.jar和 commons-lang3-3.4.jar包。

2、启动ranger-kms时报NoSuchMethodError
org.apache.curator.framework.api.CreateBuilder.creatingParentsIfNeeded()Lorg/apache/curator/framework/api/ProtectACLCreateModeStatPathAndBytesable

hadoop加密 hdfs传输加密_客户端_10


解决方案:版本冲突导致,8.2版本仓库中curator-*的jar包相关版本如下。

hadoop加密 hdfs传输加密_HTTP_11


但是ranger-kms中的curator-*版本如下。

hadoop加密 hdfs传输加密_客户端_12


將ranger-kms中的curator-*的jar包版本統一为4.2.0

3、执行ranger-kms 启动在
/opt/beh/core/ranger/ranger-kms/ews/webapp/WEB-INF/classes/conf/ranger-kms-env-hadoopconfdir.sh文件中报错

export RANGER_HADOOP_CONF_DIR=2022-04-14 17:30:44,912  [E] 'hadoop_conf' not found in /opt/beh/core/ranger/ranger-kms/install.properties file while getting....!!

修改/opt/beh/core/ranger/ranger-kms/install.properties中的下列配置,指定hadoop配置文件目录

hadoop加密 hdfs传输加密_hdfs_13


4、在Ranger中测试连接时报以下异常,授予rangeradmin相应权限即可。

org.apache.ranger.plugin.client.HadoopException: {
	"RemoteException" : {
	"message" : "User:rangeradmin not allowed to do 'GET_KEYS'",
	"exception" : "AuthorizationException",
	"javaClassName" : "org.apache.hadoop.security.authorize.AuthorizationException"
	}
}.

keyadmin用户登录ranger设置如下。

hadoop加密 hdfs传输加密_客户端_14