文檔編寫目的
在前面的文章中,Fayson介紹了《如何使用Ranger 給HDFS 授權》,基于前面的叢集環境和已有的使用者資訊,本篇文章Fayson主要介紹如何使用Ranger 給HBase 授權。
- 文檔概述
1.介紹CDP7.1.3 中Ranger 中HBase預設權限政策
2.使用Ranger 給HBase 設定權限政策并驗證
- 測試環境
1.作業系統Redhat7.6
2.CDP DC7.1.3
Ranger中HBase預設權限政策
使用admin使用者登入http://cdp02.fayson.com:6080 頁面,點選cm_hbase 進入該頁面

在該頁面中可以看到預設有兩個政策,第一個是hbase 使用者的政策,預設擁有所有目錄所有權限,rangerlookup 擁有所有HBase讀和Create的權限。
第二個政策是altas 使用者擁有atlas_janus 和ATLAS_ENTITY_AUDIT_EVENTS 兩個表的Read、Write、Create、admin權限政策,用于Atlas 服務安裝初始化的使用,如果在HBase 中不存在這兩個表,那麼Atlas 服務則運作不正常。請勿随意修改這兩個使用者的權限政策。
使用Ranger 給HBase 設定權限政策并驗證
3.1HBase授權
首先使用admin 使用者登入Ranger 然後給fayson 使用者授予與hbase 使用者同樣的權限,用于我們驗證後面的多級授權政策
然後使用fayson 使用者建立一個測試用的HBase Namespace 名為 testspace ,确認剛剛的授權已生效
hbase(main):004:0> create_namespace 'testspace'
hbase(main):005:0> list_namespace
然後使用 fayson 登入,給testuser1 使用者授權所有權限與fayson 使用者權限一緻,并且給與Delegate Admin 權限,并儲存。
3.2HBase多級授權以及拒絕條件政策
通過上面的步驟,我們使用fayson 使用者給testuser1 授權了HBase的所有權限,然後使用進行testuser1在testspace下建立4個hbase表用于驗證使用Ranger 給HBase 授權的4種政策。
hbase(main):004:0> create "testspace:Allow" ,"name"
hbase(main):005:0> create "testspace:ExcludeAllow", "name"
hbase(main):006:0> create "testspace:Deny", "name"
hbase(main):007:0> create "testspace:ExcludeDeny", "name"
驗證1:Allow Conditions 驗證,我們通過登入testuser1 建立權限政策testallow,給testuser2 授予Allow表的讀、寫、建立權限并驗證。
然後使用testuser2 插入資料并檢視驗證Allow Conditions 已生效。
hbase(main):005:0> create "testspace:Allow" ,"name"
hbase(main):006:0> put 'testspace:Allow', 'rowKey1', 'name:column1', 'testuser2'
hbase(main):007:0> scan "testspace:Allow"
如需執行desc 檢視,則需要給create 權限,否則執行desc ‘testspace:Allow’ 會如下提示:
驗證2:Exclude from Allow Conditions 驗證,使用testuser1 使用者建立權限政策testExcludeAllow。在Allow Conditions給testuser2 授予ExcludeAllow表的讀、寫、建立權限,并且在Exclude from Allow Conditions 排除讀的權限,如下圖所示:
然後使用testuser2 插入ExcludeAllow資料并檢視驗證,驗證Allow Conditions 和Exclude from Allow Conditions都已生效,并且Exclude 條件優先于Allow,是以得到的結果是testuser2 可以插入資料到ExcludeAllow表中,但是不能檢視,驗證如下圖所示:
hbase(main):006:0> put 'testspace:ExcludeAllow, 'rowKey1', 'name:column1', 'testuser2'
hbase(main):007:0> scan "testspace:ExcludeAllow"
驗證3:Deny Conditions 驗證,使用testuser1建立政策 testDeny。在Allow Conditions給testuser2 授予Deny表的讀、寫、建立權限,并且在Deny Conditions種添加拒絕讀的權限。如下圖所示:
根據上面的權限政策,得到的結論與驗證2的結果一緻。testuser2 可以插入資料到Deny 表中,但是不能檢視,驗證如下圖所示:
hbase(main):006:0> put 'testspace:Deny, 'rowKey1', 'name:column1', 'testuser2'
hbase(main):007:0> scan "testspace:Deny"
驗證4:Exclude from Deny Conditions 驗證,使用testuser1 使用者建立權限政策testExcludeDeny。在Allow Conditions給testuser2 授予ExcludeAllow表的讀、寫、建立權限政策。在Deny Conditions 添加拒絕讀、寫的權限政策,并且在Exclude from Deny Conditions 排除拒絕寫的權限政策,如下圖所示:
根據上面的權限政策,得到的結論與驗證2、3的結果一緻。testuser2 可以插入資料到ExcludeDeny 表中,但是不能檢視,驗證如下圖所示:
hbase(main):006:0> put 'testspace:ExcludeDeny, 'rowKey1', 'name:column1', 'testuser2'
hbase(main):007:0> scan "testspace:ExcludeDeny"
登入testuser1 驗證上面所有的資料确認測試2-4使用testuser2都已正常寫入
驗證5:HBase column 級别授權 , 使用testuser1 使用者建立權表testColumn,并put 資料
hbase(main):004:0> create "testspace:testColumn" ,"name","age"
hbase(main):005:0> desc "testspace:testColumn"
hbase(main):006:0> put 'testspace:testColumn', 'rowKey1', 'name:column1', 'testuser1'
hbase(main):007:0> put 'testspace:testColumn', 'rowKey1', 'age:column1', '20'
hbase(main):008:0> scan 'testspace:testColumn'
然後使用testuser1 使用者建立權限策testColumn。隻給testuser2 使用者testColumn 表name 列的讀寫權限,如下圖所示:
根據上面的權限政策,testuser2 可以插入資料到testColumn表name 列以及檢視該列,其餘的列不可檢視以及寫入,驗證如下圖所示:
檢視驗證,檢視testColumn表的name 列有權限,檢視age 列無權限
hbase(main):005:0> scan 'testspace:testColumn',{COLUMNS=>'name'}
hbase(main):006:0> scan 'testspace:testColumn',{COLUMNS=>'age'}
hbase(main):006:0> put 'testspace:testColumn', 'rowKey1', 'name:column1', 'testuser2'
hbase(main):007:0> put 'testspace:testColumn', 'rowKey1', 'age:column1', '20'