开启HBase ACL

本文为您介绍如何开启HBase ACL(授权)。

背景信息

HBase在不开启授权的情况下,任何账号对HBase集群可以进行任何操作,例如disable table、drop table、major compact等。

对于没有Kerberos认证的集群,即使开启了HBase授权,用户也可以伪造身份访问集群服务。所以建议创建高安全模式(即支持Kerberos)的集群,详情请参见Kerberos概述

基本概念

授权(ACL)就是将对某个范围的资源的操作权限授予某个实体。

在HBase 中,上述对应的三个概念分别为:

  • 某个范围(Scope)的资源

    名称

    描述

    Superuser

    超级账号可以进行任何操作,运行HBase服务的账号默认是Superuser,也可以在hbase-site.xml中配置hbase.superuser的值来添加超级账号。

    Global

    Global Scope拥有集群所有table的Admin权限。

    Namespace

    在Namespace Scope进行相关权限控制。

    Table

    在Table Scope进行相关权限控制。

    ColumnFamily

    在ColumnFamily Scope进行相关权限控制。

    Cell

    在Cell Scope进行相关权限控制。

  • 操作权限

    名称

    描述

    Read(R)

    读取某个Scope资源的数据。

    Write (W)

    写数据到某个Scope的资源。

    Execute (X)

    在某个Scope执行协处理器。

    Create (C)

    在某个Scope创建或删除表等操作。

    Admin(A)

    在某个Scope进行集群相关操作,如balance、assign等。

  • 某个实体

    名称

    描述

    User

    对某个用户授权。

    Group

    对某个用户组授权。

操作步骤

  1. 进入hbase-site.xml页签。

    1. 登录EMR on ECS

    2. 在顶部菜单栏处,根据实际情况选择地域和资源组

    3. 在EMR on ECS页面,单击目标集群操作列的集群服务

    4. 集群服务页面,单击HBase服务区域的配置

    5. 单击hbase-site.xml页签。

  2. hbase-site.xml页签,新增或修改以下配置项。

    Key

    Value

    hbase.security.authorization

    true

    hbase.coprocessor.master.classes

    org.apache.hadoop.hbase.security.access.AccessController

    hbase.coprocessor.region.classes

    org.apache.hadoop.hbase.security.token.TokenProvider,org.apache.hadoop.hbase.security.access.AccessController

    hbase.coprocessor.regionserver.classes

    org.apache.hadoop.hbase.security.access.AccessController,org.apache.hadoop.hbase.security.token.TokenProvider

  3. 重启HBase服务。

    1. 单击右上角的更多操作 > 重启

    2. 在弹出的对话框中,输入执行原因,单击确定

    3. 确认对话框中,单击确定

  4. 授权(ACL)。

    • grant授权

      grant <user> <permissions> [<@namespace> [<table> [<column family> [<column qualifier>]]]
      • user和group的授权方式一样,但group需要加一个前缀@

        grant 'test','R','tbl1'   #给用户test授予表tbl1的读权限。
        grant '@testgrp','R','tbl1' #给用户组testgrp授予表tbl1的读权限。
      • namespace需要加一个前缀@

        grant 'test','C','@ns_1'  #给用户test授予namespace ns_1的CREATE权限。
    • revoke回收

      revoke 'trafodion'  #回收trafodion用户的所有权限。
    • user_permission查看权限

      user_permission 'TABLE_A'  #查看TABLE_A表的所有权限。