背景
數(shù)據(jù)權(quán)限的治理也是一個挺有意思的話題, 你可以把權(quán)限管理放到應(yīng)用層, 當用戶提交查詢到 hive/presto/spark 的時候, 首先進行SQL的檢查, 得知該用戶是否有相關(guān)的權(quán)限. 沒有的話就直接攔截, 不往 database(db) 層傳了. 還有另外一種權(quán)限管理的方法, 就是把權(quán)限管理下放到 db 層. 這樣做的好處很多:
應(yīng)用層可以隨時換, 不擔心權(quán)限管理問題, 不重復造輪子.
比如使用 Hue, 報表系統(tǒng), 及其他 BI 工具, 完全不擔心權(quán)限的接入問題, 因為 db 層已經(jīng)嚴格監(jiān)管了每一個查詢.支持系統(tǒng)賬號的數(shù)據(jù)計算需求.
用戶賬號通過應(yīng)用層如 Hue 等與 db 交互完全沒問題, 當公司的一個部門平臺(系統(tǒng)賬號)想要不定期的提取數(shù)據(jù)進行計算, 提供一個應(yīng)用層的接口就會有很多問題. 如應(yīng)用層需要登錄(手機掃碼或短信驗證碼), 就會碰到機器怎么繞過登錄的問題, 以及應(yīng)用層的 nginx 超時的限制, 應(yīng)用層是否提供 thrift 接口等, 都會對系統(tǒng)賬號的數(shù)據(jù)消費/計算造成很多障礙. 而如果系統(tǒng)賬號可以直接訪問 database 層, 以上的問題就都不存在了.
調(diào)研下來, Apache Ranger 和 Apache Sentry 解決的就是 database 層的權(quán)限管理問題.
這兩個項目對比后, 個人更加傾向于使用 Apache Ranger, 后續(xù)可以再詳細介紹一下這兩者的對比.
Ranger 項目結(jié)構(gòu)
以下的項目分析都是基于 Ranger 1.2.0 版本.
Apache Ranger 這個項目在15, 16年還是比較活躍的, 現(xiàn)在看來, 應(yīng)該不會有后續(xù)的版本迭代了, 連現(xiàn)在比較流行的spark和presto的插件都沒有實現(xiàn). Anyway~
Apache Ranger 使用Java開發(fā), 提供了主流大數(shù)據(jù)組件的權(quán)限管理, 如hive, hbase, hdfs, kafka 等. 整體的項目結(jié)構(gòu)劃分很清晰, 每個插件是一個模塊, 公共的功能如 audit(審計) 和 policyengine(權(quán)限決策引擎) 都單獨抽出來作為一個模塊. Ranger 提供了一個admin web服務(wù), 該服務(wù)用來配置和管理各個插件, 存儲 policy(策略) 的一個web server. 各個插件會每隔 30 秒從 Ranger admin web 拉取用戶權(quán)限的信息, 插件本地也有緩存, 所以即使web server掛了, 仍然不影響插件的權(quán)限管控.
Ranger admin web server
找到 [security-admin-web] 模塊, 該模塊包含了web后臺 RESTful API的代碼, dao, biz, view 層; 以及前端的 js 代碼.
通過 maven 打包后, 可在 target/
目錄下找到 ranger-1.2.0-admin.tar.gz
, 解壓后根據(jù)官網(wǎng) https://cwiki.apache.org/confluence/display/RANGER/Ranger+Installation+Guide#RangerInstallationGuide-Steps
的步驟進行安裝即可. 安裝過程中如果 solr 不想配置, 可以不填 audit 部分的配置信息(填了反而出現(xiàn)很多 db grant 方面的權(quán)限問題...). 安裝后 ranger 注冊成為系統(tǒng)服務(wù), 實際是通過把 [embeddedwebserver] 模塊中的 scripts/ranger-admin-initd
copy 一份到 /etc/init.d/
中. 才得以通過 service ranger-admin start
啟動.
Ranger hive plugin
ranger 的 plugin 開發(fā)都差不多, 就以 hive 為例簡單介紹一下. hive 插件的工作原理是以 jar 包的形式, 放到 hive 的 /etc/hive/lib
目錄下, 當 hiveserver 啟動后, 這個 jar 包會出現(xiàn)在 classpath 中, 從而開始產(chǎn)生影響.
值得一提的是, hive 插件只能管控 hiveserver, 不能對metastore 起到管理作用, hive的 cli 也是不在管控范圍內(nèi).
hive plugin通過實現(xiàn) ranger 和 hive 的一些接口, 完成了權(quán)限的管理, 決策引擎最終也會被打入 hive plugin 的 jar 包中. 上面提到過, policyengine 是在 [ranger-plugins-common] 模塊中.
以上是 Apache Ranger 的項目剖析, 以后再慢慢深入, 如怎么開發(fā)一個插件, 脫離ranger, 怎么自己寫權(quán)限插件?
謝謝閱讀, 如有問題, 可以私信~~