引言:敏感數據在傳輸過程中,從終點傳輸到集群時,或者在企業數據從集群中的一個節點轉移到另一個節點時,都必須受到保護。有一些方案可以為靜態和傳輸的數據進行數據加密,從而使企業不僅可以滿足合規要求,更為重要的是,還可以保護信息資產的安全。
在真正的大數據環境中,有很多其他的數據源、數據暫存區域、臨時文件和日志文件都保存著HDFS之外的敏感數據。當然,敏感數據在傳輸過程中,從終點傳輸到集群時,或者在企業數據從集群中的一個節點轉移到另一個節點時,都必須受到保護。有一些方案可以為靜態和傳輸的數據進行數據加密,從而使企業不僅可以滿足合規要求,還可以保護信息資產的安全。
確保Apache Hadoop集群安全的首要一步是支持傳輸加密,這是為日后增加的每一個其他的安全層的基礎。認證和Kerberos依賴于通信安全,所以在深入支持認證和Kerberos之前,必須支持數據傳輸的加密。
Apache Hadoop并非是“鐵板一塊”的應用,正相反,它要涉及Pig和Hive直至Impala及Kudu等。這些服務可能與包括RPC、TCP/IP等協議在內的不同協議通信,而且每種協議都有加密數據的不同方法。使用Web的都不會對瀏覽器地址欄中的“https://”及其旁邊的鎖頭標志感到陌生。與之類似的是,要實現Hadoop中的安全通信,需要支持使用協議的安全版本。
對于與RPC通信的組件來說,需啟用SASL來保護傳輸中的RPC數據。SASL是通過在core-site.xml文件中設置hadoop.rpc.protection屬性來啟用,在啟用此選項時有三個選項:
認證:提供雙方間的身份驗證;
完整性:提供雙方間的身份驗證和消息的完整性;
私密性:除提供認證和完整性之外,還提供機密性。
當然,用戶可能希望選用最安全的選項,所以下面就看看在core-site.xml文件的內容:

改變此屬性后,在集群中的所有后臺程序均需重新啟動,以確保所有各方都通過相同的加密協議進行通信。
由于Hadoop 的數據協議用于通過集群數據節點發送和接收數據,這種協議使用直接的TCP/IP套接字,并且支持通過密鑰(由RPC進行交換)進行加密通信。為支持TCP/IP加密的數據流,用戶需在hdfssite.xml配置文件中將dfs.encrypt.data.transfer屬性設置為“true”。這種配置的變化也必須在NameNode和 DataNodes中做出改變:

還可選擇配置加密密碼;在此案例中,已經配置了更安全的AES-256算法。
在改變了這種屬性后,集群中的NameNode 和DataNode后臺程序都需要重新啟動。
不同的Hadoop組件都是用不同的編碼語言開發的,例如,MapReduce用Java開發,因而SSL/TLS可以用不同的方法進行配置。此例中檢查啟用MapReduce v2的WebUI的加密。
為啟用MapReduce v2的加密WebUI,需要編輯 core-site.xml文件,將hadoop.ssl.enabled屬性設置為”true”:

為啟用MapReduce v2的shuffle,用戶需要編輯mapred-site.xml文件并將
mapreduce.shuffle.ssl.enabled屬性設置為“true”:

除此之外,還有證書問題、信任存儲以及其他SSL/TLS配置。但是,由于此文只是從一個較高的層次上進行概覽而不討論細節,而是僅僅指出用戶需要從活動目錄管理員或內部的CA獲得SSL/TLS證書后,用正確的值來修改ssl-server.xml和ssl-client.xml文件。
在啟用了所有Apache Hadoop組件中的傳輸數據和靜態數據加密后,用戶需要配置的最后一方面就是HDFS之外的數據加密。
雖然有些企業可能會考慮加密硬盤,但并不普遍,而且還要求專門的和更為昂貴的硬件。相反,可以充分利用Linux的本地靜態數據加密特性,即dm-crypt。
通 過dm-crypt和LUKS用戶可以創建一個加密的塊設備,使其位于用戶的標準存儲設備之上,并且在其讀寫文件時對數據進行加密或解密。雖然由于Cryptsetup等工具的使用可以使建立dm-crypt塊設備相當簡單,但加密口令的存儲和保護并非不重要,并且要求謹慎規劃和測試。