实战配置Hbase_ACL 权限

Hbase自身权限控制

HBase的权限管理包括两个部分,分别是Authentication&Authorization

Authentication:针对某访问ip或者主机 是否有权成为集群的regionserver或者client端;

其中Authentication由kerberos提供解决方案(机器级别的安全认证),用户级别的Authorization由ACL模块控制;kerberos实现了机器级别的安全认证,包括服务器到服务器的认证,确保不会有其他机器冒充regionserver。kerberos中包含一个中心服务器(KDC),KDC中有数据库,由管理员将集群中确定的机器手动添加到上述数据库中,在KDC上会分别产生主机与各节点的keytab,并将这些keytab分发到对应的节点上。通过这些keytab文件,节点可以从KDC上获得与目标节点通信的秘钥,进而被目标节点所认证,从而才能提供相应的服务(kerberos安装流程和特点此处不过多说明);

简括kerberos对权限安全认证

1、kerberos提供了机器级别的安全认证,但调研及尝试安装下来之后,觉得首先kerberos的安装流程复杂,如果是建设新集群,可以考虑使用kerberos,但当前集群已经存在上百个业务在时时跑,复杂的安装流程势必会造成业务中断,不是业务方所能接受的;

2、kerberos对应用访问集群的性能有一定影响,加了kerberos认证后,client端再想访问集群,需要先两次访问KDC,第一次访问向KDC证明我是我自己,第二次访问时生成services端和client端之间的session key用于service端对client的身份鉴别,一次用户请求的访问路径变长,必然有性能损耗;

3、使用kerberos,也添加了外部需要维护的依赖,包括KDC&数据库DB等等。

Authorization:是针对client端对集群数据的读写等权限;

可参考cloudera官网:

https://www.cloudera.com/documentation/enterprise/5-8-x/topics/cdh_sg_hbase_authorization.html

    HBase的权限管理依赖协协处理器。所以我们需要配置

hbase.security.authorization=true,以及

hbase.coprocessor.master.classes和hbase.coprocessor.region.classes使其包含org.apache.hadoop.hbase.security. access.AccessController来提供安全管控能力。所以需要设置下面参数(hbase-site.xml):


<property>
   <name>hbase.superuser</name>
   <value>elguo</value>
</property>
<property>
  <name>hbase.coprocessor.region.classes</name>    
  <value>org.apache.hadoop.hbase.security.access.AccessController</value>
</property>
<property>
  <name>hbase.coprocessor.master.classes</name>
  <value>org.apache.hadoop.hbase.security.access.AccessController</value>
</property>
<property>
  <name>hbase.rpc.engine</name>
  <value>org.apache.hadoop.hbase.ipc.SecureRpcEngine</value>
</property>
<property>
   <name>hbase.security.authorization</name>
   <value>true</value>
</property>

HBase提供的五个权限标识符:RWXCA,分别对应着READ('R'), WRITE('W'), EXEC('X'), CREATE('C'), ADMIN('A')
HBase提供的安全管控级别包括:
Superuser:拥有所有权限的超级管理员用户。通过hbase.superuser参数配置
Global:全局权限可以作用在集群所有的表上。
Namespace :命名空间级。
Table:表级。
ColumnFamily:列簇级权限。

 Cell:单元级。

和关系数据库一样,权限的授予和回收都使用grant和revoke,但格式有所不同。grant语法格式:
grant user permissions table column_family column_qualifier
例如,给用户u_clustertech分配对表t_bigdata_ct有读写的权限, 在启用了hbase.security.authorization之后,默认每个用户只能访问当前的表。而之前创建的t_bigdata_ct表的属主是elguo,其他用户对其没有访问权限。此时我们通过u_clustertech来查找:


sudo -u elguo hbase shell
> scan 't_bigdata_ct'
ERROR: org.apache.hadoop.hbase.security.AccessDeniedException: Insufficient permissions (table=t_bigdata_ct, action=READ)
//权限不够 赋权 
> grant 'u_clustertech', 'RW', 't_bigdata_ct'
0 row(s) in 0.4660 seconds
//查看权限  user_permission
> user_permission
User          Table,Family,Qualifier:Permission 
u_clustertech t_bigdata_ct,,: [Permission: actions=READ,WRITE] 
//u_clustertech 已经有权限
> scan 't_bigdata_ct'
ROW    COLUMN+CELL
Elvis    column=address:city, timestamp=1425891057211, value=BeijingXiTucheng,Union-Vers College
……
//收回权限-格式: revoke user table column family column qualifier
> revoke 'u_clustertech','t_bigdata_ct'
0 row(s) in 0.1860 seconds

 2 开源CM集群配置HBase

 

附上一些其他大佬的配置,可参考配置(重复配置注意一下可以):

<property>
  <name>hbase.security.authorization</name>
  <value>true</value>
</property>
<property>
  <name>hbase.coprocessor.master.classes</name>
  <value>org.apache.hadoop.hbase.security.access.AccessController</value>
</property>
<property>
  <name>hbase.coprocessor.region.classes</name>
  <value>org.apache.hadoop.hbase.security.token.TokenProvider,org.apache.hadoop.hbase.security.access.AccessController</value>
</property>

<property>
  <name>hbase.superuser</name>
  <value>hbase,root,administrator</value>
</property>

以上截图完成就后台配置好了Hbase-site.xml,切记不要手动去后台找到配置文件配置 容易出错

3 真实的生产设置场景访问设置

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值