首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在CDH中使用HBase的ACLs进行授权

如何在CDH中使用HBase的ACLs进行授权

作者头像
Fayson
发布2018-07-12 16:08:57
2.5K0
发布2018-07-12 16:08:57
举报
文章被收录于专栏:Hadoop实操Hadoop实操

温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。

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》

  • 文档概述

1.HBase启用授权

2.HBase授权说明及测试

3.总结

  • 测试环境

1.CM和CDH版本为5.14.3

2.Redhat7.4

  • 前置条件

1.集群已启用Kerberos

2.HBase启用授权


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范围内授权

Cell: 为指定的单元格进行授权

4.HBase授权测试


1.测试全局范围授权

创建admin的kerberos账号,确保集群所有节点操作系统存在admin用户

[root@cdh01 ~]# kadmin.local -q "addprinc -pw 123456 admin@FAYSON.COM"

(可左右滑动)

授权前使用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用户创建的表进行操作(如:读、写、删除操作)

2.测试NameSpace范围授权

使用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数据等操作,对于未授权的其它空间无任何操作权限。

3.测试表范围授权

使用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 testcf@FAYSON.COM"
[root@cdh01 shell]# sh ssh_do_all.sh node.list "useradd testcf_w"
[root@cdh01 shell]# kadmin.local -q "addprinc -pw 123456 testcf_w@FAYSON.COM"

(可左右滑动)

在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 <user> [, <@namespace>[, <table> [, <column family> [, <column qualifier>]]]]

提示:代码块部分可以左右滑动查看噢

为天地立心,为生民立命,为往圣继绝学,为万世开太平。 温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档