一、安裝hbase插件
1、解壓安裝插件
從target目錄下拷貝ranger-2.1.0-SNAPSHOT-hbase-plugin.tar.gz到hbase集群,你的這個包的版本可能跟我不一致。
在hbase集群解壓hbase插件包
# tar zxvf ranger-2.1.0-SNAPSHOT-hbase-plugin.tar.gz -C /data1/hadoop
2、配置install.properties文件
修改如下配置:
POLICY_MGR_URL=http://192.168.4.50:6080
REPOSITORY_NAME=hivedev
COMPONENT_INSTALL_DIR_NAME=/data1/hadoop/hbase #hbase安裝目錄
XAAUDIT.SOLR.ENABLE=true
XAAUDIT.SOLR.URL=http://192.168.4.50:6083/solr/ranger_audits
CUSTOM_USER=hduser
CUSTOM_GROUP=hduser
3、啟動插件(需root權限)
#sudo /data1/hadoop/ranger-2.1.0-hbase-plugin/enable-hbase-plugin.sh
啟動插件以后,在hbase-site.xml文件的最后默認會添加如下配置:
<property>
<name>hbase.security.authorization</name>
<value>true</value>
</property>
<property>
<name>hbase.coprocessor.master.classes</name>
<value>org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor</value>
</property>
<property>
<name>hbase.coprocessor.region.classes</name>
<value>org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor</value>
</property>
4、啟動hbase
# start-hbase.sh
5、前台配置
(1) 添加服務
點擊+號按鈕,添加服務,服務名需要與install.properties文件里面配置REPOSITORY_NAME屬性值的一致
服務添加完成以后,默認的hduser用戶擁有全部權限。
6、測試
(1) 使用hduser操作
使用hduser用戶,進入到hase客戶端,創建數據庫,表,插入數據
hbase(main):015:0> create 'test','f1'
hbase(main):016:0> list
TABLE
test
1 row(s)
Took 0.0123 seconds
=> ["test"]
hbase(main):017:0> put 'test','r1','f1:c1','yjt'
hbase(main):018:0> get 'test','r1'
COLUMN CELL
f1:c1 timestamp=1573457130189, value=yjt
1 row(s)
Took 0.0700 seconds
(2) 使用yjl用戶,測試是否擁有權限
說明當前的這個用戶是擁有權限的。
前台配置策略,限制yjl這個用戶對test表的讀取權限
右上角點擊添加策略
添加deny 權限
(3) 測試yjl用戶是否有讀取權限
從上可以看出來,權限被拒絕。
(4) 測試write權限
寫數據到test表,寫入拒絕。
在剛才的策略中為yjl這個用戶添加write權限,如下:
保存,客戶端測試yjl這個用戶是否有寫入權限:
說明配置成功。
這里有三點需要注意:
- 版本是否匹配?
ranger2.x里面使用的hbase版本是2.0.2,所以一開始我在使用hbase1.3.x或者1.4.x的時候,在啟動hbase時,報找不到類錯誤,如下:
2019-11-11 13:50:11,621 FATAL [yjt:16000.activeMasterManager] master.HMaster: The coprocessor org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor threw java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/coprocessor/RegionCoprocessor
java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/coprocessor/RegionCoprocessor
解決辦法就是更換hbase版本,換到2.x,或者降低ranger版本
- Hbase2.x版本的問題
在更換2.x版本以后,在啟動hbase的時候,繼續報錯,報錯如下:
2019-11-11 14:53:57,504 ERROR [Thread-14] master.HMaster: ***** ABORTING master yjt,16000,1573455225686: Unhandled exception. Starting shutdown. *****
java.lang.IllegalStateException: The procedure WAL relies on the ability to hsync for proper operation during component failures, but the underlying filesystem does not support doing so. Please check the config value of 'hbase.procedure.store.wal.use.hsync' to set the desired level of robustness and ensure the config value of 'hbase.wal.dir' points to a FileSystem mount that can provide it.
解決辦法:
在hbase-site.xml配置文件添加如下配置:
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
- Ranger-admin版本與hbase或者其他插件版本不一致可能導致問題。
Ranger-admib我使用的版本是2.1.0,而我在測試hbase的時候,hbase ranger插件我使用的是2.0.0,在啟動hbase的時候,包如下錯誤:
2019-11-11 14:31:28,206 WARN [PEWorker-15] procedure.CreateTableProcedure: Retriable error trying to create table=hbase:namespace state=CREATE_TABLE_ADD_TO_META
org.apache.hadoop.hbase.security.AccessDeniedException: org.apache.hadoop.hbase.security.AccessDeniedException: Insufficient permissions for user ‘hduser',action: put, tableName:hbase:meta, family:info, column: state
at org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor.requirePermission(RangerAuthorizationCoprocessor.java:589)
這樣會導致權限控制失敗,所以ranger-admin與各插件直接需要版本一致,不要給自己找太多麻煩。