Hadoopkms加密
一、目的:保证数据安全
二、简介:
Hadoop Key Management Server(KMS)是一个基于HadoopKeyProvider API编写的密钥管理服务器。他提供了一个client和一个server组件,client和server之间基于HTTP协议使用REST API通信。Client是一个KeyProvider的实现,使用KMS HTTP REST API与KMS交互。KMS和它的client有内置的安全机制,支持HTTP SPNEGO Kerberos认证和HTTPS安全传输。KMS是一个Java Web应用程序,运行在与Hadoop发行版绑定在一起的预先配置好的Tomcat服务器上。
HDFS 实现透明,端到端加密。配置完成后,用户往hdfs上存储数据的时候,无需用户做任何程序代码的更改(意思就是调用KeyProvider API ,用于在数据存入到HDFS上面的时候进行数据加密,解密的过程一样)。这意味着数据加密和解密由客户端完成的。HDFS 不会存储或访问未加密的数据或数据加密密钥(由kms管理)
1.core-site.xml 新增配置项
//配置客户端的地址
<property>
<name>hadoop.security.key.provider.path</name>
<value>kms://http@master:16000/kms</value>
</property>
2.hdfs-site.xml 新增配置项
//主要配置hdfs
<property>
<name>dfs.encryption.key.provider.uri</name>
<value>kms://http@master:16000/kms</value>
</property>
以上两项配置结束后,重启Hadoop,之后变更仅重启kms服务即可。
3.使用keytool生成的秘钥密码是123456 将密码直接写入到kms.keystore.password文件(文件名一定要是这个)
echo 123456 > ${HADOOP_HOME}/share/hadoop/kms/tomcat/webapps/kms/WEB-INF/classes/kms.keystore.password
${HADOOP_HOME}:表示Hadoop安装的路径
4.kms-env.sh 配置文件
export KMS_LOG=${KMS_HOME}/logs/kms
export KMS_HTTP_PORT=16000
export KMS_ADMIN_PORT=16001
三、创建秘钥
keytool -genkey -alias 'key2'
Enter keystore password:123456 #-----此处创建的密码,需要和上面kms.keystore.password配置文件的密码相同
Re-enter new password:
What is your first and last name?
[Unknown]: #-----这一部分内容,用户随意填写,可以不写
What is the name of your organizational unit?
[Unknown]:
What is the name of your organization?
[Unknown]:
What is the name of your City or Locality?
[Unknown]:
What is the name of your State or Province?
[Unknown]:
What is the two-letter country code for this unit?
[Unknown]:
Is CN=lch, OU=gdbd, O=gdbd, L=sz, ST=sz, C=sz correct?
[no]: yes #输入yes
Enter key password for <user_a_key>
(RETURN if same as keystore password):
Re-enter new password:
四、重启kms
kms.sh start
查看kms是否开启成功,有下面的红色的表示成功
jps
五、创建加密区
hadoop key create user_a_key #user_a_key为上面通过keytool创建的
hadoop key list #查看key详细信息
下面表示有四个,分别是user_a_key、key2、abc、key1
hadoop fs -mkdir /sub_key2 #创建文件目录
hdfs crypto -createZone -keyName key2 -path /sub_key2 #---将sub_key2目录用key2加密
hdfs crypto -listZones #---查看已加密区域
六.测试
向加密区添加文件,然后具体磁盘上看到数据已经加密。
数据存放在:/tmp/hadoop-root/dfs/data/current/BP-1866606423-192.168.228.13-1538973674360/
finalized/subdiro/subdiro/blk..........
-------------温馨提示错误查看日志
cd /usr/local/hadoop/logs