CDP 使用 Apache Ranger 进行数据安全管理。如果您希望利用 Ranger 进行集中安全管理,则需要将 HBase ACL 迁移到Ranger策略。这可以通过从 Cloudera Manager 访问的 Ranger webUI 来完成。但首先,让我们快速了解用于访问控制的 HBase 方法。
HBase 授权
如果设置了授权(例如使用 Kerberos 并将hbase.security.authorization属性设置为true),则用户可以在允许他们访问的资源上定义规则。可以为表中的单个表、列和单元格定义这些规则。
HBase 访问级别
HBase 访问级别彼此独立授予,并允许在给定范围内进行不同类型的操作。
可能的权限(来自“RWXCA”集合的零个或多个字母):
- Read (R) – 可以读取给定范围内的数据
- Write (W) – 可以在给定范围内写入数据
- Execute (X) – 可以在给定范围内执行协处理器端点
- Create (C) – 可以在给定范围内创建表或删除表
- Admin (A) – 可以执行集群操作,例如平衡集群或在给定范围内分配区域
可能的范围:
- 超级用户 - 超级用户可以对任何资源执行 HBase 中可用的任何操作。在集群上运行 HBase 的用户是超级用户。分配给HMaster上hbase-site.xml配置文件中的配置属性hbase.superuser 的任何主体也是超级用户。
- 全局 - 在全局范围内授予的权限允许管理员对集群的所有表进行操作。
- 命名空间 – 在命名空间范围内授予的权限适用于给定命名空间内的所有表。
- 表 – 在表范围内授予的权限适用于给定表中的数据或元数据。
- ColumnFamily – 在 ColumnFamily 范围内授予的权限适用于该 ColumnFamily 中的单元格。
- 单元格 - 在单元格范围授予的权限适用于该精确单元格坐标。
导出 HBase ACL
1. 使用 HBase 服务凭据通过 Kerberos 登录。
2. 启动 hbase shell 并列出 ACL。
要列出 ACL,请使用以下命令:
- user_permission '.*'
- 或者使用超级用户权限:scan 'hbase:acl'
扫描 'hbase:acl ' 的示例输出:
ROW COLUMN CELL
代码语言:javascript复制emp column=l:hbase, timestamp=1612190971868, value=RWXCA
emp2 column=l:hbase, timestamp=1612191218963, value=RWXCA
emp2 column=l:user1, timestamp=1612191426624, value=RWC
emp column=l:test,personal data, timestamp=1612273141925, value=RW
emp column=l:test,personal data,1, timestamp=1612273322678, value=RW
emp column=l:@group-usr,personal data,1, timestamp=1612273324527, value=RW
user_permission '.* ' 的示例输出:
代码语言:javascript复制User Namespace,Table,Family,Qualifier:Permission
hbase default,emp,,: [Permission: actions=READ,WRITE,EXEC,CREATE,ADMIN]
user1 default,emp2,,: [Permission: actions=READ,WRITE,CREATE]
hbase default,emp2,,: [Permission: actions=READ,WRITE,EXEC,CREATE,ADMIN]
test default,emp,personal data,: [Permission: actions=READ,WRITE]
test default,emp,personal data,1: [Permission: actions=READ,WRITE]
@group-usr default,emp,personal data,1: [Permission: actions=READ,WRITE]
注意:组和用户以相同的方式获得访问权限,但组以“ @ ”字符为前缀。表和命名空间的指定方式相同,但命名空间以“ @ ”字符为前缀。
单元级权限示例:
代码语言:javascript复制test default,emp,personal data,1: [Permission: actions=READ,WRITE]
在“test”用户对RW权限“默认”的命名空间,上表“EMP”,列“个人资料”和行“1” ..
创建 Ranger 策略
- 在 Cloudera Manager 中,选择 Ranger 服务。
- 找到将您重定向到 Ranger UI的webUI链接。
- 登录到 Ranger UI。
该访问管理器页面显示:
1. 选择现有的 HBase 服务。将出现“策略列表”页面。
2. 单击添加新策略。出现创建策略页面。
3. 完成创建策略页面,如下所示:
3.1 策略详情
策略名称 | 输入适当的策略名称。该名称不能在整个系统中重复。此字段是必填字段。 |
---|---|
策略标签 | 为此策略指定标签。您可以根据这些标签搜索报告和过滤策略。 |
正常/覆盖 | 使您能够指定覆盖策略。选择覆盖后,策略中的访问权限将覆盖现有策略中的访问权限。此功能可与添加有效期一起使用以创建覆盖现有策略的临时访问策略。 |
HBase 表 | 选择合适的数据库。可以为特定策略选择多个数据库。此字段是必填字段。 |
HBase 列族 | 对于选定的表,指定策略适用的列族。 |
HBase 列 | 对于选定的表和列族,指定策略适用的列。 |
描述 | (可选)描述政策的目的。 |
审计日志 | 指定是否审核此策略。(取消选择以禁用审核)。 |
添加有效期 | 指定策略的开始和结束时间。 |
3.2 允许/拒绝条件Apache Ranger 支持以下访问条件:
- 允许
- 从允许中排除
- 拒绝
- 从拒绝中排除
这些访问条件使您能够设置细粒度的访问控制策略。
例如,您可以允许财务组中的所有用户访问财务表,但拒绝实习生组中的所有用户访问。假设实习生组的一名成员scott需要处理一项需要访问财务表的任务。在这种情况下,您可以添加一个 Exclude from Deny 条件,以允许用户scott访问金融数据库。
选择角色 | 指定此策略适用的角色。要将角色指定为管理员,请选中委派管理员复选框。管理员可以编辑或删除策略,也可以基于原始策略创建子策略。 |
---|---|
选择组 | 指定此策略适用的组。要将组指定为管理员,请选中委派管理员复选框。管理员可以编辑或删除策略,也可以基于原始策略创建子策略。 |
选择用户 | 指定此策略适用的用户。要将用户指定为管理员,请选中委派管理员复选框。管理员可以编辑或删除策略,也可以基于原始策略创建子策略。 |
权限 | 添加或编辑权限:读取、写入、创建、管理、全选/取消全选。 |
委派管理员 | 您可以使用 Delegate Admin 为策略中指定的用户或组分配管理员权限。管理员可以编辑或删除策略,也可以基于原始策略创建子策略。 |
3.3 您可以使用加号 ( ) 符号添加附加条件。条件按照策略中列出的顺序进行评估。首先应用列表顶部的条件,然后是第二个,然后是第三个,依此类推。拒绝条件总是更强。以下流程图提供了有关 Ranger 策略评估流程的信息。
3.4 最后点击添加。
结论
在这篇博文中,我们研究了如何使用 Cloudera Manager将HBase ACL迁移到 Ranger 策略。不幸的是,迁移没有自动化,因为两种授权方法差别很大。虽然 Ranger 中有一个用于批量加载策略的导入功能,但无法以 Ranger 理解的格式(特别是格式化的 JSON/CSV)从 HBase 导出 ACL。
原文作者:Norbert Kalmar
原文链接:https://blog.cloudera.com/converting-hbase-acls-to-ranger-policies/