作者:Eric Lin (林晨輝), Cloudera高級售後技術支持工程師。
在閱讀本文前,建議先閱讀前面的文章:
《0741-什麼是Apache Ranger - 1》
《0742-什麼是Apache Ranger - 2》
《0745-什麼是Apache Ranger - 3》
《0800-什麼是Apache Ranger - 4 - Resource vs Tag Based Policies》
本文主要介紹Ranger中的Hive Plugin,當你嘗試在Hive中創建或修改table時,Ranger是如何工作的。Ranger如果要使用策略對組件進行授權,必須在這些組件上安裝Ranger Plugin。比如為了將授權應用於Hive實體,如DB,Table或Columns,你必須為Hive服務安裝Ranger Plugin。實際情況你可能還需要為HDFS,HBase,Kafka安裝插件,但本文重點介紹Hive Plugin。
那麼什麼是插件,它有什麼作用呢?Ranger的Hive插件實際上是在HiveServer2中附上一小段代碼,可以執行Ranger策略正常運行所需的額外功能。如下圖所示是每個組件之間的關係:
當你在Beeline中運行CREATE TABLE語句創建新表時,它將向HiveServer2提交查詢,HiveServer2在運行該查詢之前,它會先檢查緩存的策略文件(圖中所示為1),判斷提交查詢的用戶有具有執行該操作的權限,才會最終提交查詢並創建表。
成功創建新表後,Ranger的Hive插件將觸發兩件事:
要使上面兩個操作都能執行,需要在Ranger中設置策略以確保hive用戶可以寫數據到Kafka的ATLAS_HOOK Topic中,同時hive用戶需要有權限在Solr中創建索引並寫入數據到HDFS,假設Hive的模擬(Impersonation)已經關閉。否則上面兩個操作會失敗,如果失敗了可以查看HiveServer2的日誌,默認保存在/var/log/hive中。
一旦事件到達Kafka的「 ATLAS_HOOK」,Atlas作為該Topic的consumer,會將這些數據保存到資料庫,圖中所示為4,以便Atlas管理員可以在Web UI中看到此新實體,查看數據溯源信息,以及附加的Tag/Classifications等。
一旦Audit事件到達Solr並且正確的創建了索引,管理員可以在Ranger web UI的Audits頁面查看到該審計信息,圖中所示為5.
請注意,HDFS中的數據僅用於備份,任何服務都不會使用,默認情況下,Solr中的審計數據將在90天後過期。
參考前面的文章《什麼是Apache Ranger - 4 - Resource vs Tag Based Policies》,我們知道什麼是標籤策略以及它是如何工作的。Atlas管理員可以create/modify/delete標籤,如果做了該操作,所有跟Tags/Classifications相關的實體都將作為事件發送到Kafka的「ATLAS_ENTITIES」 Topic中,如上圖所示為6,同時這些實體也會被發送到Ranger TagSync服務,圖中所示為7,並且會保存到Ranger的資料庫中,圖中所示為8。同樣這些操作需要配置Ranger策略,以使atlas用戶有權限寫數據到Kafka的ATLAS_ENTITIES Topic中。
Ranger還具有一個UserSync服務,它可以配置同步LDAP中的user/group信息並將其保存到Ranger的資料庫中。
一旦在Ranger中更新了標籤信息,用戶和組以及所有其他基於資源的策略都已正確同步,HiveServer2中的Hive插件會將其拉到本地緩存中,默認情況下策略會每30秒同步一次,圖中所示為9,以便新的請求會採用新的策略。這樣如果Ranger服務掛了,客戶端如Hive的授權依舊可以正常執行。等Ranger服務恢復,Hive插件則會恢復定期去Ranger同步策略。
最終隨著用戶在Hive中創建或更新資料庫,表或列,該循環又會往復一遍。
原文參考:
https://cloudera.ericlin.me/2020/05/introduction-to-ranger-part-v-hive-plugin/