添加Spark的Ranger访问权限策略
操作场景
Ranger管理员可通过Ranger为Spark用户进行相关的权限设置,实现Hive数据表的精细化权限管控,兼顾业务安全性与可用性。
约束与限制
- Spark/Spark2x组件开启或关闭Ranger鉴权后,需要重启Spark/Spark2x服务才可生效。
- 修改Ranger鉴权后需要重新下载客户端,或手动刷新客户端配置文件“客户端安装目录/Spark2x/spark/conf/spark-defaults.conf”。
- 开启Ranger鉴权:spark.ranger.plugin.authorization.enable=true,同时需要修改参数“spark.sql.authorization.enabled”值为“true”。
- 关闭Ranger鉴权:spark.ranger.plugin.authorization.enable=false。
- Spark/Spark2x中,spark-beeline(即连接到JDBCServer的应用)支持Ranger的IP过滤策略(即Ranger权限策略中的Policy Conditions),spark-submit与spark-sql不支持。
- MRS 3.3.0-LTS及之后的版本中,Spark2x服务改名为Spark,服务包含的角色名也有差异,例如JobHistory2x变更为JobHistory,相关涉及服务名称、角色名称的描述和操作请以实际版本为准。
- 在Ranger上为用户添加Spark SQL的访问策略后,需要在HDFS的访问策略中添加相应的路径访问策略,否则无法访问数据文件,具体请参考添加HDFS的Ranger访问权限策略。
- Ranger策略中global策略仅用于联合Temprorary UDF Admin权限,用来控制UDF包的上传。
- 通过Ranger对Spark SQL进行权限控制时,不支持empower语法。
- Ranger策略不支持本地路径以及HDFS上带空格的路径。
- 开启Ranger鉴权后,对视图操作时,默认需要具备相关表的权限,如果需要对视图进行独立鉴权,不依赖相关表的权限,需要将参数“spark.ranger.plugin.viewaccesscontrol.enable”设置为“true”。
- 使用非Spark-beeline方式提交作业时,需要在“客户端安装目录/Spark/spark/conf/spark-defaults.conf”中设置该参数。
- 使用Spark-beeline方式提交作业时,需要在“客户端安装目录/Spark/spark/conf/spark-defaults.conf”和服务端“JDBCserver > 自定义配置” 中设置该参数。
前提条件
- 集群中已安装Ranger服务且服务运行正常。
- 集群中已创建需要配置权限的用户、用户组或Role,如果是新创建的用户,需等待用户自动同步至Ranger后才可以配置相关权限策略。
- 相关用户已加入hive用户组。
- 集群中Hive服务已启用Ranger鉴权功能,如果手动开启,需要按照“启用Hive服务的Ranger鉴权 > 重启Hive服务 > 重启Spark服务 > 启用Spark服务的Ranger鉴权 > 重启Spark服务”的顺序进行操作。
操作步骤
- 使用Ranger管理员用户登录Ranger WebUI页面,具体操作可参考登录Ranger WebUI界面。
- 在首页中单击“HADOOP SQL”区域的组件插件名称如“Hive”。

- 在“Access”页签单击“Add New Policy”,添加Spark权限控制策略。

- 根据业务需求配置相关参数。
表1 Spark权限参数 参数名称
描述
Policy Name
策略名称,可自定义,不能与本服务内其他策略名称重复。
Policy Conditions
IP过滤策略,可自定义,配置当前策略适用的主机节点,可填写一个或多个IP或IP段,并且IP填写支持“*”通配符,例如:192.168.1.10,192.168.1.20或者192.168.1.*。
Policy Label
为当前策略指定一个标签,您可以根据这些标签搜索报告和筛选策略。
database
适用该策略的Spark数据库名称。
“Include”策略适用于当前输入的对象,“Exclude”表示策略适用于除去当前输入内容之外的其他对象。
table
适用该策略的Spark表名称。
如果需要添加基于UDF的策略,可切换为UDF,然后输入UDF的名称。
“Include”策略适用于当前输入的对象,“Exclude”表示策略适用于除去当前输入内容之外的其他对象。
column
适用该策略的列名,填写*时表示所有列。
“Include”策略适用于当前输入的对象,“Exclude”表示策略适用于除去当前输入内容之外的其他对象。
Description
策略描述信息。
Audit Logging
该策略命中时是否生成审计日志。
- Yes:当用户触发该策略的权限校验时,无论校验结果是允许(Allow)还是拒绝(Deny),会生成一条审计日志。
- No:当用户触发该策略的权限校验时,不会生成任何审计日志。
Allow Conditions
策略允许条件,配置本策略内允许的权限及例外。
在“Select Role”、“Select Group”、“Select User”列选择已创建好的需要授予权限的Role、用户组或用户,单击“Add Conditions”,添加策略适用的IP地址范围,然后再单击“Add Permissions”,添加对应权限。
- select:查询权限
- update:更新权限
- Create:创建权限
- Drop:drop操作权限
- Alter:alter操作权限
- Index:索引操作权限
- All:所有执行权限
- Read:可读权限
- Write:可写权限
- Temporary UDF Admin:临时UDF管理权限
- Select/Deselect All:全选/取消全选
如需添加多条权限控制规则,可单击
按钮添加。如需当前条件中的用户或用户组管理本条策略,可勾选“Delegate Admin”,这些用户将成为受委托的管理员。被委托的管理员可以更新、删除本策略,它还可以基于原始策略创建子策略。
Deny Conditions
策略拒绝条件,配置本策略内拒绝的权限及例外,配置方法与“Allow Conditions”类似。
表2 常见权限配置场景 任务场景
角色授权操作
role admin操作
- 在首页中单击“Settings”,选择“Roles > Add New Role”。
- 设置“Role Name”为“admin”,在“Users”区域,单击“Select User”,选择对应用户名。
- 单击Add Users按钮,在对应用户名所在行勾选“Is Role Admin”,单击“Save”保存配置。
用户绑定Hive管理员角色后,在每个维护操作会话中,还需要执行以下操作:
- 以客户端安装用户,登录安装集群客户端的节点。
- 执行以下命令配置环境变量。
source 客户端安装目录/bigdata_env
- 执行以下命令认证用户。
kinit Spark业务用户
- 执行以下命令登录客户端工具。
spark-beeline
- 执行以下命令更新用户的管理员权限。
set role admin;
创建库表操作
- 在“Policy Name”填写策略名称。
- “database”右侧填写并选择对应的数据库(如果是创建库,需填写将要创建的库名称,或填写“*”表示任意名称的数据库,然后选择所写名称),在“table”与“column”右侧填写并选择对应的表名称、列名称,均支持通配符(“*”)匹配。
- 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。
- 单击“Add Permissions”,勾选“Create”。
删除库表操作
- 在“Policy Name”填写策略名称。
- “database”右侧填写并选择对应的数据库(如果是删除库,需填写将要创建的库名称,或填写“*”表示任意名称的数据库,然后选择所写名称),在“table”与“column”右侧填写并选择对应的表名称、列名称,均支持通配符(“*”)匹配。
- 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。
- 单击“Add Permissions”,勾选“Drop”。
ALTER操作
- 在“Policy Name”填写策略名称。
- “database”右侧填写并选择对应的数据库,在“table”右侧填写并选择对应的表,在“column”右侧填写并选择对应的列名称,支持通配符(“*”)匹配。
- 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。
- 单击“Add Permissions”,勾选“Alter”。
LOAD操作
- 在“Policy Name”填写策略名称。
- “database”右侧填写并选择对应的数据库,在“table”右侧填写并选择对应的表,在“column”右侧填写并选择对应的列名称,支持通配符(“*”)匹配。
- 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。
- 单击“Add Permissions”,勾选“update”。
INSERT操作
- 在“Policy Name”填写策略名称。
- “database”右侧填写并选择对应的数据库,在“table”右侧填写并选择对应的表,在“column”右侧填写并选择对应的列名称,支持通配符(“*”)匹配。
- 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。
- 单击“Add Permissions”,勾选“update”。
- 用户还需要具有Yarn任务队列的“submit-app”权限,默认情况下,hadoop用户组具有向所有Yarn任务队列“submit-app”权限。具体配置请参考添加Yarn的Ranger访问权限策略。
GRANT操作
- 在“Policy Name”填写策略名称。
- “database”右侧填写并选择对应的数据库,在“table”右侧填写并选择对应的表,在“column”右侧填写并选择对应的列名称,支持通配符(“*”)匹配。
- 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。
- 勾选“Delegate Admin”。
ADD JAR操作
- 在“Policy Name”填写策略名称。
- 单击“database”并在下拉菜单中选择“global”。在“global”右侧填写并选择“*”。
- 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。
- 单击“Add Permissions”,勾选“Temporary UDF Admin”。
VIEW与INDEX权限
- 在“Policy Name”填写策略名称。
- “database”右侧填写并选择对应的数据库,在“table”右侧填写并选择对应的VIEW或INDEX名称,在“column”右侧填写并选择“*”。
- 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。
- 单击“Add Permissions”,参照表格上述相关操作,根据需求,给用户勾选相应权限。
其他用户库表操作
- 参照表格上述操作添加对应权限。
- 给当前用户添加其他用户库表的HDFS路径的读、写、执行权限,具体配置请参考添加HDFS的Ranger访问权限策略。
- 单击“Add”,在策略列表可查看策略的基本信息。等待策略生效后,验证相关权限是否正常。
如果需要禁用某条策略,可单击
按钮编辑该策略,设置策略开关为“Disabled”。如果不再使用某条策略,可单击
按钮删除该策略。
配置Spark表数据脱敏
Ranger支持对Spark数据进行脱敏处理(Data Masking),可对用户执行的select操作的返回结果进行处理,以屏蔽敏感信息。
- 修改服务端和客户端的“spark.ranger.plugin.masking.enable”参数值为“true”。
- 服务端:登录FusionInsight Manager页面,选择“集群 > 服务 > Spark/Spark2x > 配置 > 全部配置”,搜索并修改所有的“spark.ranger.plugin.masking.enable”参数值为“true”,保存配置并重启服务。
- 客户端:登录Spark客户端节点,进入目录“{客户端安装目录}/Spark/spark/conf/spark-defaults.conf”,修改“spark.ranger.plugin.masking.enable”参数值为“true”。
- 登录Ranger WebUI界面,在首页单击“HADOOP SQL”区域的组件插件名称如“Hive”。
- 在“Masking”页签单击“Add New Policy”,添加Spark权限控制策略。
- 根据业务需求配置相关参数。
表3 Spark2x数据脱敏参数 参数名称
描述
Policy Name
策略名称,可自定义,不能与本服务内其他策略名称重复。
Policy Conditions
IP过滤策略,可自定义,配置当前策略适用的主机节点,可填写一个或多个IP或IP段,并且IP填写支持“*”通配符,例如:192.168.1.10,192.168.1.20或者192.168.1.*。
Policy Label
为当前策略指定一个标签,您可以根据这些标签搜索报告和筛选策略。
Hive Database
配置当前策略适用的Spark2x中的数据库名称。
Hive Table
配置当前策略适用的Spark2x中的表名称。
Hive Column
配置当前策略适用的Spark2x中的列名称。
Description
策略描述信息。
Audit Logging
该策略命中时是否生成审计日志。
- Yes:当用户触发该策略的权限校验时,无论校验结果是允许(Allow)还是拒绝(Deny),会生成一条审计日志。
- No:当用户触发该策略的权限校验时,不会生成任何审计日志。
Transfer Mask
开启动态脱敏时该策略是否自动传递。
配置Spark动态脱敏请参考配置Spark动态脱敏。
Mask Conditions
在“Select Group”、“Select User”列选择已创建好的需要授予权限的用户组或用户,单击“Add Conditions”,添加策略适用的IP地址范围,然后再单击“Add Permissions”,勾选“select”权限。
单击“Select Masking Option”,选择数据脱敏时的处理策略:
- Redact:用x屏蔽所有字母字符,用0屏蔽所有数字字符。
- Partial mask: show last 4:只显示最后的4个字符,其他用x代替,不支持中文字符脱敏。
- Partial mask: show first 4:只显示开始的4个字符,其他用x代替,不支持中文字符脱敏。
- Hash:对数据进行Hash处理。
- Nullify:用NULL值替换原值。
- Unmasked(retain original value):不脱敏,显示原数据。
- Date: show only year:日期格式数据只显示年份信息。
- Custom:可使用任何有效Hive UDF(返回与被屏蔽的列中的数据类型相同的数据类型)来自定义策略。
如需添加多列的脱敏策略,可单击
按钮添加。Deny Conditions
策略拒绝条件,配置本策略内拒绝的权限及例外,配置方法与“Allow Conditions”类似。
- 单击“Add”,在策略列表可查看策略的基本信息。
配置Spark行级别数据过滤
Ranger支持用户对Spark数据表执行select操作时进行行级别的数据过滤。
- 修改服务端和客户端“spark.ranger.plugin.rowfilter.enable”参数值为“true”。
- 服务端:登录FusionInsight Manage页面,选择“集群 > 服务 > Spark/Spark2x > 配置 > 全部配置”,搜索并修改所有的“spark.ranger.plugin.rowfilter.enable”参数值为“true”,保存配置并重启服务。
- 客户端:登录Spark客户端节点,进入目录“{客户端安装目录}/Spark/spark/conf/spark-defaults.conf”,修改“spark.ranger.plugin.rowfilter.enable”参数值为“true”。
- 登录Ranger WebUI界面,在首页单击“HADOOP SQL”区域的组件插件名称如“Hive”。
- 在“Row Level Filter”页签单击“Add New Policy”,添加行数据过滤策略。
- 根据业务需求配置相关参数。
表4 Spark行数据过滤参数 参数名称
描述
Policy Name
策略名称,可自定义,不能与本服务内其他策略名称重复。
Policy Conditions
IP过滤策略,可自定义,配置当前策略适用的主机节点,可填写一个或多个IP或IP段,并且IP填写支持“*”通配符,例如:192.168.1.10,192.168.1.20或者192.168.1.*。
Policy Label
为当前策略指定一个标签,您可以根据这些标签搜索报告和筛选策略。
Hive Database
配置当前策略适用的Spark中的数据库名称,仅支持设置一个数据库名,并且不支持“*”通配符。
Hive Table
配置当前策略适用的Spark中的表名称,仅支持设置一个表名,并且不支持“*”通配符。
Description
策略描述信息。
Audit Logging
该策略命中时是否生成审计日志。
- Yes:当用户触发该策略的权限校验时,无论校验结果是允许(Allow)还是拒绝(Deny),会生成一条审计日志。
- No:当用户触发该策略的权限校验时,不会生成任何审计日志。
Row Filter Conditions
在“Select Role”、“Select Group”、“Select User”列选择已创建好的需要授予权限的对象,单击“Add Conditions”,添加策略适用的IP地址范围,然后再单击“Add Permissions”,勾选“select”权限。
单击“Row Level Filter”,填写数据过滤规则。
例如过滤表A中“name”列“zhangsan”行的数据,过滤规则为:name <> 'zhangsan',更多信息可参考Ranger官方文档。
如需添加更多规则,可单击
按钮添加。 - 单击“Add”,在策略列表可查看策略的基本信息。
- 用户通过Spark客户端对配置了数据脱敏策略的表执行select操作,系统将对数据进行处理后进行展示。
相关文档
- 配置Ranger策略时,不同条件的优先级可参考Ranger权限策略条件判断优先级。
- 如需查看Ranger中的相关权限设置对象信息,例如用户、用户组、Role,可参考查看Ranger用户权限同步信息。
- MRS集群中新用户可在Manager中进行创建,可参考创建MRS集群用户。