溫馨提示:如果使用電腦查看圖片不清晰,可以使用手機打開文章單擊文中的圖片放大查看高清原圖。
Fayson的github:
https://github.com/fayson/cdhproject
提示:代碼塊部分可以左右滑動查看噢
1.文檔編寫目的
在集群中使用HBase,默認是沒有開啟授權認證,任何用訪問HBase集群都可以進行任何操作(如:disable table、drop table)等等。對於未啟用Kerberos認證的集群,即使開啟了HBase授權,用於也可以偽造身份訪問集群服務。因此本篇文章Fayson是在CDH啟用Kerberos認證的前提下對HBase集群進行授權測試。
關於CDH集群啟用Kerberos,大家可以參考Fayson前面的文章《
如何在CDH集群啟用Kerberos
》、《
如何在Redhat7.3的CDH5.14中啟用Kerberos
》和《
如何在Redhat7.4的CDH5.15中啟用Kerberos
》
- 文檔概述
3.總結
- 測試環境
1.CM和CDH版本為5.14.3
2.Redhat7.4
- 前置條件
1.集群已啟用Kerberos
1.登錄CM,進入HBase服務配置界面
2.在搜索欄輸入“authorization”,配置為啟用
3.配置HBase超級用戶為hbase
可以根據需要設置其他用戶為超級管理員。
完成如上配置後,根據提示重啟HBase服務。
3.HBase的ACLs權限控制說明
HBase ACLs的訪問分為5個級別:
Read(R) : 可以讀取給定範圍內數據的權限
Write(W) : 可以在給定範圍內寫數據
Executor(X) : 可以在指定表執行Endpoints類型的協處理
Create(C) : 可以在給定範圍內創建和刪除表(包括非該用戶創建的表)
Admin(A) : 可以執行集群操作,如平衡數據等
以上5個控制級別都需要為其指定範圍,範圍定義如下:
Superuser : 超級用戶可以執行HBase中所有操作及任何資源(如:hbase用戶)
Global: 在全局範圍內授予的權限,可以在超級管理下創建多種集群管理員
Namespace: 在命名空間範圍內授權,適用於命名空間內所有表
Table: 表範圍授權,適用於為指定表進行授權
ColumnFamily: ColumnFamily範圍內授權
創建admin的kerberos賬號,確保集群所有節點操作系統存在admin用戶
[root@cdh01 ~]# kadmin.local -q "addprinc -pw 123456 [email protected]"
(可左右滑動)
授權前使用admin用戶訪問HBase執行操作,提示admin用戶沒有權限操作
使用hbase超級管理員,為admin用戶組全局範圍授權,授權admin用戶有創建表的權限
[root@cdh01 ~]# klist
[root@cdh01 ~]# hbase shell
hbase(main):001:0> whoami
hbase(main):002:0> grant '@admin', 'CA'
hbase(main):003:0> user_permission '.*'
(可左右滑動)
使用admin用戶訪問Hbase執行操作
hbase(main):015:0* whoami
hbase(main):016:0> create_namespace 'my_ns_admin'
hbase(main):017:0> create 'my_ns_admin:testtable', 'f1'
hbase(main):019:0> put 'my_ns_admin:testtable','0001','f1:name','fayson'
hbase(main):017:0> user_permission '.*'
(可左右滑動)
查看用戶權限
測試總結:
擁有CA權限的admin用戶,可以在HBase庫中創建NameSpace和Table,並可以對自己新建的表進行讀、寫、刪除等操作,但不能操作非admin用戶創建的表。如果admin用戶擁有RCA的權限則可以讀非admin用戶創建的表進行操作(如:讀、寫、刪除操作)
使用fayson用戶訪問HBase,進行操作
[root@cdh03 ~]# klist
[root@cdh03 ~]# hbase shell
hbase(main):001:0> create 'fayson_table','f1'
hbase(main):001:0> create 'my_ns_admin:fayson_table','f1'
(可左右滑動)
在前面通過hbase的超級管理員為admin用戶賦予了全局的CA權限,這裡使用admin用戶為fayson用戶授權my_ns_admin空間的所有權限
hbase(main):018:0* whoami
hbase(main):019:0> grant 'fayson','RWCXA','@my_ns_admin'
(可左右滑動)
為fayson用戶授權後,再進行操作
hbase(main):029:0* whoami
hbase(main):030:0> list
=> ["my_ns_admin:testtable"]
hbase(main):031:0> create 'my_ns_admin:fayson_testtable','f1','f2'
hbase(main):032:0> put 'my_ns_admin:fayson_testtable','0001','f1:name','fayson'
hbase(main):033:0> scan 'my_ns_admin:fayson_testtable'
hbase(main):034:0> scan 'my_ns_admin:testtable'
hbase(main):035:0> put 'my_ns_admin:testtable','0001','f1:age',28
hbase(main):036:0> scan 'my_ns_admin:testtable'
hbase(main):037:0> disable 'my_ns_admin:testtable'
hbase(main):038:0> drop 'my_ns_admin:testtable'
(可左右滑動)
測試在my_ns_admin空間外創建表
測試總結:
fayson用戶被授權了my_ns_admin空間下所有權限(RWCXA),則可以在該空間下創建、刪除表、也可以向該空間下所有表put數據等操作,對於未授權的其它空間無任何操作權限。
使用test用戶訪問HBase,進行操作,為給test用戶授予任何權限,該用戶查看不到任何表,也無法創建表
使用fayson用戶為test用戶授予my_ns_admin:fayson_testtable表的RW權限
[root@cdh03 ~]# hbase shell
hbase(main):001:0> whoami
hbase(main):002:0> grant 'test','RW','my_ns_admin:fayson_testtable'
hbase(main):003:0> user_permission '.*'
hbase(main):004:0>
(可左右滑動)
再次使用test用戶訪問HBase
[root@cdh04 ~]# hbase shell
hbase(main):001:0> whoami
hbase(main):002:0> list
=> ["my_ns_admin:fayson_testtable"]
hbase(main):003:0> scan 'my_ns_admin:fayson_testtable'
hbase(main):004:0> put 'my_ns_admin:fayson_testtable','0001','f2:age','29'
hbase(main):005:0> scan 'my_ns_admin:fayson_testtable'
hbase(main):007:0> create 'test_table','f1
(可左右滑動)
測試總結:
fayson用戶同樣也可以為test用戶授予my_ns_admin:tfayson_testtable表的RW權限,擁有RW權限的test用戶則可以看到該表,並可以對該表進行讀寫操作,但無法進行其他操作。
4.測試ColumnFamily範圍授權
創建兩個測試用戶testcf和testcf_w
[root@cdh01 shell]# sh ssh_do_all.sh node.list "useradd testcf"
[root@cdh01 shell]# kadmin.local -q "addprinc -pw 123456 [email protected]"
[root@cdh01 shell]# sh ssh_do_all.sh node.list "useradd testcf_w"
[root@cdh01 shell]# kadmin.local -q "addprinc -pw 123456 [email protected]"
(可左右滑動)
在testcf和testcf_w用戶未授權的情況下沒有任何權限訪問HBase的表
使用fayson用戶為testcf用戶授予my_ns_admin:fayson_testtable表的f1列簇的RW訪問權限
[root@cdh03 ~]# hbase shell
hbase(main):001:0> whoami
hbase(main):002:0> grant 'testcf','R','my_ns_admin:fayson_testtable','f1'
hbase(main):002:0> grant 'testcf_w','RW','my_ns_admin:fayson_testtable','f2'
hbase(main):003:0> user_permission '.*'
hbase(main):004:0>
(可左右滑動)
查看my_ns_admin:fayson_testtable表,該表有兩個列簇
使用testcf用戶訪問my_ns_admin:fayson_testtable表並對該表進行操作
hbase(main):004:0* list
hbase(main):005:0> scan 'my_ns_admin:fayson_testtable'
(可左右滑動)
向my_ns_admin:fayson_testtable表的f1列簇中put數據失敗
使用testcf_w用戶訪問my_ns_admin:fayson_testtable表並對該表進行操作
[root@cdh04 ~]# kinit testcf_w
hbase(main):001:0> list
=> ["my_ns_admin:fayson_testtable"]
hbase(main):002:0> scan 'my_ns_admin:fayson_testtable'
hbase(main):003:0> put 'my_ns_admin:fayson_testtable','0001','f2:name','fayson2'
hbase(main):004:0> scan 'my_ns_admin:fayson_testtable'
hbase(main):005:0>
(可左右滑動)
測試總結:
在未給testcf用戶賦予my_ns_admin:fayson_testtable表f1列簇的Read權限時,使用testcf用戶無法訪問到該表,授予了f1列簇Read權限後可以查看錶中f1列簇的數據,但無法向表中f1列簇寫入數據。
在未給testcf_w用戶賦予my_ns_admin:fayson_testtable表f2列簇的RW權限時,使用testcf_w用戶無法訪問到該表,授予f2列簇的RW權限後可以查看錶中f2列簇的數據,也可以向f2列簇中寫數據。
5.總結
1.HBase既可以針對用戶也可以針對用戶組進行授權,如果需要針對用戶組授權則需要在用戶組前添加“@”(如:grant ‘@fyason’, ‘RWXCA’)
2.在CDH中HBase支持Global、NameSpace、Table、ColumnFamily範圍授權,無法支持Row級別授權。
3.擁有Admin(A)權限的用戶,可以為其它用戶進行任何級別授權,在使用HBase授權時需要慎用。
4.當為用戶或用戶組擁有CA權限時,用戶和用戶組創建表時會默認的為當前操作用戶添加該表的RWXCA權限
5.可以通過user_permission ‘.*’查看當前HBase所有的授權
6.通過revoke命令為USER、Group、NameSpace等取消授權,命令如下
revoke 提示:代碼塊部分可以左右滑動查看噢 為天地立心,為生民立命,為往聖繼絕學,為萬世開太平。 溫馨提示:要看高清無碼套圖,請使用手機打開並單擊圖片放大查看。 推薦關注Hadoop實操,第一時間,分享更多Hadoop乾貨,歡迎轉發和分享。 [,
閱讀更多 Hadoop實操 的文章