版本:

HDP:3.0.1.0

HBase:2.0.0

一、前言

为了避免第三方非法访问我们的重要数据,我们可以给HBase配置加密算法,目前HBase只支持使用aes加密算法,用于保护静态的HFile和WAL数据。

HBase配置的AES加密是一种端到端的加密模式,其中的加/解密过程对于客户端来说是完全透明的。数据在客户端读操作的时候被解密,当数据被客户端写的时候被加密。这个功能作用就是保证处于加密空间内的数据不被非法查询,只有经过认证的客户端才能查看解密内容。

详情可以参考HBase官方文档:http://hbase.apache.org/book.html#hbase.encryption.server

二、AES算法简介

这里只是对AES算法的一个简单说明。

AES是一个对称加密算法,如下图所示:

下面简单介绍下各个部分的作用与意义:

密钥K

用来加密明文的密码,在对称加密算法中,加密与解密的密钥是相同的。密钥为接收方与发送方协商产生,但不可以直接在网络上传输,否则会导致密钥泄漏,通常是通过非对称加密算法加密密钥,然后再通过网络传输给对方,实际中,一般是通过RSA加密AES的密钥,传输到接收方,接收方解密得到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。

三、配置步骤

接下来主要介绍需要在hbase-site.xml文件内增加哪些配置。最后通过ambari页面将自定义配置加到hbase-site.xml中。分为以下几步:

  1. 使用keytool实用程序为AES加密创建适当长度的密钥。

    cd /usr/hdp/3.0.1.0-187/hbase/conf/
    # 生成hbase.jks
    keytool -keystore hbase.jks -storetype jceks -storepass admin123 -genseckey -keyalg AES -keysize 128 -alias hbase
    
    • hbase.jks:表示生成的jks文件存储路径。
    • admin123:代表存储的密码。
    • AES:表示加密的类型,目前仅支持AES。
    • 128:表示密钥的长度,AES支持128位长度。
    • hbase:为密钥文件的别名。

  2. 在密钥文件上设置适当的权限,并将其分发给所有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。
    
  3. 配置HBase daemons

    在集群的hbase-site.xml中设置以下属性,配置HBase守护程序以使用由KeyStore文件支持的密钥提供程序或检索集群主密钥。在下面的示例中,admin123为密码,可自定义。

    # 自定义hbase-site:
    hbase.crypto.keyprovider=org.apache.hadoop.hbase.io.crypto.KeyStoreKeyProvider
    hbase.crypto.keyprovider.parameters=jceks:///usr/hdp/3.0.1.0-187/hbase/conf/hbase.jks?password=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
    
  4. 配置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
    
  5. 配置hbase-site.xml文件的权限。

    由于密钥库密码存储在hbase-site.xml中,因此需要确保只有HBase用户可以使用文件所有权和权限读取hbase-site.xml文件。

    chmod -R 600 hbase-site.xml
    
  6. 将上述配置添加到自定义hbase-site中,重启HBase服务。

  7. 创建加密类型为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加密/解密,正在研究。等实现了的话,再好好跟大家分享。

------

HBase配置AES加密相关推荐

  1. aes子密钥生成c语言_HBase配置AES加密

    特别说明:该专栏文章均来源自微信公众号<大数据实战演练>,欢迎关注! 版本: HDP:3.0.1.0 HBase:2.0.0 一.前言 为了避免第三方非法访问我们的重要数据,我们可以给HB ...

  2. postgres支持AES加密配置

    1.安装pgrypto扩展插件 postgresql在9.6之后支持extend扩展插件,pgrypto支持各种加密算法,执行以下命令: create extension pgcrypto; 但是会出 ...

  3. 理解AES加密解密的使用方法

    很多人对于AES加密并不是很了解,导致互相之间进行加密解密困难. 本文用简单的方式来介绍AES在使用上需要的知识,而不涉及内部算法.最后给出例子来帮助理解AES加密解密的使用方法. AES的麻烦 相比 ...

  4. Javascript实现AES加密解密(ECB/CBC)

    环境配置 js文件https://code.google.com/archive/p/crypto-js/downloads 在线AES加密解密地址http://tool.chacuo.net/cry ...

  5. 使用AES加密配置文件

    考虑到数据库连接密码直接配置在xml中,项目流转出现密码泄露隐患,这里直接对密码进行AES加密 <!-- 配置 读取properties文件 jdbc.properties -->    ...

  6. php AES加密解密实例

    实例代码 <?phpclass Aes{protected $key='';protected $iv='';/*** @param $key* @param $iv* @return $thi ...

  7. nodejs php aes加密解密,nodejs aes 加解密实例

    如下所示: 'use strict'; const crypto = require('crypto'); /** * AES加密的配置 * 1.密钥 * 2.偏移向量 * 3.算法模式CBC * 4 ...

  8. Python中的AES加密

    文章目录 AES 加密 一.前言 1. 简介 2. 加密模式 3. 环境配置 二.算法实现 AES 加密 一.前言 1. 简介 AES,高级加密标准(Advanced Encryption Stand ...

  9. Swift AES加密

    AES是对称加密 Swift开发是使用CryptoSwift第三方库 配置方法:在Podfile文件中添加 pod 'CryptoSwift', '~> 1.6.0' pod install即可 ...

最新文章

  1. redis失效了mysql扛不住_我是Redis,MySQL大哥被我害惨了!
  2. unity, 内存profile,ImageEffects Temp和Unity GI SystemTex RGBM
  3. shiro教程:整合ehcache缓存
  4. 掌握python编程语言tensorflow_手把手教你eclipse集成Python语言+Tensorflow环境
  5. 「Apollo」Cyber RT 学习笔记
  6. 如何确定JTAG好坏?JTAG到底是什么?
  7. mysql数据库密码为空_注意MySQL数据库用户root密码为空
  8. 工业控制系统ICS网络安全简析
  9. 2.图像作为函数 | 初探数字图像_3
  10. redhat6.5配置阿里云yum源
  11. 跟小静读CLR via C#(10)-参数
  12. 例题6-4 Broken Keyboard UVa11988
  13. HDU2206:IP的计算
  14. linux如何进入redis客户端,如何在linux下安装redis及客户端的连接
  15. 【论文解读】 FPGA实现卷积神经网络CNN(二): Optimizing FPGA-based Accelerator Design for DCNN
  16. 思古解析js静态逆向分析
  17. 关于钓鱼网站的实现原理与技术
  18. 四年级计算机课的检讨,四年级下册信息技术教学反思.doc
  19. golang报错: WaitGroup is reused before previous Wait has returned
  20. java liferay,用一个简单的Java code获取当前用户的Liferay

热门文章

  1. 虚拟机CentOS无网络连接
  2. 雨听 | 英语学习笔记(六)~作文范文:公务员考试的热潮
  3. Web 前端从入门菜鸟到实践老司机所需要的资料与指南合集
  4. 基于Logistic混沌序列和DNA编码的图像加解密算法仿真
  5. SQL中的连接查询与嵌套查询
  6. 面试蚂蚁金服(意外拿到offer)分享四面经历,从线程锁到数据库
  7. linux下的hiredis的安装和使用(一)
  8. spring定时任务:@Scheduled
  9. select中选中option的方法
  10. 15个很有趣的开源项目推荐