HDFS透明加密原理
Posted 中兴大数据
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDFS透明加密原理相关的知识,希望对你有一定的参考价值。
文 | 张东涛
HDFS Encryption Zone加密空间,即HDFS透明加密,是一种端到端的加密模式,其中的加/解密过程对于客户端来说是完全透明的。数据在客户端读操作的时候被解密,当数据被客户端写的时候被加密,所以HDFS服务端本身并不是一个主要的参与者。形象地说,在HDFS服务端,你看到的只是一堆加密的数据流。
这个功能作用就是保证处于加密空间内的数据不被非法查询,只有经过认证的客户端才能查看解密内容。
准备知识
Encryption Zone是HDFS中的一个抽象概念,它表示此空间的内容在写的时候会被透明地加密,同时在读的时候,被透明地解密;用户往HDFS上存储数据的时候,无需用户做任何程序代码的更改(意思就是调用KeyProvider API ,用于在数据存入到HDFS上面的时候进行数据加密,解密的过程一样)。这意味着数据加密和解密由客户端完成的。HDFS不会存储或访问未加密的数据或数据加密密钥(由KMS管理)。
具体到细节:
每个Encryption Zone 会与每个Encryption Zone Key相关联(EZ Key),这个Key会在创建Encryption Zone的时候同时被指定。
每个Encryption Zone中的文件会有其唯一的Data Encryption Key数据加密Key,简称就是DEK。
DEK不会被HDFS直接处理,取而代之的是,HDFS只处理经过加密的DEK,就是Encrypted Data Encryption Key,缩写就是EDEK。
客户端询问KMS服务去解密EDEK,然后利用解密后得到的DEK去读/写数据。KMS利用存储的EZ Key来解密EDEK得到DEK。
在客户端向KMS服务请求时候,会有相关权限验证,不符合要求的客户端将不会得到解密好的DEK。而且KMS的权限验证是独立于HDFS的,是自身的一套权限验证。
上图说明EZ Key、DEK、EDEK、FILE、Encrypted File之间的关系
加密流程
准备工作:HDFS加密区创建时,会建立一个HDFS加密区(目录)、KMS服务里的一个Key及其EZ Key,及两者之间的关联。
步骤1:Client向NN(HDFS组件的NameNode服务进程)请求在HDFS某个加密区新建文件;
步骤2:NN向KMS请求此文件的EDEK,KMS用对应的EZ Key生成一个新的EDEK发送给NN;
步骤3:这个EDEK会被NN写入到此文件的元数据(metadata)信息中;
步骤4:NN 发送此EDEK给Client;
步骤5:Client发送EDEK给KMS请求解密,KMS用对应的EZ Key将EDEK解密为DEK发送给Client;
步骤6:Client用DEK加密文件内容发送给HDFS存储。
写流程总结:
可以看出,DEK是加解密某一个文件的密钥,而KMS里存储的EZ Key是用来加解密所有文件的密钥(DEK)的密钥。相对来说,EZ Key是更为重要的数据,所以只在KMS内部使用(EDEK的加解密只在KMS内部进行),不会被传递到外面使用。而HDFS服务端只能接触到EDEK,所以HDFS服务端都做不到解密加密区文件。
读流程类似,区别就是NN直接读取加密文件元数据里的EDEK返回给请求客户端,客户端一样的需要把EDEK发送给KMS获取DEK,再对加密内容解密读取。
KMS ACL用户权限配置
上面的步骤中有个关键点,如何保证某个合法用户能在KMS获取到自己的加密区文件的DEK,而屏蔽其他没有相关权限的用户。这个就和KMS服务的ACL权限配置有关。
在HDFS透明加密验证文档中有类似如下的配置:
KMS服务的配置文件kms-acls.xml:
<property>
<name>key.acl.key1.DECRYPT_EEK</name>
<value>admin1</value>
<description>
ACL for decryptEncryptedKey operations.
</description>
</property>
这就是在KMS中指定admin1用户有权限获取key1对应的HDFS加密区文件的DEK。也就是说,还是通过KMS来控制用户在加密区的权限,跟HDFS服务端还是没关系。
长按二维码关注
以上是关于HDFS透明加密原理的主要内容,如果未能解决你的问题,请参考以下文章