加密HFile和WAL內容
須知
- 設置HFile和WAL為SMS4加密或AES加密方式對系統的影響較大,一旦操作失誤會導致數據丟失。不推薦使用此功能。
- 使用Bulkload批量導入的數據不支持加密。
缺省情況下,HBase中的HFile和WAL(Write ahead log)內容是不加密的。如果用戶需要對其進行加密,可通過如下操作進行配置。
1.在任一安裝HBase服務節點,使用omm用戶執行如下命令創建密鑰。
sh ${BIGDATA_HOME}/FusionInsight_HD_8.1.0.1/install/FusionInsight-HBase-2.2.3/hbase/bin/hbase-encrypt.sh /hbase.jks
- /< path >/hbase.jks 表示生成的jks文件存儲路徑。
- < type >表示加密的類型,支持SMS4或AES。
- < length >表示密鑰的長度,SMS4支持16位長度,AES支持128位長度。
- < alias > 為密鑰文件的別名,第一次生成時請使用缺省值“omm”。
例如,生成SMS4加密的密鑰執行:
sh ${BIGDATA_HOME}/FusionInsight_HD_8.1.0.1/install/FusionInsight-HBase-2.2.3/hbase/bin/hbase-encrypt.sh /home/hbase/conf/hbase.jks SMS4 16 omm
生成AES加密的密鑰執行:
sh ${BIGDATA_HOME}/FusionInsight_HD_8.1.0.1/install/FusionInsight-HBase-2.2.3/hbase/bin/hbase-encrypt.sh /home/hbase/conf/hbase.jks AES 128 omm
說明
集群的操作用戶需要有*/hbase.jks*目錄的“rw”權限,且要求目錄已存在。
運行命令后需要再輸入4遍相同的 。其中3中進行加密的密碼與此步驟的密碼相同。
2.將生成的密鑰文件分發到集群中所有節點的相同目錄下,并為omm用戶配置該文件的讀寫權限。
說明
請管理員根據企業安全要求,選擇安全的操作步驟分發密鑰。
如果在使用過程中,有節點出現密鑰文件丟失的情況,請按照此步驟從其他節點拷貝到該節點。
3.在FusionInsight Manager界面中,設置“hbase.crypto.keyprovider.parameters.encryptedtext”參數的值為密文密碼,設置“hbase.crypto.keyprovider.parameters.uri”參數的值為密鑰路徑和名稱。
- “hbase.crypto.keyprovider.parameters.uri”格式為: jceks:// <key_Path_Name> 。
<key_Path_Name> 填寫密鑰的存儲路徑,例如“/home/hbase/conf/hbase.jks”則對應參數值為“jceks:///home/hbase/conf/hbase.jks”。
- “hbase.crypto.keyprovider.parameters.encryptedtext”格式為: <encrypted_password> 。
<encrypted_password> 填寫創建密鑰時的密文密碼,參數值顯示為密文。使用omm用戶在安裝HBase服務的節點,執行如下命令獲取對應加密后的密碼:
sh ${BIGDATA_HOME}/FusionInsight_HD_8.1.0.1/install/FusionInsight-HBase-2.2.3/hbase/bin/hbase-encrypt.sh
說明運行命令后需要輸入。該密碼與1中手動輸入的密碼相同。
4.在FusionInsight Manager界面中,設置“hbase.crypto.key.algorithm”參數值為“SMS4”或“AES”,使HFile的內容采用SMS4或AES的方式加密。
5.在FusionInsight Manager界面中,設置“hbase.crypto.wal.algorithm”參數值為“SMS4”或“AES”,使WAL的內容采用SMS4或AES的方式加密。
6.在FusionInsight Manager界面中,將“hbase.regionserver.wal.encryption”參數值修改為“true”。
7.保存設置,并重啟HBase服務使其生效。
8.在創建HBase表時,需要通過設置加密方式,表示加密的類型。
- 通過命令行創建表時,直接設置加密方式為SMS4或AES。
create ' < table name > ', { NAME => 'd' , ENCRYPTION => ' < type >' }
- 使用代碼創建表時,在代碼中添加如下信息設置加密方式為SMS4或AES。
public void testCreateTable()
{
String tableName = "user";
Configuration conf = getConfiguration();
HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(tableName));
HColumnDescriptor hcd = new HColumnDescriptor("info");
//設置加密方式為SMS4或AES。
hcd.setEncryptionType("<type>");
htd.addFamily(hcd);
HBaseAdmin admin = null;
try
{
admin = new HBaseAdmin(conf);
if(!admin.tableExists(tableName))
{
admin.createTable(htd);
}
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
if(admin != null)
{
try
{
admin.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
9.如果用戶已按照1到7配置了SMS4或AES加密,但是在執行8創建表時,未設置對應的加密參數,使得插入的數據未經加密。
此時,您可以執行如下步驟對之前插入的數據進行加密。
a.針對表執行flush動作,將內存中的數據導入到HFile中。
flush '<table_name>'
b.執行以下步驟修改表屬性。
disable '<table_name>'
alter '<table_name>', NAME=> '<column_name>', ENCRYPTION => ' < type > '
enable '<table_name>'
c.插入一條新的數據,然后flush表。
說明必須要插入一條新的數據,HFile才會生成新的HFile,使得之前插入的未加密數據進行重寫加密。
put'
' ,'id2','f1:c1','value222222222222222222222222222222222'flush'
'
須知
執行此步驟時,HBase表是被禁用的,不能提供表服務。請謹慎使用。
修改密鑰文件
須知
修改密鑰文件的操作對系統影響較大,一旦操作失誤會導致數據丟失。不推薦使用此功能。
在加密HFile和WAL內容操作中需要生成對應的密鑰文件并設置密碼,為確保系統安全,在運行一段時間后,用戶可修改密鑰,使用新的密鑰文件對HFile和WAL內容進行加密。
1.使用omm用戶執行如下命令生成新的密鑰文件。
sh ${BIGDATA_HOME}/FusionInsight_HD_8.1.0.1/install/FusionInsight-HBase-2.2.3/hbase/bin/hbase-encrypt.sh /hbase.jks
- < path > /hbase.jks :表示生成的hbase.jks文件的存儲路徑。該路徑和文件名稱需與加密HFile和WAL內容章節生成的密鑰文件相同。
- < alias-new > :表示密鑰文件的別名,請使用與舊密鑰文件不同的名字。
- < type > 表示加密的類型,支持SMS4或AES。
- < length > 表示密鑰的長度,SMS4支持16位長度,AES支持128位長度。
例如,生成SMS4加密的密鑰執行:
sh ${BIGDATA_HOME}/FusionInsight_HD_8.1.0.1/install/FusionInsight-HBase-2.2.3/hbase/bin/hbase-encrypt.sh /home/hbase/conf/hbase.jks SMS4 16 omm_new
生成AES加密的密鑰執行:
sh ${BIGDATA_HOME}/FusionInsight_HD_8.1.0.1/install/FusionInsight-HBase-2.2.3/hbase/bin/hbase-encrypt.sh /home/hbase/conf/hbase.jks AES 128 omm_new
說明
集群的操作用戶需要有*/hbase.jks*目錄的“rw”權限,且要求目錄已存在。
運行命令后需要再輸入3遍相同的 ,該密碼表示密鑰文件的密碼,請直接使用舊文件的密碼,不會產生安全風險。
2.將生成的密鑰文件分發到集群中所有節點的相同目錄下,并為omm用戶配置該文件的讀寫權限。

說明請管理員根據企業安全要求,選擇安全的操作步驟分發密鑰。
3.在FusionInsight Manager的HBase服務配置界面中增加自定義配置項,設置“hbase.crypto.master.key.name”為“omm_new”,設置“hbase.crypto.master.alternate.key.name”為“omm”,然后保存配置。


4.重啟HBase服務,使配置生效。
5.在HBase shell中執行major compact命令,生成基于新的加密算法的HFile文件。
major_compact '<table_name>'
6.從HMaster的網頁中可以查看到major compact進度。


7.所有的“Compaction Progress”都為100%且“Remaining KVs”都為0時,使用omm用戶執行如下命令銷毀舊的密鑰文件:
sh ${BIGDATA_HOME}/FusionInsight_HD_8.1.0.1/install/FusionInsight-HBase-2.2.3/hbase/bin/hbase-encrypt.sh /hbase.jks
- < path >/hbase.jks :表示生成的“hbase.jks”文件的存儲路徑。該路徑和文件名稱需與加密HFile和WAL內容章節生成的密鑰文件相同。
- < alias-old > :表示要刪除的舊密鑰文件的別名。
例如:
sh ${BIGDATA_HOME}/FusionInsight_HD_8.1.0.1/install/FusionInsight-HBase-2.2.3/hbase/bin/hbase-encrypt.sh /home/hbase/conf/hbase.jks omm
說明集群的操作用戶需要有*/hbase.jks*目錄的“rw”權限,且要求目錄已存在。
8.再執行2,重新分發更新后的密鑰文件。
9.從FusionInsight Manager中刪除3中新增HBase自定義配置項“hbase.crypto.master.alternate.key.name”。
10.再執行4使配置生效。