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设置如下
2、install/lib中添加commons-lang3-3.4.jar和 commons-compress-1.19.jar (这是因为安装时报了相关jar包缺失的问题,没有包相关异常,不必做这一步)
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
8、keyadmin用户登录Ranger配置kmsdev服务,保存。
9、rangeradmin、hadoop、keyadmin用户授权
若没有rangeradmin用户则添加rangeradmin用户
10、测试连接
11、测试HDFS加密
11.1 查看key信息
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用户
此时不能正常查看
**
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
解决方案:版本冲突导致,8.2版本仓库中curator-*的jar包相关版本如下。
但是ranger-kms中的curator-*版本如下。
將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配置文件目录
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设置如下。