欢迎光临
一直在努力

Hadoop Key Management Server (KMS)配置及测试

前言

1). 官方说明:

Hadoop KMS是一个基于 Hadoop的 KeyProvider API的用密码写的 key 管理server。Client是一个KeyProvider的实现,使用KMS HTTP REST API与KMS交互。
KMS和它的客户端内置安全和它们支持HTTP SPNEGO Kerberos 身份验证和HTTPS安全转换.
KMS是一个Java Web应用程序,运行在与Hadoop发行版绑定在一起的预先配置好的Tomcat服务器上。
注意:Kms是一个密钥管理服务器,它并不负责加密文件

2). 透明加密:

HDFS 实现透明,端到端加密。配置完kms后,用户往hdfs上存储数据的时候,无需用户做任何程序代码的更改(意思就是调用KeyProvider API ,用于在数据存入到HDFS上面的时候进行数据加密,解密的过程一样)。这意味着数据加密和解密由客户端完成的。

一、背景环境

1.1、版本说明

Hadoop: hadoop-2.8.0

Java:jdk1.8.0_131

1.2、Hadoop集群环境

使用五台服务器已完成Hadoop集群搭建,测试可使用单台虚拟节点。

节点 IP 作用 备注
master 10.8.1.220 Namanode,DataNode
Slave1 10.8.1.221 DataNode
Slave2 10.8.1.222 DataNode
Slave3 10.8.1.223 DataNode
Slave4 10.8.1.224 DataNode

1.3、开放端口

http://10.8.1.220:50070                 #Hadoop webui 访问界面,可以看到hdfs存储状态及文件浏览。

二、配置文件

 

共涉及core-site.xml,hdfs-site.xml ,kms-site.xml,kms-env.sh,kms-acls.xml五个文件

core-site.xml 新增配置项

<property>
<name>hadoop.security.key.provider.path</name>
<value>kms://http@master:16000/kms</value>
</property>

hdfs-site.xml 新增配置项

<property>
<name>dfs.encryption.key.provider.uri</name>
<value>kms://http@master:16000/kms</value>
</property>

以上两项配置结束后,重启Hadoop,之后变更仅重启kms服务即可。

<!-- KMS Backend KeyProvider -->

<property>
<name>hadoop.kms.key.provider.uri</name>
<value>jceks://file@/${user.home}/kms.keystore</value>
<description>
URI of the backing KeyProvider for the KMS.
</description>
</property>

<property>
<name>hadoop.security.keystore.java-keystore-provider.password-file</name>
<value>kms.keystore.password</value>                      #秘钥密码存储文件,需要手动创建,放在kms的tomcat下classes文件夹下
<description>
If using the JavaKeyStoreProvider, the file name for the keystore password.
</description>
</property>

使用keytool生成的秘钥密码是123456  将密码直接写入到kms.keystore.password文件

echo  123456  > ${HADOOP_HOME}/share/hadoop/kms/tomcat/webapps/kms/WEB-INF/classes/kms.keystore.password

kms-env.sh        配置文件

export KMS_LOG=${KMS_HOME}/logs/kms

export KMS_HTTP_PORT=16000

export KMS_ADMIN_PORT=16001

kms-acls.xml 此文件随时会做变更,主要配置key和用户对应关系

根据测试需求,新增user_a_key对应user_a,user_b_key对应user_b

 <property>
     <name>key.acl.user_a_key.DECRYPT_EEK</name>
          <value>user_a</value>
          <description>
          ACL for decryptEncryptedKey operations.
          </description>
 </property>
 <property>
      <name>key.acl.user_b_key.DECRYPT_EEK</name>
         <value>user_b</value>
         <description>
         ACL for decryptEncryptedKey operations.
         </description>
 </property>

 

三、创建秘钥

 

keytool -genkey  -alias 'user_a_key'

Enter keystore password:123456        #-----此处创建的密码,需要和上面kms.keystore.password配置文件的密码相同

Re-enter new password:

What is your first and last name?

[Unknown]:  test          #-----这一部分内容,用户随意填写

What is the name of your organizational unit?

[Unknown]: test

What is the name of your organization?

[Unknown]: test

What is the name of your City or Locality?

[Unknown]: test

What is the name of your State or Province?

[Unknown]: test

What is the two-letter country code for this unit?

[Unknown]: test

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:

相同方式创建user_b_key

四、创建加密区

hadoop key create user_a_key      #user_a_key为上面通过keytool创建的

hadoop key list   #查看key详细信息

hadoop fs -mkdir /user_a     #创建文件目录

hadoop fs -chown user_a:test_group /user_a            #配置user_a目录权限

hdfs crypto -createZone -keyName user_a_key -path /user_a  #---设置/user_a为加密区

Added encryption zone /user_a

hdfs crypto -listZones      #---查看已加密区域

18/06/04 17:01:30 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

/user_a                  user_a_key

相同方式创建user_b目录并使用user_b_key对目录加密

五、加密前后对比

su – user_c

使用user_c用户上传文件test.txt至user_a及user_b文件目录,均报错没有权限

将test.txt上传至user_c文件夹

切换至user_a用户,将test.txt文件上传至/user_a文件夹,切换至user_b用户,将test.txt文件上传至/user_b文件夹。

使用user_a用户读取/user_a/test.txt文件可正常显示,读取/user_b/test.txt文件提示没有权限

hdfs dfs -cat /.reserved/raw/user_a/test.txt   #显示文件已乱码

hdfs dfs -cat /.reserved/raw/user_c/test.txt   为经过加密的文件夹内文件显示正常

六、总结

1)、正确的配置及创建秘钥保证了测试的顺利通过,通过命令行方式来测试还是比较麻烦,需要ui支持。

2)、Kms和Hdfs配合使用的作用旨在补全hdfs权限管控的安全漏洞,正常使用hdfs时,用户感觉不到文件加密的存在,所以叫“hdfs透明加密”。

本站文章均为原创,转载请注明出处:运维资源 » Hadoop Key Management Server (KMS)配置及测试

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

QEDEV 运维分享 运维实战

联系我们关于作者