1. 程式人生 > >HDFS encryption 實戰之背景和架構介紹

HDFS encryption 實戰之背景和架構介紹

1、HDFS encryption背景

在全世界,為零滿足隱私和其他安全需求,很多政府部門、金融部門和管理單位強制要求資料加密。例如 銀行支付行業為零滿足資訊保安必須滿足支付卡行業資料安全標準 Payment Card Industry Data Security Standard (PCI DSS)。其他一些例子,美國聯邦政府資訊保安管理法案 United States government’s Federal Information Security Management Act (FISMA) 、醫療保險可攜性和責任法案Health Insurance Portability and Accountability Act (HIPAA)。對HDFS裡面的資料進行加密可以幫助你的組織應對這些規定。
HDFS encryption 實現了在叢集中讀寫HDFS Block時透明的、端到端的資料加密。透明加密意味著終端使用者無需感知encryption/decryption 過程,而端到端意味資料在靜態和傳輸過程中都是加密的。

2、HDFS encryption 具備的能力

HDFS encryption 具備下面一些能力:

  • 只有HDFS client才能夠加解密 ● 為了區分開HDFS administrator, Key
    Administrator這兩個使用者,必須要將Administration of HDFS and administration of
    keys分成兩個獨立的功能,這樣可以保證沒有一個獨立的使用者可以同時擁有data和keys。
  • 作業系統級別和HDFS互動僅使用加密資料,減輕了os和檔案系統成的威脅 ● HDFS使用的是高階加密標準模式(AES-CTR)加密演算法。 AES-CTR預設支援128-bit 加密key,或者在 Java Cryptography Extension (JCE) unlimited strength JCE 安裝情況下,可以支援128-bit 加密key
  • HDFS encryption 在設計的時候充分利用了Intel® Advanced Encryption Standard
    Instructions (AES-NI)指令集,一種基於硬體的加密加速技術,所以你的叢集效能在配置encryption後沒有明顯的效能消耗(AES-NI指令集相比於硬體實現的AES,可以提高一個數量級)。但是你需要更新HDFS和MAPREDUCE的cryptography(密碼學)庫才能使用加速機制。

3、主要架構

3.1 Keystores 和 the Hadoop Key Management Server

許多keystores 沒有滿足HDFS加解密的效能,這就需要重新設計一個新的服務,叫做 Hadoop Key Management Server (KMS)。KMS作為一個代理實現連線HDFS client和後端的keystore。keystore和HADOOP KMS 相互互動和HDFS clients互動過程中 都必須使用 Hadoop’s KeyProvider API。
當然HDFS encryption可以使用一個本地的java Keystore 作為key 管理器,Cloudera在生產環境不推薦使用本地java keystore,而是一個更健壯和安全的key 管理方案。 Cloudera Navigator Key Trustee Server 是一個管理加密key 的key store,同時具有其它一些安全特性。為了整合Cloudera Navigator Key Trustee Server,Cloudera提供了一個通用的KMS 服務,叫做Key Trustee KMS。
下面這張圖解釋了HDFSclients 和 NAMENODE怎麼樣一個企業級keystore互動。
這裡寫圖片描述


怎樣安裝Navigator Key Trustee和 Hadoop Key Management Server,我會在後面詳細引數。

3.2、Encryption Zones and Keys

Encryption Zones(EZ) 是HDFS 上面的一個需要加密的目錄。開始是一個空木了,可以使用一些工具比如distcp 將資料新增到Zones裡面。拷貝到這個目錄的檔案和子目錄都會被加密,只要新增到這個目錄下面了就不可以對檔案和目錄進行命名。需要注意一點是不能在已經有的目錄上面建立Encryption zones。

名詞解釋:
- 每一個EZ對應有一個 EZ key,這個key是有key administrator 在建立zone的時候指定的,EZ key儲存在後端的keystore的,獨立於HDFS存在的
- 在EZ裡面的每一個檔案 擁有自己的encryption key,叫做Data Encryption Key (DEK)
- 這些DEKS 使用了自己的EK key進行加密,然後了Encrypted Data Encryption Key (EDEK)
下面的這張圖解釋了怎麼樣使用encryption zone keys (EZ keys), data encryption keys (DEKs), 和encrypted data encryption keys (EDEKs)去解密和加密檔案。
這裡寫圖片描述

EDEKS 持久化儲存在Namenode裡面,作為一個檔案的屬性,使用了HDFS 可擴充套件屬性。NameNode可以安全儲存和處理EDEKS,因為HDFS 使用者 沒有許可權獲取EDEK’s encryption keys (EZ keys)。即使HDFS 妥協(比如獲取到HDFS超級使用者),這個惡意使用者也只能獲取到加密檔案和EDEKS。EZ keys 在KMS和keystore被單獨的許可權管理。

一個EZ key 可以擁有多個版本,每個key version擁有自己不同key 實體(也就說, encryption and decryption使用的內容是不一樣的)。key 的旋轉 是通過翻滾EZ key實現的。每個檔案 key的旋轉是通過新的EZ可以重新加密檔案的DEK ,獲取到一個新的EDEK的。HDFS 可以識別一個 encrytion key主要兩個途徑:1)key name 最新的key version,2)指定的key version。
這個地方需要測試一下,不同的key version 是否可以 加密和解密同一份資料?

3.3 操作檔案流程

為了解密一個新檔案,需要如下流程

  • HDFS需要從Namenode獲取一個新的EDEK
  • NameNode 請求KMS 使用這個檔案對應encryption zone 的EZ key 解密 EDE
  • client 使用這個DEK去解密這個新檔案
    這裡寫圖片描述

4、參考文件

https://www.cloudera.com/documentation/enterprise/latest/topics/cdh_sg_hdfs_encryption.html#concept_z2d_1vz_np