00-1010版本:
HDP 3 . 0 . 1 . 0
糖化血红蛋白:2.0.0
00-1010为了防止第三方非法访问我们的重要数据,我们可以为HBase配置加密算法。目前,HBase仅支持aes加密算法来保护静态HFile和WAL数据。
由HBase配置的AES加密是一种端到端的加密模式,加密/解密过程对客户端完全透明。数据在客户端读取时解密,在客户端写入时加密。该功能是为了确保加密空间中的数据不被非法查询,只有经过身份验证的客户端才能查看解密的内容。
详情请参考HBase官方文件:http://hbase.apache.org/book.html#hbase.encryption.server.
特别说明:该专栏文章均来源自微信公众号《大数据实战演练》,欢迎关注!
这里只是简单介绍一下AES算法。
AES是一种对称加密算法,如下图:所示。
以下是各部分功能和意义的简要介绍:
k键
用于加密明文的密码。在对称加密算法中,加密和解密密钥是相同的。密钥由接收方和发送方协商生成,但不能在网络上直接传输,否则会导致密钥泄露。通常,密钥通过非对称加密算法加密,然后通过网络传输给对方。事实上,AES密钥由RSA加密并传输到接收器。接收者解密AES密钥,然后发送者和接收者用AES密钥进行通信。
密钥一定不能泄露,否则攻击者会还原密文,窃取机密数据。
AES加密功能
设AES加密函数为E,那么C=E(K,P),其中P为明文,K为密钥,C为密文。也就是说,如果明文p和密钥k作为加密函数的参数输入,加密函数e将输出密文C.
AES解密功能
设AES解密函数为D,那么P=D(K,C),其中C为密文,K为密钥,P为明文。也就是说,如果输入密文C和密钥K作为解密函数的参数,解密函数将输出明文p。
00-1010接下来主要介绍在hbase-site.xml文件中需要添加哪些配置。最后,通过ambari页面将自定义配置添加到hbase-site.xml中。分为以下步骤:
使用密钥工具实用程序为AES加密创建适当长度的密钥。CD/usr/HDP/3 . 0 . 1 . 0-187/hbase/conf/
#生成hbase.jks
keytool-keystore hbase . jks-store type jceks-store pass admin 123-genseckey-keyalg AES-keysize 128-别名hbase
Hbase.jks:指示生成的jks文件的存储路径。Admin123:表示存储的密码。AES:表示加密的类型,目前只支持AES。18:表示密钥长度,AES支持128位长度。Hbase:是密钥文件的别名。
设置hbase.jks权限
对密钥文件设置适当的权限,并将其分发给所有HBase服务器。最后一个命令在/usr/HDP/3 . 0 . 1 . 0-187/hbase/conf/目录中创建了一个名为hbase.jks的文件。设置该文件的权限和所有权,以便只有HBase服务帐户的用户可以读取该文件并将密钥安全地分发到所有HBase服务器。
#在每台机器上执行以下命令:
CD/usr/HDP/3 . 0 . 1 . 0-187/hbase/conf
chmod 600 hbase.jks
chown hbase:hadoop hbase.jks
#通过scp命令将文件传输到每个节点的指定位置。
scp-r hbase . jks root @ xxx:/usr/HDP/3 . 0 . 1 . 0-187/hbase/conf
#复制后,还需要设置文件的相关权限,600。
配置HBase守护程序
在群集的HBase-site.xml中设置以下属性,配置HBase守护程序以使用KeyStore文件支持的密钥提供程序或检索群集主密钥。在以下示例中,admin123是密码,可以自定义。
#自定义网站:
hbase . crypto . key provider=org . Apache . Hadoop . hbase . io . crypto . KeyStoreKeyprovider
hbase . crypto . key provider . parameters=jceks 3360///usr/HDP/3 . 0 . 1 . 0-187/hbase/conf/hbase . jks?密码=admin123
默认情况下,HBase服务帐户名将用于解析群集主密钥。但是,您可以使用任何
意别名(在keytool命令中)存储它。在这种情况下,请将以下属性设置为您使用的别名。
# 自定义hbase-site:
hbase.crypto.master.key.name=hbase
您还需要确保您的HFile使用HFile v3,以便使用透明加密。这是HBase 1.0以后的默认配置。对于以前的版本,请在hbase-site.xml文件中设置以下属性。
# 自定义hbase-site:
hfile.format.version=3
配置Configure WAL encryption
通过设置以下属性,在每个RegionServer的hbase-site.xml中配置WAL加密。您也可以将这些包含在HMaster的hbase-site.xml中,但是HMaster没有WAL并且不会使用它们。
# 自定义hbase-site:
hbase.regionserver.hlog.reader.impl=org.apache.hadoop.hbase.regionserver.wal.SecureProtobufLogReader
hbase.regionserver.hlog.writer.impl=org.apache.hadoop.hbase.regionserver.wal.SecureProtobufLogWriter
hbase.regionserver.wal.encryption=true
配置hbase-site.xml文件的权限。
由于密钥库密码存储在hbase-site.xml中,因此需要确保只有HBase用户可以使用文件所有权和权限读取hbase-site.xml文件。
chmod -R 600 hbase-site.xml
将上述配置添加到自定义hbase-site中,重启HBase服务。
创建加密类型为AES的表
格式:create ‘\<table name>‘, {NAME => ‘\<column family name>‘, ENCRYPTION => ‘AES’}
create ‘hbase_1102′, {NAME=>’cf1’, ENCRYPTION => ‘AES’}, {NAME=>’cf2′}
put’hbase_1102′, ‘001’,’cf1:name’,’Tom’
put’hbase_1102′, ‘001’,’cf1:gender’,’man’
put’hbase_1102′, ‘001’,’cf2:chinese’,’90’
put’hbase_1102′, ‘001’,’cf2:math’,’91’
put ‘hbase_1102’, ‘001’,’cf2:math’,’91’, 1557566858555
# 删除hbase的一条数据
delete ‘hbase_1102’, ‘001’, ‘cf2:math’
# 根据时间戳来获取数据
get ‘hbase_1102′,’001′,{COLUMN=>’cf2:math’,TIMESTAMP=>1555768605232}
四、总结
HBase目前只支持AES加密,它是一种端到端的加密模式,其中的加/解密过程对于客户端来说是完全透明的。数据在客户端读操作的时候被解密,当数据被客户端写的时候被加密。这个功能作用就是保证处于加密空间内的数据不被非法查询,只有经过认证的客户端才能查看解密内容。
关于HBase自定义扩展加密方式,比如支持SMS4加密/解密,正在研究。等实现了的话,再好好跟大家分享。
–END–
码字不易,如果您觉得文章写得不错,请关注作者~ 您的关注是我写作的最大动力