2014年2月21日 星期五

HBase 0.98.0 is Released - Transparent server side encryption



HBase 0.98.0 Release了,其中最引起我們注意的Feature是 Transparent server side encryption (HBASE-7544),根據官網的描述:

This adds the ability to store hfiles and the write ahead logs in encrypted format. More information can be found here


嘗試來翻翻看這個章節....


Chapter 8. Secure Apache HBase

8.7. Transparent Server Side Encryption


這個 Feature提供了 transparent encryption 的方法來保護 HFile 和 WAL (Write Ahead Log),所謂的 transparent encryption就是使用兩階層式金鑰交換方式( two-tier key architecture),這個彈性的設計讓使用者不需要使用入侵式的方式來更換 Key( non-intrusive key rotation)。


首先 administrator 提供一組 cluster master key 儲存在 key provider,而且此key provider 必須讓任何可信任的Hbase Process (如 Master, the RegionServers, and 具有管理權限的 clients (e.g. the shell))可以存取的到。這個 Default key provider 與 Java KeyStore API 整合,而且也要能跟各種Key management 系統可以整合。Hbase 要如何存取這些Key都設定在site file。Master Key 也許是存在Cluster Servers 上的KeyStore file 或是外部Key Server,甚至是硬體加密模組。不論Master key 存在哪,都必須要能透過設定檔讓Hbase process 能存取到。


Encryption Key 可以根據 per column family (CF)來設定,使用方法透過新增或是修改指令去修改column descriptor,加入兩個新的屬性:
  • The name of the encryption algorithm to use (currently only "AES" is supported) 
  • (Optionally) A data key wrapped (encrypted) with the cluster master key.

一個CF有一把Key有助於使用對系統整體影響較小的漸進式更換Key(rotation incremental key rotation),而且還可以減少Key對外洩漏的可能性。
 
另一個 wrapped data key 儲存在 CF schema metadata,而且以Cluster Master Key 加密後儲存在每個CF相對應的HFile裡面。

一旦CF設定為要加密,任何新增的HFile都會被加密。 為了確保每個HFile都有加密,在啟動這個新機制後一定要跑一次major compaction。這個用來加解密的Data Key 跟cluster master key 都存在HFile 的一個新的meta block裡面。每當檔案被開啟,這個Data key 將會被從HFile中取出來,由cluster master key 解開 (Data key 應該是由cluster master key 加密?),並且用這把Data key 去解開其他加密的HFile。

如果Master Key 無法取得,HFile 將無法被存取,因此如果有遠端使用者因為 HDFS 權限設定的問題或是從 HDFS 機器上報廢的 disk / media 拿到一些 HFile 的資料,因為他們沒有 cluster master key ,所以就不用擔心檔案被解開來看。
(前提是cluster master key 要被保存好,或是單獨存放在安全的機器上~)

此外指定Data key 在CF schema 是可選擇的,如果沒有指定,當產生HFile時就會自動隨機產生一把data key 。

在這邊也介紹一下用來加密WAL的新設定,雖說WALs屬於暫存性質的檔案(最後會寫道HFile),但是加密WALEdits 是必要的,以避免不正當的存取HFile (to avoid circumventing HFile protections for encrypted column families.)

嗯翻完真是慘不忍睹....

重點:

Hbase 已經有加解密功能,包含HFile和WAL。但是重點還是在如何儲存你的key store,根據官網教學的設定,目前都是存在local file,所以我們提供的Key manager 還是比較方便且安全。

<property>
    <name>hbase.crypto.keyprovider</name>
    <value>org.apache.hadoop.hbase.io.crypto.KeyStoreKeyProvider</value>
</property>
<property>
     <name>hbase.crypto.keyprovider.parameters</name>
     <value>jceks:///path/to/hbase/conf/hbase.jks?password=<password></value>
</property>

張貼留言