【轉(zhuǎn)載】Apache Ranger剖析:Hadoop生態(tài)圈的安全管家

前言

2016年,Hadoop迎來了自己十周歲生日茬高。過去的十年,Hadoop雄霸武林盟主之位假抄,號令天下怎栽,引領(lǐng)大數(shù)據(jù)技術(shù)生態(tài)不斷發(fā)展壯大,一時間百家爭鳴宿饱,百花齊放熏瞄。然而,兄弟多了不好管谬以,為了搶占企業(yè)級市場强饮,各家都迭代出自己的一套訪問控制體系,不管是老牌系統(tǒng)(比如HDFS为黎、HBase)邮丰,還是生態(tài)新貴(比如Kafka、Alluxio)铭乾,ACL(Access Control List)支持都是Roadmap里被關(guān)注最高的issue之一剪廉。

歷史證明跳出混沌狀態(tài)的最好方式就是——出臺標(biāo)準(zhǔn)。于是炕檩,Hadoop兩大廠Cloudera和Hortonworks先后發(fā)起標(biāo)準(zhǔn)化運動斗蒋,分別開源了Sentry和Ranger,在centralized訪問控制領(lǐng)域展開新一輪的角逐笛质。

Ranger在0.4版本的時候被Hortonworks加入到其Hadoop發(fā)行版HDP里泉沾,目前作為Apache incubator項目,最新版本是0.6妇押。它主要提供如下特性:

  • 基于策略(Policy-based)的訪問權(quán)限模型
  • 通用的策略同步與決策邏輯跷究,方便控制插件的擴展接入
  • 內(nèi)置常見系統(tǒng)(如HDFS、YARN敲霍、HBase)的控制插件揭朝,且可擴展
  • 內(nèi)置基于LDAP队贱、文件的用戶同步機制,且可擴展
  • 統(tǒng)一的管理界面潭袱,包括策略管理柱嫌、審計查看、插件管理等

本文將從權(quán)限模型屯换、總體架構(gòu)编丘、系統(tǒng)插件三個角度來展開,剖析Ranger如何實現(xiàn)centralized訪問控制彤悔。

權(quán)限模型

訪問權(quán)限無非是定義了“用戶-資源-權(quán)限”這三者間的關(guān)系嘉抓,Ranger基于策略來抽象這種關(guān)系,進而延伸出自己的權(quán)限模型晕窑。為了簡化模型抑片,便于理解,我用以下表達式來描述它:

Policy = Service + List<Resource> + AllowACL + DenyACL
AllowACL = List<AccessItem> allow + List<AccssItem> allowException
DenyACL = List<AccessItem> deny + List<AccssItem> denyException
AccessItem = List<User/Group> + List<AccessType>

接下來從”用戶-資源-權(quán)限*”的角度來詳解上述表達:

  • 用戶:由User或Group來表達杨赤;User代表訪問資源的用戶敞斋,Group代表用戶所屬的用戶組。

  • 資源:由(Service, Resource)二元組來表達疾牲;一條Policy唯一對應(yīng)一個Service植捎,但可以對應(yīng)多個Resource。

  • 權(quán)限:由(AllowACL, DenyACL)二元組來表達阳柔,兩者都包含兩組AccessItem焰枢。而AccessItem則描述一組用戶與一組訪問之間的關(guān)系——在AllowACL中表示允許執(zhí)行,而DenyACL中表示拒絕執(zhí)行舌剂。

下表列出了幾種常見系統(tǒng)的模型實體枚舉值:


關(guān)于權(quán)限這個部分济锄,還有一點沒有解釋清楚:為什么AllowACL和DenyACL需要分別對應(yīng)兩組AccessItem?這是由具體使用場景引出的設(shè)計:

以AllowACL為例霍转,假定我們要將資源授權(quán)給一個用戶組G1拟淮,但是用戶組里某個用戶U1除外,這時只要增加一條包含G1的AccessItem到AllowACL_allow谴忧,同時增加一條包含U1的AccessItem到AllowACL_allowException即可很泊。類似的原因可反推到DenyACL。

既然現(xiàn)在一條Policy有(allow, allowException, deny, denyException)這么四組AccessItem沾谓,那么判斷用戶最終權(quán)限的決策過程是怎樣的委造?

總體來說,這四組AccessItem的作用優(yōu)先級由高到低依次是:

denyException > deny > allowException > allow

訪問決策樹可以用以下流程圖來描述:


這里要對決策下放做一個解釋:如果沒有policy能決策訪問均驶,Ranger可以選擇將決策下放給系統(tǒng)自身的訪問控制層昏兆,比如HDFS的ACL。

總體架構(gòu)

Ranger的總體架構(gòu)如下圖所示妇穴,主要由以下三個組件構(gòu)成:

  • AdminServer: 以RESTFUL形式提供策略的增刪改查接口爬虱,同時內(nèi)置一個Web管理頁面隶债。

  • AgentPlugin: 嵌入到各系統(tǒng)執(zhí)行流程中,定期從AdminServer拉取策略跑筝,根據(jù)策略執(zhí)行訪問決策樹死讹,并且定期記錄訪問審計。插件的實現(xiàn)原理將在后文詳細介紹曲梗。

  • UserSync: 定期從LDAP/File中加載用戶赞警,上報給AdminServer。

系統(tǒng)插件

前文已經(jīng)提到虏两,系統(tǒng)插件主要負責(zé)三件事:

  • 定期從AdminServer拉取策略

  • 根據(jù)策略執(zhí)行訪問決策樹

  • 定期記錄訪問審計

以上執(zhí)行邏輯是通用的愧旦,可由所有系統(tǒng)插件引用,因此剩下的問題是如何把這些邏輯嵌入到各個系統(tǒng)的訪問決策流程中去定罢。目前Ranger里有兩種做法:

  • 實現(xiàn)可擴展接口:多數(shù)的系統(tǒng)在實現(xiàn)時都有考慮功能擴展性的問題笤虫,一般會為核心的模塊暴露出可擴展的接口,訪問控制模塊也不例外祖凫。Ranger通過實現(xiàn)訪問控制接口琼蚯,將自己的邏輯嵌入各個系統(tǒng)。下表列出了Ranger插件對幾個常見系統(tǒng)的擴展接口:
  • 代碼注入:不排除有少數(shù)系統(tǒng)沒有將訪問控制模塊暴露出擴展點蝙场,這個時候Ranger依賴Java代碼注入機制(java.lang.instrument)來實現(xiàn)邏輯嵌入凌停。以HDFS插件為例粱年,Ranger利用ClassFileTransformer售滤,直接修改HDFS訪問控制類FSPermissionChecker的ClassFile,將checkPermission方法替換成Ranger的自定義實現(xiàn)台诗。

后話

隨著Hadoop生態(tài)圈進軍企業(yè)級市場完箩,數(shù)據(jù)安全逐漸成為關(guān)注焦點。Ranger作為標(biāo)準(zhǔn)化的訪問控制層拉队,引入統(tǒng)一的權(quán)限模型與管理界面弊知,極大地簡化了數(shù)據(jù)權(quán)限的管理。不過粱快,Ranger目前處于孵化項目秩彤,在功能性與穩(wěn)定性上仍然有較大的提升空間,其能否覆蓋更多的系統(tǒng)事哭,一統(tǒng)江湖成為標(biāo)準(zhǔn)漫雷,讓我們拭目以待垄潮。

轉(zhuǎn)載原文:

Apache Ranger剖析:Hadoop生態(tài)圈的安全管家

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末税弃,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子躲叼,更是在濱河造成了極大的恐慌谤辜,老刑警劉巖蓄坏,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件价捧,死亡現(xiàn)場離奇詭異,居然都是意外死亡涡戳,警方通過查閱死者的電腦和手機结蟋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妹蔽,“玉大人椎眯,你說我怎么就攤上這事「炱瘢” “怎么了编整?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長乳丰。 經(jīng)常有香客問我掌测,道長,這世上最難降的妖魔是什么产园? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任汞斧,我火速辦了婚禮,結(jié)果婚禮上什燕,老公的妹妹穿的比我還像新娘粘勒。我一直安慰自己,他們只是感情好屎即,可當(dāng)我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布庙睡。 她就那樣靜靜地躺著,像睡著了一般技俐。 火紅的嫁衣襯著肌膚如雪乘陪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天雕擂,我揣著相機與錄音啡邑,去河邊找鬼。 笑死井赌,一個胖子當(dāng)著我的面吹牛谤逼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播仇穗,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼流部,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了仪缸?” 一聲冷哼從身側(cè)響起贵涵,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后宾茂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瓷马,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年跨晴,在試婚紗的時候發(fā)現(xiàn)自己被綠了欧聘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡端盆,死狀恐怖怀骤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情焕妙,我是刑警寧澤蒋伦,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站焚鹊,受9級特大地震影響痕届,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜末患,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一研叫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧璧针,春花似錦嚷炉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至走搁,卻和暖如春独柑,著一層夾襖步出監(jiān)牢的瞬間迈窟,已是汗流浹背私植。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留车酣,地道東北人曲稼。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像湖员,于是被迫代替她去往敵國和親贫悄。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,960評論 2 355