0321-如何在CDH中使用HBase的ACLs進行授權

溫馨提示:如果使用電腦查看圖片不清晰,可以使用手機打開文章單擊文中的圖片放大查看高清原圖。

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服務配置界面

0321-如何在CDH中使用HBase的ACLs進行授權

2.在搜索欄輸入“authorization”,配置為啟用

0321-如何在CDH中使用HBase的ACLs進行授權

3.配置HBase超級用戶為hbase

0321-如何在CDH中使用HBase的ACLs進行授權

可以根據需要設置其他用戶為超級管理員。

完成如上配置後,根據提示重啟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]"

(可左右滑動)

0321-如何在CDH中使用HBase的ACLs進行授權

授權前使用admin用戶訪問HBase執行操作,提示admin用戶沒有權限操作

0321-如何在CDH中使用HBase的ACLs進行授權

使用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 '.*'

(可左右滑動)

0321-如何在CDH中使用HBase的ACLs進行授權

使用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 '.*'

(可左右滑動)

0321-如何在CDH中使用HBase的ACLs進行授權

查看用戶權限

0321-如何在CDH中使用HBase的ACLs進行授權

測試總結:

擁有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'

(可左右滑動)

0321-如何在CDH中使用HBase的ACLs進行授權

在前面通過hbase的超級管理員為admin用戶賦予了全局的CA權限,這裡使用admin用戶為fayson用戶授權my_ns_admin空間的所有權限

hbase(main):018:0* whoami
hbase(main):019:0> grant 'fayson','RWCXA','@my_ns_admin'

(可左右滑動)

0321-如何在CDH中使用HBase的ACLs進行授權

為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'

(可左右滑動)

0321-如何在CDH中使用HBase的ACLs進行授權

0321-如何在CDH中使用HBase的ACLs進行授權

測試在my_ns_admin空間外創建表

0321-如何在CDH中使用HBase的ACLs進行授權

測試總結:

fayson用戶被授權了my_ns_admin空間下所有權限(RWCXA),則可以在該空間下創建、刪除表、也可以向該空間下所有表put數據等操作,對於未授權的其它空間無任何操作權限。

使用test用戶訪問HBase,進行操作,為給test用戶授予任何權限,該用戶查看不到任何表,也無法創建表

0321-如何在CDH中使用HBase的ACLs進行授權

使用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>

(可左右滑動)

0321-如何在CDH中使用HBase的ACLs進行授權

再次使用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

(可左右滑動)

0321-如何在CDH中使用HBase的ACLs進行授權

0321-如何在CDH中使用HBase的ACLs進行授權

測試總結:

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]"

(可左右滑動)

0321-如何在CDH中使用HBase的ACLs進行授權

0321-如何在CDH中使用HBase的ACLs進行授權

在testcf和testcf_w用戶未授權的情況下沒有任何權限訪問HBase的表

0321-如何在CDH中使用HBase的ACLs進行授權

使用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>

(可左右滑動)

0321-如何在CDH中使用HBase的ACLs進行授權

0321-如何在CDH中使用HBase的ACLs進行授權

查看my_ns_admin:fayson_testtable表,該表有兩個列簇

0321-如何在CDH中使用HBase的ACLs進行授權

使用testcf用戶訪問my_ns_admin:fayson_testtable表並對該表進行操作

hbase(main):004:0* list
hbase(main):005:0> scan 'my_ns_admin:fayson_testtable'

(可左右滑動)

0321-如何在CDH中使用HBase的ACLs進行授權

向my_ns_admin:fayson_testtable表的f1列簇中put數據失敗

0321-如何在CDH中使用HBase的ACLs進行授權

使用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>

(可左右滑動)

0321-如何在CDH中使用HBase的ACLs進行授權

測試總結:

在未給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乾貨,歡迎轉發和分享。

0321-如何在CDH中使用HBase的ACLs進行授權


分享到:


相關文章: