HDFS透明加密原理解析
目錄:
1.?HDFS透明加密
2.實現原理
3.KMS ACL用戶權限配置
?
一. HDFS透明加密
HDFS?Encryption?Zone?加密空間,即HDFS透明加密,是一種端到端的加密模式,其中加解密過程對于客戶端來說是完全透明的。
數據在客戶端寫操作時被加密,數據在客戶端讀操作時被解密,hdfs服務端本省并不是主要參與者。主要作用是保證加密空間內的數據不被非法查詢。
?
二.實現原理
Encryption Zone是HDFS中的一個抽象概念,它表示此空間的內容在寫的時候會被透明地加密,同時在讀的時候,被透明地解密;用戶往HDFS上存儲數據的時候,無需用戶做任何程序代碼的更改(意思就是調用KeyProvider API ,用于在數據存入到HDFS上面的時候進行數據加密,解密的過程一樣)。這意味著數據加密和解密由客戶端完成的。HDFS不會存儲或訪問未加密的數據或數據加密密鑰(由KMS管理)。
?
加密流程:
前提:創建HDFS加密區時會創建一個HDFS加密區(目錄),同時會在KMS服務里創建一個key及其EZ?Key,及兩者之間的關聯。
1.Client向NN請求在hdfs某個加密區新建文件;
2.NN向KMS請求此文件的EDEK,KMS用對應的EZ?key生成一個新的EDEK發送給NN;
3.這個EDEK會被NN寫入到文件的metadata中;
4.NN發送EDEK給Client;
5.Client發送EDEK給Kms請求解密,KMS用對應的EZ?key將EDEK解密為DEK發送給Client;
6.Client用DEK加密文件內容發送給datanode進行存儲。
?
分析總結:DEK是加解密一個文件的密匙,而KMS里存儲的EZ?key是用來加解密所有文件的密匙(DEK)的密匙。所以,EZ?Key是更為重要的數據,只在KMS內部是用(DEK的加解密只在KMS內存進行),不會被傳遞到外面使用,而HDFS服務端只能接觸到EDEK,所以HDFS服務端也不能解密加密區文件。
?
讀流程類似,區別就是NN直接讀取加密文件元數據里的EDEK返回給客戶端,客戶端一樣把EDEK發送給KMS獲取DEK。再對加密內容解密讀取。
?
其他細節說明:
1.每個Encryption Zone 會與每個Encryption Zone Key相關聯(EZ Key),這個Key會在創建Encryption Zone的時候同時被指定。
2.每個Encryption Zone中的文件會有其唯一的Data?Encryption?Key(數據加密key)簡稱DEK.
3.DEK不會被HDFS直接處理,取而代之,hdfs只處理經過加密的DEK,就是Encrypted Data Encryption Key,簡稱EDEK。
4.客戶端詢問KMS服務去解密EDEK,然后利用解密后得到的DEK讀寫數據。KMS利用存儲的EZ?key來解密EDEK得到DEK。
5.在客戶端向KMS服務請求時候,會有相關權限驗證,不符合要的客戶端將不會得到解密好的DEK。而且KMS的權限驗證是獨立于HDFS的,是自身的一套權限驗證。
?
三.KMS ACL用戶權限配置
上面的步驟中有個關鍵點,如何保證某個合法用戶能在KMS獲取到自己的加密區文件的DEK,而屏蔽其他沒有相關權限的用戶。這個就和KMS服務的ACL權限配置有關。
在HDFS透明加密驗證文檔中有類似如下的配置:
KMS服務的配置文件kms-acls.xml:
<property>
<name>key.acl.key1.DECRYPT_EEK</name>
<value>admin1</value>
<deion>
ACL for decryptEncryptedKey operations.
</deion>
</property>
這就是在KMS中指定admin1用戶有權限獲取key1對應的HDFS加密區文件的DEK。也就是說,還是通過KMS來控制用戶在加密區的權限,跟HDFS服務端還是沒關系。
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的HDFS透明加密原理解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POJ3580:SuperMemo
- 下一篇: 柳传志:我从来软弱 但不摇摆不做改革牺牲