hadoop生態(tài)圈背后隱藏的“兇險”

摘要:伴隨互聯(lián)網(wǎng)的高速發(fā)展,大數(shù)據(jù)成為炙手可熱的時髦產(chǎn)物。隨之而來的是關(guān)于大數(shù)據(jù)的存儲與計算問題。作為能夠?qū)Υ罅繑?shù)據(jù)進(jìn)行分布式處理的軟件框架——Hadoop目前已經(jīng)發(fā)展成為分析大數(shù)據(jù)的領(lǐng)先平臺,它能夠以一種

伴隨互聯(lián)網(wǎng)的高速發(fā)展,大數(shù)據(jù)成為炙手可熱的時髦產(chǎn)物。隨之而來的是關(guān)于大數(shù)據(jù)的存儲與計算問題。作為能夠?qū)Υ罅繑?shù)據(jù)進(jìn)行分布式處理的軟件框架——Hadoop目前已經(jīng)發(fā)展成為分析大數(shù)據(jù)的領(lǐng)先平臺,它能夠以一種可靠、高效、可伸縮的方式進(jìn)行數(shù)據(jù)處理。

一、Hadoop生態(tài)圈的形成

大數(shù)據(jù)是個寬泛的問題,而Hadoop生態(tài)圈是最佳的大數(shù)據(jù)的解決方案。Hadoop生態(tài)圈的所有內(nèi)容基本都是為了處理超過單機(jī)范疇的數(shù)據(jù)而產(chǎn)生的。

HDFS&MapReduce

在最開始階段Hadoop只包含HDFS(Hadoop Distributed FileSystem)和MapReduce兩個組件。HDFS的設(shè)計本質(zhì)是為解決大量數(shù)據(jù)分別存儲于成百上千臺機(jī)器上的問題,讓客戶看到的是一個文件系統(tǒng)而非很多文件系統(tǒng),屏蔽復(fù)雜的底層調(diào)用。好比用戶想要取/liusicheng/home/test1下的數(shù)據(jù),只需要得到準(zhǔn)確的路徑即可獲得數(shù)據(jù),至于數(shù)據(jù)實(shí)際上被存放在不同的機(jī)器上這點(diǎn)用戶根本不需要關(guān)心。HDFS幫助客戶管理分散在不同機(jī)器上的PG級數(shù)據(jù)。這些數(shù)據(jù)如果都放在一臺機(jī)器上處理,一定會導(dǎo)致恐怖的等待時間。于是,客戶選擇使用很多臺機(jī)器處理數(shù)據(jù)。

Hadoop的第二個重要組件MapReduce被設(shè)計用來解決對多臺機(jī)器實(shí)現(xiàn)工作分配,并完成機(jī)器之間的相互通信,最終完成客戶部署的復(fù)雜計算。至此第一代hadoop已經(jīng)具備了大數(shù)據(jù)管理和計算能力。

MapReduce計算模型雖然能用于很多模型,但還是過于簡單粗暴,好用但笨重。為了解決MapReduce的這一缺陷,引入Tez和Spark使Map/Reduce模型更通用,讓Map和Reduce之間的界限更模糊,數(shù)據(jù)交換更靈活,更少的磁盤讀寫以更方便描述復(fù)雜算法,取得更高吞吐量。

Pig&Hive

解決完計算性能問題,就要往效率方面做努力,降低使用門檻。MapReduce的程序?qū)懫饋矸浅B闊?,用更高層、更抽象的語言層來描述算法和數(shù)據(jù)處理流程可以有效降低使用門檻,提高工作效率。于是,利用Pig接近腳本方式描述MapReduce,利用Hive把腳本和SQL語言翻譯成MapReduce程序,丟給計算引擎去計算。如此一來,一般客戶也可以簡單使用或維護(hù)hadoop了。

數(shù)據(jù)倉庫

hadoop生態(tài)圈完成的數(shù)據(jù)倉庫架構(gòu)為:底層HDFS;上面跑MapReduce/Tez/Spark;再往上跑Hive,Pig。這種數(shù)據(jù)倉庫可以解決中低速數(shù)據(jù)處理的要求,多用于歸檔數(shù)據(jù)分析??蛻粲行碌男枨?,需要數(shù)據(jù)倉庫有更高的處理速度,來固定查詢某些特定值,給網(wǎng)站實(shí)時動態(tài)變化提供數(shù)據(jù)。HBase、Cassandra和MongoDB等多種非關(guān)系型數(shù)據(jù)庫,表現(xiàn)得比MapReduce要好很多,比如HBase會通過索引解決這個問題,而MapReduce很可能要掃描整個數(shù)據(jù)集。

除了這些基本組件屬于hadoop生態(tài)外,分布式機(jī)器學(xué)習(xí)庫Mahout,數(shù)據(jù)交換的編碼庫Protobuf和高一致性分布存取協(xié)同系統(tǒng)ZooKeeper等也在hadoop生態(tài)中發(fā)揮著作用。這么多工具在同一個集群上運(yùn)轉(zhuǎn),調(diào)度系統(tǒng)Yarn就變得必不可少。上面組件僅是hadoop生態(tài)其中一部分,還有更多解決不同問題或處理不同場景的其他組件存在。

二、Hadoop的安全問題

回顧hadoop生態(tài)圈發(fā)展史,會發(fā)現(xiàn)hadoop中的所有產(chǎn)品都是根據(jù)不同用戶需求開發(fā)。這就導(dǎo)致Hadoop生態(tài)圈中的產(chǎn)品缺乏共同的架構(gòu)和整體的考慮,安全性會完全依賴hadoop框架來提供。而hadoop最初開發(fā)時并沒有考慮安全因素,當(dāng)時Hadoop的用例都是圍繞著如何管理大量的公共web數(shù)據(jù)來考慮的,沒有考慮數(shù)據(jù)的保密性和內(nèi)部的復(fù)雜權(quán)限管理。按照Hadoop最初的設(shè)想,它假定集群總是處于可信的環(huán)境中,由可信用戶使用的相互協(xié)作的可信計算機(jī)組成。這就導(dǎo)致整個Hadoop生態(tài)圈一度被暴露在安全的風(fēng)險之下。Hadoop生態(tài)圈的安全風(fēng)險大致分五類:

缺乏安全認(rèn)證;

缺乏權(quán)限控制;

缺乏關(guān)鍵行為審計;

缺乏靜態(tài)加密;

缺乏動態(tài)加密。

隨著hadoop在云上的廣泛運(yùn)用,很多公司對hadoop提出了安全應(yīng)對方案。如Yahoo提出的Kerberos體系解決安全認(rèn)證問題、ACL解決訪問控制問題。具體到每個產(chǎn)品會采用不同的解決手段。討論解決方案之前,我們先詳細(xì)了解一下hadoop的五種安全隱患。

1、安全認(rèn)證

由于Hadoop中沒有用戶身份認(rèn)證機(jī)制,所以任何用戶都可以偽裝成為其他合法用戶,訪問其在HDFS上的數(shù)據(jù),獲取MapReduce產(chǎn)生的結(jié)果,從而存在惡意攻擊者假冒身份,篡改HDFS上他人的數(shù)據(jù),提交惡意作業(yè)破壞系統(tǒng)、修改節(jié)點(diǎn)服務(wù)器的狀態(tài)等隱患;由于集群缺乏對Hadoop服務(wù)器的認(rèn)證,攻擊者假冒成為DataNode或TaskTracker節(jié)點(diǎn),加入集群,接受NameNode和JobTracker。一旦借助代碼,任何用戶都可以獲取 root 權(quán)限,并非法訪問 HDFS 或者 MapReduce 集群,惡意提交作業(yè)、修改 JonTracker 狀態(tài)、篡改 HDFS 上的數(shù)據(jù)等。

身份驗(yàn)證基本可以認(rèn)為是hadoop生態(tài)中最嚴(yán)重的安全問題。不解決“你是誰”的問題?會給hadoop帶來冒充合法用戶和冒充服務(wù)節(jié)點(diǎn)兩大類問題。

較成熟的商業(yè)解決方法是通過Kerberos解決Hadoop身份認(rèn)證。Kerberos通過相互認(rèn)證的強(qiáng)認(rèn)證方式,防止竊聽的網(wǎng)絡(luò)認(rèn)證協(xié)議。每一位用戶和服務(wù)都有一個主題屬性和憑證來完成所有的RPC用戶認(rèn)證。但如果客戶端和每個節(jié)點(diǎn)都要進(jìn)行Kerberos認(rèn)證,隨著節(jié)點(diǎn)的擴(kuò)展,KDC逐漸會成為整個系統(tǒng)的性能瓶頸。為了提高Kerberos的效率,加入委托令牌,利用對稱加密的方式,共享密鑰根據(jù)令牌的類型分布到成千上萬個主機(jī),利用Kerberos憑證從名字節(jié)點(diǎn)獲得最初認(rèn)證后,客戶端獲得1個委托令牌,并將它傳遞給下一個在名字節(jié)點(diǎn)上進(jìn)行認(rèn)證的作業(yè)。但委托令牌自身也存在一定問題。

hadoop推出了Kerberos+tokens的解決方式,但在實(shí)際使用中,由于不便利、不利于拓展性、降低效率等原因,并未廣泛應(yīng)用開來。

2、權(quán)限控制

用戶只要得知數(shù)據(jù)塊的 Block ID 后,可以不經(jīng)過 NameNode 的身份認(rèn)證和服務(wù)授權(quán),直接訪問相應(yīng) DataNode,讀取 DataNode 節(jié)點(diǎn)上的數(shù)據(jù)或者將文件寫入 DataNode 節(jié)點(diǎn),并可以隨意啟動假的 DataNode 和 TaskTracker。

對于 JobTracker,用戶可以任意修改或者殺掉其他用戶的作業(yè),提高自身作業(yè)的優(yōu)先級,JabTracker 對此不作任何控制。其中,無論是粗粒度的文件訪問控制還是細(xì)粒度的ACL訪問控制,都會或多或少強(qiáng)占hadoop集群內(nèi)部的資源。可從外部在行為上進(jìn)行額外的權(quán)限控制,尤其支持由hive的hadoop環(huán)境。只需要判hivesql語句的對象和當(dāng)前用戶的關(guān)鍵,就可以通過通訊阻斷等方式達(dá)到權(quán)限控制的目的。

3、審計

默認(rèn)hadoop缺乏審計,可以通過hadoop系產(chǎn)品添加日志監(jiān)控來完成一部分審計功能。通過日志的記錄來判斷整個流程中是否存在問題。這種日志的記錄缺乏特征的判斷和自動提示功能。完全可以利用進(jìn)行改進(jìn)后的審計產(chǎn)品來進(jìn)行審計,只審計客戶端的行為即可追查到惡意操作或誤操作行為。

4、靜態(tài)加密

默認(rèn)情況下Hadoop 在對集群HDFS 系統(tǒng)上的文件沒有存儲保護(hù),所有數(shù)據(jù)均是明文存儲在HDFS中,超級管理員可以不經(jīng)過用戶允許直接查看和修改用戶在云端保存的文件,這就很容易造成數(shù)據(jù)泄露。采用靜態(tài)加密的方式,對核心敏感數(shù)據(jù)進(jìn)行加密處理,使得數(shù)據(jù)密文存儲,防止泄露風(fēng)險。

5、動態(tài)加密

默認(rèn)情況下Hadoop集群各節(jié)點(diǎn)之間,客戶端與服務(wù)器之間數(shù)據(jù)明文傳輸,使得用戶隱私數(shù)據(jù)、系統(tǒng)敏感信息極易在傳輸?shù)倪^程被竊取。解決動態(tài)加密一般會提供一個附加的安全層。對于動態(tài)數(shù)據(jù)而言,即傳輸?shù)交驈膆adoop生態(tài)系統(tǒng)傳送出來的數(shù)據(jù),利用簡單認(rèn)證與安全層(SASL)認(rèn)證框架進(jìn)行加密,通過添加一個安全層的方式,保證客戶端和服務(wù)器傳輸數(shù)據(jù)的安全性,確保在中途不回被讀。

三、結(jié)語

Hadoop生態(tài)的安全問題從2009年被眾多廠商重視后,相繼提出了很多解決方案。但大部分方案因?yàn)槟承┚窒扌圆]有實(shí)際落地。能落地的主要是Yahoo提出的解決方案,此方案在實(shí)際落地中也存在諸多問題。目前,Hadoop安全問題已經(jīng)成功引起廣泛的關(guān)注,確保大型和復(fù)雜多樣環(huán)境下的數(shù)據(jù)安全,將是非常具有市場前景的宏大課題。

極客網(wǎng)企業(yè)會員

免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請進(jìn)一步核實(shí),并對任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實(shí)內(nèi)容時,應(yīng)及時向本網(wǎng)站提出書面權(quán)利通知或不實(shí)情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。

2017-11-19
hadoop生態(tài)圈背后隱藏的“兇險”
摘要:伴隨互聯(lián)網(wǎng)的高速發(fā)展,大數(shù)據(jù)成為炙手可熱的時髦產(chǎn)物。隨之而來的是關(guān)于大數(shù)據(jù)的存儲與計算問題。

長按掃碼 閱讀全文