[轉]Apache Ranger剖析:Hadoop生態圈的安全管家

前言

2016年,Hadoop迎來了自己十周歲生日。過去的十年,hadoop雄霸武林盟主之位,號令天下,引領大數據技術生態不斷發展壯大,一時間百家爭鳴,百花齊放。然而,兄弟多了不好管,為了搶占企業級市場,各家都迭代出自己的一套訪問控制體系,不管是老牌系統(比如HDFS、Hbase),還是生態新貴(比如Kafka、Alluxio),ACL(Access Control List)支持都是Roadmap里被關注最高的issue之一。

歷史證明跳出混沌狀態的最好方式就是——出臺標準。于是,Hadoop兩大廠Cloudera和Hortonworks先后發起標準化運動,分別開源了Sentry和Ranger,在centralized訪問控制領域展開新一輪的角逐。

Ranger在0.4版本的時候被Hortonworks加入到其Hadoop發行版HDP里,目前作為Apache incubator項目,最新版本是0.6。它主要提供如下特性:
基于策略(Policy-based)的訪問權限模型

  • 通用的策略同步與決策邏輯,方便控制插件的擴展接入

  • 內置常見系統(如HDFS、YARN、hbase)的控制插件,且可擴展

  • 內置基于LDAP、文件的用戶同步機制,且可擴展

  • 統一的管理界面,包括策略管理、審計查看、插件管理等

本文將從權限模型、總體架構、系統插件三個角度來展開,剖析Ranger如何實現centralized訪問控制。

權限模型

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

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>

接下來從”用戶-資源-權限”的角度來詳解上述表達:

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

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

  • 權限:由(AllowACL, DenyACL)二元組來表達,兩者都包含兩組AccessItem。而AccessItem則描述一組用戶與一組訪問之間的關系——在AllowACL中表示允許執行,而DenyACL中表示拒絕執行。

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

關于權限這個部分,還有一點沒有解釋清楚:為什么AllowACLDenyACL需要分別對應兩組AccessItem?這是由具體使用場景引出的設計:

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

既然現在一條Policy有(allow, allowException, deny, denyException)這么四組AccessItem,那么判斷用戶最終權限的決策過程是怎樣的?總體來說,這四組AccessItem的作用優先級由高到低依次是:

denyException > deny > allowException > allow

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

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

總體架構

Ranger的總體架構如下圖所示,主要由以下三個組件構成:

  • AdminServer: 以RESTFUL形式提供策略的增刪改查接口,同時內置一個Web管理頁面。

  • AgentPlugin: 嵌入到各系統執行流程中,定期從AdminServer拉取策略,根據策略執行訪問決策樹,并且定期記錄訪問審計。插件的實現原理將在后文詳細介紹。

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

系統插件

前文已經提到,系統插件主要負責三件事:

  • 定期從AdminServer拉取策略

  • 根據策略執行訪問決策樹

  • 定期記錄訪問審計

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

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

運行過程

整個Ranger的工作過程大概有以下幾部分:

  • User/Group同步
    同步模塊從Unix系統或是LDAP文件系統同步users/groups信息,admin server會存儲這些信息供后續定義policy使用

  • Rest/Web
    用戶、管理員等使用Rest接口或是web界面創建/更新policies,保存到policy數據庫。同時,admin server還會收安裝到不同組件中插件收集來的訪問信息,進行統計。

  • 插件
    輕量java程序,嵌入到hadoop各個組件中。會以一定間隔從admin server拉取policies信息存儲到本地文件中。當用戶通過組件請求數據時,插件會攔截請求,結合本地policy信息進行鑒權。同時會啟一個獨立的線程將此次請求的信息收集起來發送admin server.

總結

隨著Hadoop生態圈進軍企業級市場,數據安全逐漸成為關注焦點。Ranger作為標準化的訪問控制層,引入統一的權限模型與管理界面,極大地簡化了數據權限的管理。不過,Ranger目前處于孵化項目,在功能性與穩定性上仍然有較大的提升空間,其能否覆蓋更多的系統,一統江湖成為標準,讓我們拭目以待。

原文地址

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,835評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,676評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,730評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,118評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,873評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,266評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,330評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,482評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,036評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,846評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,025評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,575評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,279評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,684評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,953評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,751評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,016評論 2 375

推薦閱讀更多精彩內容