天天看點

HDFS encryption 實戰之背景和架構介紹1、HDFS encryption背景2、HDFS encryption 具備的能力3、主要架構4、參考文檔

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互動。

HDFS encryption 實戰之背景和架構介紹1、HDFS encryption背景2、HDFS encryption 具備的能力3、主要架構4、參考文檔

怎樣安裝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)去解密和加密檔案。

HDFS encryption 實戰之背景和架構介紹1、HDFS encryption背景2、HDFS encryption 具備的能力3、主要架構4、參考文檔

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去解密這個新檔案
    HDFS encryption 實戰之背景和架構介紹1、HDFS encryption背景2、HDFS encryption 具備的能力3、主要架構4、參考文檔

4、參考文檔

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

繼續閱讀