HBase配置AES加密

HBase Hadoop 算法 ??? 大數據實戰演練 2019-04-20

特別說明:該專欄文章均來源自微信公眾號《大數據實戰演練》,歡迎關注!

版本:

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是一個對稱加密算法,如下圖所示:

HBase配置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:為密鑰文件的別名。
HBase配置AES加密

設置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 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

配置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服務。

HBase配置AES加密

創建加密類型為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--

碼字不易,如果您覺得文章寫得不錯,請關注作者~ 您的關注是我寫作的最大動力

相關推薦

推薦中...