HADOOP安全基礎篇
說起hadoop這個單詞,在大資料領域可謂是十分知名。由於工作的需求,最近對hadoop整體架構和安全進行了一些瞭解,一些淺薄的理解分享給大家。(全文均以hadoop 2.0版本框架進行介紹)
一、hadoop簡介
Google一下就能都出來的一堆官方介紹這裡就不贅述了。簡而言之,hadoop是Apache旗下的一個用java語言實現實現的開源軟體框架,允許使用簡單的程式設計模型在大量計算機叢集上對大型資料集進行分散式處理。業界對hadoop的理解總體分狹義與廣義兩大類:
1.狹義理解
hadoop整體框架與核心元件如下圖所示:
HDFS(分散式檔案系統):解決海量資料儲存;
YARN(作業排程和叢集資源管理的框架):解決資源任務排程;
MAPREDUCE(分散式運算程式設計框架):解決海量資料計算;
OTHERS(其他資料處理框架):例如熟悉的storm、spark、flink等。
2.廣義理解
hadoop生態圈,分類舉幾個常見的例子:
分類 | 產品 |
---|---|
檔案系統 | HDFS、S3 |
資源排程 | YARN、Mesos |
計算框架 | mapreduce、spark、flink、storm |
資料庫 | Hbase、Redis |
SQL支援 | spark SQL、Phoenix、Hive、impala、pig |
其他 | zookeeper、kafka、flume、sqoop |
二、hadoop核心元件
1.HDFS
基本概念:
工作機制:
2.MAPREDUCE 2.0(執行在YARN上的mapreduce)
基本概念:
工作流程:
圖中1-8流程可以濃縮為如下幾個步驟:
Client將應用程式提交給ResourceManager;
ResourceMananager申請資源並與Nodemanager通訊;
Nodemanager收到請求啟動MR AppMaster;
MR AppMaster(MapTask、ReduceTask)與ResourceManager通訊並申請資源;
MR AppMaster申請到資源與NodeManager通訊執行Task;
NodeManager啟動Task。
三、hadoop安全核心問題
基於上面科普的hadoop基礎和官方的文件,可以總結出來如下5點核心問題:
1.安全認證
任何使用者都可以偽裝成為其他合法使用者,訪問其在HDFS上的資料,獲取MapReduce產生的結果,從而存在惡意攻擊者假冒身份,篡改HDFS上他人的資料,提交惡意作業破壞系統、修改節點伺服器的狀態等隱患。
2.許可權控制
使用者只要得知資料塊的 Block ID 後,可以不經過 NameNode 的身份認證和服務授權,直接訪問相應 DataNode,讀取 DataNode 節點上的資料或者將檔案寫入 DataNode 節點。
3.關鍵行為審計
預設hadoop缺乏審計機制。
4.靜態加密
預設情況下Hadoop 在對叢集HDFS 系統上的檔案沒有儲存保護,所有資料均是明文儲存在HDFS中,超級管理員可以不經過使用者允許直接檢視和修改使用者在雲端儲存的檔案,這就很容易造成資料洩露。
5.動態加密
預設情況下Hadoop叢集各節點之間,客戶端與伺服器之間資料明文傳輸,使得使用者隱私資料、系統敏感資訊極易在傳輸的過程被竊取。
四、hadoop安全機制
1.Kerberos認證
kerberos協議是一種計算機網路授權協議,用於在非安全的網路環境下對個人通訊進行加密認證。Kerberos協議認證過程的實現不依賴於主機作業系統的認證,不需要基於主機地址的信任,不要求網路上所有主機的物理安全,並且是以假定網路上傳送的資料包可以被任意的讀取、修改和插入資料為前提設計的。
簡而言之,如果你要去請求服務,你要獲取2個票據,1個叫許可票據,1個叫服務票據,去伺服器請求服務之前,你必須擁有服務票據,但是你要去請求服務票據的時候,你又必須攜帶許可票據,拿到了這2個票據,你才能夠有資格去真實伺服器上去請求服務。下面以一個簡圖解釋一下上面所說的認證服務流程:
通訊細節圖如下:
第一次通訊:
第二次通訊:
第三次通訊:
如果還不好理解,可以類比學習一下:
使用者要去遊樂場,首先要在門口檢查使用者的身份(即 CHECK 使用者的 ID), 如果使用者通過驗證,遊樂場的門衛 (AS) 即提供給使用者一張門卡 (TGT)。
這張卡片的用處就是告訴遊樂場的各個場所,使用者是通過正門進來,而不是後門偷爬進來的,並且也是獲取進入場所一把鑰匙。
這時摩天輪的服務員攔下使用者,向用戶要求提供摩天輪的 (ST) 票據,使用者說使用者只有一個門卡 (TGT), 那使用者只要把 TGT 放在一旁的票據授權機 (TGS) 上刷一下。
票據授權機 (TGS) 就根據使用者現在所在的摩天輪,給使用者一張摩天輪的票據 (ST), 這樣使用者有了摩天輪的票據,現在使用者可以暢通無阻的進入摩天輪裡遊玩了。
當然如果使用者玩完摩天輪後,想去遊樂園的過山車玩耍一下,那使用者一樣只要帶著那張門卡 (TGT). 到過山車的票據授權機 (TGS) 刷一下,得到過山車的票據 (ST) 就可以進入過山車進行玩耍。
當用戶離開遊樂場後,使用者的 TGT 就已經過期並且銷燬。
2.基於Token的認證機制
任何分散式系統內,以使用者名稱義執行的所有行為都有必要驗證該使用者身份,並且僅僅驗證服務的歸屬者是不夠的,驗證必須發生在每一次互動中。舉一個簡單的例子:執行一個mapreduce作業,工作被分解為多個子任務,每個任務必須與HDFS的namenode通訊。為了加強檔案系統的許可控制,每個任務必須通過namenode的身份驗證。如果Kerberos是唯一的身份驗證機制,使用者的TGT需要分派給每一個任務,這樣顯然帶來了另外一個問題:允許該任務向任意一個受Kerberos保護的服務發起身份驗證請求。hadoop解決這個問題的方法是:簽發能分派給每個任務,但被限制在某個特定服務內的認證令牌。
hadoop中的令牌分三類:委託令牌、塊訪問令牌和作業令牌。
相比於單純使用Kerberos,基於令牌的安全認證機制有很多優勢,具體如下:
效能: 在Hadoop叢集中,同一時刻可能有成千上萬的任務正在執行。如果我們使用Kerberos進行服務認證,則所有任務均需要KDC中AS提供的TGT,這可能使得KDC成為一個性能瓶頸,而採用令牌機制則可避免該問題。
憑證更新: 在Kerberos中,為了保證TGT或者服務票據的安全,通常為它們設定一個有效期,一旦它們到期,會對其進行更新。如果直接採用Kerberos驗證,則需要將更新之後的TGT或者服務票據快速推送給各個Task,這必將帶來實現上的煩瑣。如果採用令牌,當令牌到期時,只需延長它的有效期而不必重新生成令牌。此外,Hadoop允許令牌在過期一段時間後仍可用,從而為過期令牌更新留下足夠時間。
安全性: 使用者從Kerberos端獲取TGT後,可憑藉該TGT訪問多個Hadoop服務,因此,洩露TGT造成的危害遠比洩露令牌大。
靈活性: 在Hadoop中,令牌與Kerberos之間沒有任何依賴關係,Kerberos僅僅是進行使用者身份驗證的第一道防線,使用者完全可以採用其他安全認證機制替換Kerberos。因此,基於令牌的安全機制具有更好的靈活性和擴充套件性。
3.關鍵行為日誌審計
Apache一些開源的安全解決方案(會在第五章節詳細展開):
Apache Falcon: Apache Falcon是一個開源的hadoop資料生命週期管理框架, 它提供了資料來源 (Feed) 的管理服務,如生命週期管理,備份,存檔到雲等,通過Web UI可以很容易地配置這些預定義的策略, 能夠大大簡化hadoop叢集的資料流管理。
Apache Atlas: 是一個可伸縮和可擴充套件的元資料管理工具與大資料治理服務,它為Hadoop叢集提供了包括資料分類、集中策略引擎、資料血緣、安全和生命週期管理在內的元資料治理核心能力。
Apache Ranger: Ranger是一個集中式安全管理框架,提供集中管理的安全策略和監控使用者訪問,而且它可以對hadoop生態系統上的元件如hive、hbase等進行細粒度的資料訪問控制,並解決授權和審計問題。
Apache Sentry: 提供了細粒度級、基於角色的授權以及多租戶的管理模式。(與Ranger功能類似,區別:ranger PBAC;sentry RBAC)
Apache Eagle: 一個開源的分散式實時安全監控方案。通過離線訓練模型集合實時流引擎監控,能立即監測出對敏感資料的訪問或惡意的操作,並立即採取應對的措施。
……
4.靜態資料加密
從Hadoop2.6開始,HDFS支援原生靜態加密,屬於應用層加密。該方法中,資料被髮送和到達儲存位置之前,在應用層被加密。這種方法執行在作業系統層之上。
以下需要給讀者明確幾個概念:
HDFS中,需要加密的目錄被分解成若干加密區(encryption zone);
加密區中的每個檔案都被使用唯一的資料加密金鑰(data encryprion key,DEK)進行加密;
明文DEK不是永久的,而是用一個名為加密區金鑰(encryption zone key,EZK)的區域級加密金鑰,將DEK加密成加密DEK(encrypted DEK,EDEK);
EDEK作為指定檔案NameNode元資料中的擴充套件屬性永久存在。
下面用兩張圖解釋一下,當一個HDFS客戶端向HDFS加密區寫入一個新檔案和讀取加密檔案時的整個工作流程:
(1)寫
(2)讀
5.動態資料加密
(1)Hadoop RPC加密
Hadoop的RPC實現支援SASL,SASL除了支援身份認證外,還提供了可選的資訊完整性和資訊加密。 SASL(Simple Authentication and Security Layer)是網路協議中使用的認證層。SASL並不是一種協議,而是一種認證、資料完整性校驗和加密的機制的框架。plain和digest-md5(較常用)。
1) plain(較常用)
plain是最簡單的機制,但同時也是最危險的機制,因為身份證書(登入名稱與密碼)是以base64字串格式通過網路,沒有任何加密保護措施。因此,使用plain機制時,可能會想要結合TLS。
2) digest-md5(較常用)
使用這種機制時,client與server共享同一個隱性密碼,而且此密碼不通過網路傳輸。驗證過程是從伺服器先提出challenge(質詢)開始, 客戶端使用此challenge與隱性密碼計算出一個response(應答)。不同的challenge,不可能計算出相同的response;任何擁 有secret password的一方,都可以用相同的challenge算出相同的response。因此,伺服器只要比較客戶端返回的response是否與自己算 出的response相同,就可以知道客戶端所擁有的密碼是否正確。由於真正的密碼並沒有通過網路,所以不怕網路監測。
對了讓大家更好的理解,以下科普下RPC框架,RPC基本流程圖如下所示:
一次完整的RPC呼叫流程(同步呼叫,非同步另說)如下:
1)服務消費方(client)呼叫以本地呼叫方式呼叫服務;
2)client stub接收到呼叫後負責將方法、引數等組裝成能夠進行網路傳輸的訊息體;
3)client stub找到服務地址,並將訊息傳送到服務端;
4)server stub收到訊息後進行解碼;
5)server stub根據解碼結果呼叫本地的服務;
6)本地服務執行並將結果返回給server stub;
7)server stub將返回結果打包成訊息併發送至消費方;
8)client stub接收到訊息,並進行解碼;
9)服務消費方得到最終結果。
RPC框架的目標就是要2~8這些步驟都封裝起來,讓使用者對這些細節透明。
(2)HDFS資料傳輸協議加密
HDFS資料從一個DataNode傳輸到另一個DataNode時,或者在DataNode和客戶端之間傳輸時,會使用一個名為HDFS資料傳輸協議的TCP/IP直連套接字。資料傳輸加密啟用時,會使用Hadoop RPC協議交換資料傳輸協議中使用的加密金鑰。
(3)HTTPS
Https涉及到的主體:
客戶端。通常是瀏覽器(Chrome、IE、FireFox等);
服務端。一般指支援Https的網站;
CA(Certificate Authorities)機構,Https證書籤發和管理機構。
Https工作流程基本分為三個階段:
1)認證伺服器
瀏覽器內建一個受信任的CA機構列表,並儲存了這些CA機構的證書。第一階段伺服器會提供經CA機構認證頒發的伺服器證書,如果認證該伺服器證書的CA機構,存在於瀏覽器的受信任CA機構列表中,並且伺服器證書中的資訊與當前正在訪問的網站(域名等)一致,那麼瀏覽器就認為服務端是可信的,並從伺服器證書中取得伺服器公鑰,用於後續流程。否則,瀏覽器將提示使用者,根據使用者的選擇,決定是否繼續。當然,我們可以管理這個受信任CA機構列表,新增我們想要信任的CA機構,或者移除我們不信任的CA機構。
2)協商會話金鑰
客戶端在認證完伺服器,獲得伺服器的公鑰之後,利用該公鑰與伺服器進行加密通訊,協商出兩個會話金鑰,分別是用於加密客戶端往服務端傳送資料的客戶端會話金鑰,用於加密服務端往客戶端傳送資料的服務端會話金鑰。在已有伺服器公鑰,可以加密通訊的前提下,還要協商兩個對稱金鑰的原因,是因為非對稱加密相對複雜度更高,在資料傳輸過程中,使用對稱加密,可以節省計算資源。另外,會話金鑰是隨機生成,每次協商都會有不一樣的結果,所以安全性也比較高。
3)加密通訊
此時客戶端伺服器雙方都有了本次通訊的會話金鑰,之後傳輸的所有Http資料,都通過會話金鑰加密。這樣網路上的其它使用者,將很難竊取和篡改客戶端和服務端之間傳輸的資料,從而保證了資料的私密性和完整性。
五、資料相關Apache開源解決方案
1.Apache Falcon
Falcon是一個開源的hadoop資料生命週期管理框架, 它提供了資料來源 (Feed) 的管理服務,如生命週期管理,備份,存檔到雲等,通過Web UI可以很容易地配置這些預定義的策略, 能夠大大簡化hadoop叢集的資料流管理。
整體框架:
核心特性:
集中式資料生命週期管理: Falcon在UI上提供wizard來定義資料匯入,處理和匯出的流水線, 同時可以管理監控流水線的執行;
業務一致性和災難恢復: Falcon可以拷貝HDFS檔案和hive表;
解決審計和合規性方面的需求: 可以利用falcon檢視資料流水線的血緣關係,審計日誌,以及為業務流程和資料打標籤,方便業務管理。
簡而言之,Falcon是在排程器Oozie上封裝了一層,使用者可以用Web UI上的嚮導來配置資料流水線, 資料生命週期管理非常方便.,它最大的優點就是增強了Oozie的易用性, 對於業務邏輯比較複雜的系統, 用Falcon管理比起直接用Oozie會大大簡化。但是問題來了,Oozie到底是什麼?下面一張簡圖來解答一下大家的疑問。以一個離線分析任務為切入點:
2.Apache Atlas
Atlas是一個可伸縮和可擴充套件的元資料管理工具與大資料治理服務,它為Hadoop叢集提供了包括資料分類、集中策略引擎、資料血緣、安全和生命週期管理在內的元資料治理核心能力。
下面以思維導圖的形式分層逐一介紹一下:
3.Apache Ranger
Ranger是一個集中式安全管理框架,提供集中管理的安全策略和監控使用者訪問,而且它可以對hadoop生態系統上的元件如hive、hbase等進行細粒度的資料訪問控制,並解決授權和審計問題。通過操作Ranger控制檯,管理員可以輕鬆的通過配置策略來控制使用者訪問HDFS資料夾、HDFS檔案、資料庫、表、欄位許可權。
Ranger 使用了一種基於屬性的方法定義和強制實施安全策略。當與 Apache Hadoop 的資料治理解決方案和元資料倉儲元件Apache Atlas一起使用時,它可以定義一種基於標籤的安全服務,通過使用標籤對檔案和資料資產進行分類,並控制使用者和使用者組對一系列標籤的訪問。
Ranger 的總體架構如下圖所示,主要由以下三個元件構成:
AdminServer: 以RESTFUL形式提供策略的增刪改查介面,同時內建一個Web管理頁面; AgentPlugin: 嵌入到各系統執行流程中,定期從AdminServer拉取策略,根據策略執行訪問決策樹,並且定期記錄訪問審計。外掛的實現原理將在後文詳細介紹; UserSync: 定期從LDAP/">LDAP/File中載入使用者,上報給AdminServer。
整個過程如下:
4.Apache Eagle
Eagle是eBay開源的一個分散式實時安全監控方案。通過離線訓練模型集合實時流引擎監控,能立即監測出對敏感資料的訪問或惡意的操作,並立即採取應對的措施。下圖是Eagle的架構。