Hive表支持级联授权功能
本章节适用于MRS 3.3.0及之后版本,且使用此功能前还需满足以下条件:
- 需排查OBS是否开启AccessLabel功能,若未开启,需手动开启,详细操作请联系OBS运维人员。
- 针对OBS存储源,需满足以下条件,否则OBS表将授权失败:
- 集群中必须已安装Guardian服务。
- OBS表的授权只能针对用户组。
- 仅支持已启用Kerberos认证的集群的OBS级联授权。
操作场景
开启级联授权功能的集群极大地提升了鉴权易用性,用户只需在Ranger页面上对业务表进行一次授权,系统就会自动细粒度关联数据存储源的权限,不需要感知表的存储路径,无需进行二次授权。同时也补齐了基于存算分离授权功能缺陷,可以在Ranger上实现对存算分离表的授权鉴权。Hive表的级联授权功能主要体现为:
- 开启Ranger级联授权后,Ranger中创建策略对表授权时,只需创建表的Hive策略,无需对表存储源进行二次授权。
- 针对已授权的库/表,当存储源发生变动时,周期同步关联新存储源HDFS/OBS,生成对应权限。
- 不支持对视图表进行级联授权。
- 仅支持对数据库/表进行级联授权操作,不支持对分区做级联权限,如果分区路径不在表路径下,则需要用户手动授权分区路径。
- 不支持对Hive Ranger策略中的“Deny Conditions”进行级联授权,即“Deny Conditions”的权限仅限制表权限,不能生成HDFS/OBS存储源端的权限。
- 不支持在Hive Ranger中创建“database”为“*”且“table”为“*”的策略。
- 级联授权生成的HDFS/OBS存储源端的权限弱于HDFS Ranger策略的权限,即如果已经对表的HDFS存储源设置了HDFS Ranger权限,则级联权限将不会生效。
- 不支持对存储源为OBS的表级联授权后直接进行alter操作,需要给对应用户组额外授予OBS表路径的父目录的“Read”和“Write”权限才能使用alter功能,且用户组仅由数字0~9、字母a~Z、下划线或#组成,且最大长度为52个字符,否则将导致策略添加失败,可参考管理MRS集群用户组修改用户组信息。
开启级联授权功能
- 登录FusionInsight Manager页面,选择“集群 > 服务 > Ranger > 配置”。
- 在搜索框中搜索参数“ranger.ext.authorization.cascade.enable”,修改该参数值为“true”。
- 单击“保存”,保存配置。
- 配置保存成功后,单击“实例”,勾选所有RangerAdmin实例,选择“更多 > 重启实例”,在弹出对话框输入密码,单击“确定”,重启所有RangerAdmin实例。
对接HDFS存储源
HDFS存储源无需进行配置。
对接OBS存储源
- 建表时指定Location为OBS路径:
- 已完成存算分离配置,具体请参考“配置Guardian服务对接OBS”。
- 使用Ranger管理员用户rangeradmin登录Ranger管理页面,在首页中单击“EXTERNAL AUTHORIZATION”区域的组件插件名称“OBS”,单击“Add New Policy”,为对应用户的用户组赋予OBS存储路径的“Read”和“Write”的权限,详细操作请参见添加OBS的Ranger访问权限策略。
例如,为“hgroup1”用户组赋予“obs://obs-test/test/”目录的“Read”和“Write”的权限:
- 在首页中单击“HADOOP SQL”区域的组件插件名称“Hive”。在“Access”页签单击“Add New Policy”为对应用户的用户组添加赋予OBS存储路径的“Read”和“Write”权限的URL策略,详细操作请参见添加Hive的Ranger访问权限策略。
例如,为“hgroup1”用户组创建“hive_url_policy”URL策略赋予“obs://obs-test/test/”目录的“Read”和“Write”的权限:
- 进入beeline客户端,在创建表时指定Location为OBS文件系统路径。
cd 客户端安装目录
kinit 组件操作用户
beeline
例如,创建一个表“test”,该表的Location为“obs://obs-test/test/数据库名/表名”:
create table test(name string) location "obs://obs-test/test/数据库名/表名";
- 配置Hive基于MetaStore方式对接OBS:
- 已完成存算分离配置,具体请参考“配置Guardian服务对接OBS”。
- 登录FusionInsight Manager,选择“集群 > 服务 > Hive > 配置”。
- 在搜索框搜索“hive.metastore.warehouse.dir”,修改参数值为OBS路径,例如:obs://hivetest/user/hive/warehouse/,其中“hivetest”为OBS文件系统名。
图1 hive.metastore.warehouse.dir配置
- 保存配置,然后单击“集群 > 服务”,在服务列表中重启Hive服务。
- 更新客户端配置文件。
- 登录Hive客户端所在的节点,执行以下命令修改Hive客户端配置文件目录下的“hivemetastore-site.xml”。
- 将“hive.metastore.warehouse.dir”的值修改为对应的OBS路径,例如“obs://hivetest/user/hive/warehouse/”。
- 修改HCatalog客户端配置文件目录下的“hivemetastore-site.xml”,将“hive.metastore.warehouse.dir”的值修改为对应的OBS路径,例如“obs://hivetest/user/hive/warehouse/”。
- 使用Ranger管理员用户rangeradmin登录Ranger管理页面,在首页中单击“EXTERNAL AUTHORIZATION”区域的组件插件名称“OBS”,单击“Add New Policy”,为对应用户的用户组赋予OBS存储路径的“Read”和“Write”的权限。
例如,为“hgroup1”用户组赋予“obs://hivetest/user/hive/warehouse/”目录的“Read”和“Write”的权限:
- 选择“Settings > Roles > Add New Role”,创建“Role Name”为“hive”的角色:
- 进入Hive Beeline命令行,创建一个表并确认Location为OBS路径。
kinit 组件操作用户
beeline
create table test(name string);
desc formatted test;
如果当前数据库Location已指向HDFS,那么在当前数据库下建表(不指定Location)默认也指向当前HDFS。如需修改默认建表策略可以修改数据库的Location重新指向OBS。
操作如下: