Ranger 访问控制

概要

Apache Ranger 为 Hadoop 集群提供了一种全面的安全框架,以跨组件的、一致性的方式进行定义、授权、管理安全策略。Ranger 详细介绍和用户指导可以参考Apache Ranger Wiki

openlookeng-ranger-plugin 是为 openLooKeng 开发的 Ranger 插件,用于全面的数据安全监控和权限管理。

编译过程

  1. 从 Git 仓库检出 openlookeng-ranger-plugin 代码

  2. 进入代码根目录,执行 Maven 命令:

  1. mvn clean package
  1. 在上述 Maven 命令执行完成后,可以在 target 目录发现以下 TAR 文件:
  1. ranger-<ranger.version>-admin-openlookeng-<openlookeng.version>-plugin.tar.gz
  2. ranger-<ranger.version>-openlookeng-<openlookeng.version>-plugin.tar.gz

部署过程

安装 Ranger Admin 插件

1). 解压 ranger-<ranger.version>-admin-openlookeng-<openlookeng.version>-plugin.tar.gz,可以发现以下目录:

  1. openlookeng
  2. service-defs

2). Ranger 服务类型定义的注册

使用 Ranger Admin 提供的 REST API 向 Ranger 注册服务类型定义。注册后,Ranger Admin 将提供 UI 以创建服务实例(在以前的版本中称为存储库)和服务类型策略。Ranger 插件使用服务类型定义和策略来确定请求是否有访问权限以进行授权。如下示例所示,可以使用 curl 命令调用 REST API 接口注册服务:

  1. curl -u admin:password -X POST -H "Accept: application/json" -H "Content-Type: application/json" -d @service-defs/ranger-servicedef-openlookeng.json http://ranger-admin-host:port/service/plugins/definitions

Ranger的服务查询 REST API 示例:

  1. curl -u admin:password -X GET -H "Accept: application/json" -H "Content-Type: application/json" http://ranger-admin-host:port/service/plugins/definitions

Ranger的服务删除 REST API 示例:

  1. curl -u admin:password -X DELETE http://ranger-admin-host:port/service/plugins/definitions/{service id}

3). 复制 openlookeng 目录到 Ranger Admin 安装目录下的 ranger-plugins 目录 (例子:ranger-<ranger.version>-admin/ews/webapp/WEB-INF/classes/ranger-plugins/)

安装 openLooKeng 插件

1). 解压 ranger-<ranger.version>-openlookeng-<openlookeng.version>-plugin.tar.gz

2). 适当的修改 install.properties 文件。如下示例所示,修改了部分参数值:

  1. # Location of Policy Manager URL
  2. # Example: POLICY_MGR_URL=http://policymanager.xasecure.net:6080
  3. POLICY_MGR_URL=http://xxx.xxx.xxx.xxx:6080
  4. # This is the repository name created within policy manager
  5. # Example: REPOSITORY_NAME=openlookengdev
  6. REPOSITORY_NAME=openlookengdev
  7. # openLooKeng component installed directory
  8. # COMPONENT_INSTALL_DIR_NAME=../openlookeng
  9. COMPONENT_INSTALL_DIR_NAME=/home/hetu-server-1.0.1
  10. XAAUDIT.SOLR.ENABLE=false
  11. XAAUDIT.SUMMARY.ENABLE=false

3). 执行 ./enable-openlookeng-plugin.sh

重启服务

  1. 重启 Ranger Admin 服务:service ranger-admin restart
  2. 重启 openLooKeng 服务:./launcher restart

Ranger 服务管理

通过点击 Ranger Admin 服务管理界面的 OPENLOOKENG 列旁的加号来新增 openLooKeng 服务。目前服务支持的配置参数如下所示:

标签描述
Service Name服务的名称,需要在 openLooKeng 插件的 install.properties 配置文件中指定该服务名称
Display Name服务显示的名称
Description提供服务说明以供参考
Active Status可以选择此选项来启用或禁用该服务
Username指定可用于连接的用户名
Password添加上述用户名对应的密码
jdbc.driverClassName指定用于 openLooKeng 连接的驱动程序的完整类名。默认类名为:io.hetu.core.jdbc.OpenLooKengDriver
jdbc.urljdbc:lk://host:port/catalog
Add new configurations指定其他任意配置项

Ranger策略管理

可以通过 Ranger Admin 的 openLooKeng 服务策略列表界面新增策略。openLooKeng 的 Ranger 插件目前支持 systemproperty、catalog、sessionproperty、schema、table 和 column 等资源的权限管理。

权限声明

  • systemproperty
    • alter:设置系统会话属性。
  • catalog
    • use:如果 catalog 没授予 use,所有 catalog 下操作都无权限。
    • select:只有授予 select 权限,show catalogs 才能显示对应的 catalog。
    • create:新建 schema。
    • show:显示当前 catalog 或者指定 catalog 下的所有授权 schema。
  • sessionproperty
    • alter:设置 catalog 会话属性。
  • impersonateuser
    • impersonate : Kerberos或LDAP认证用户模拟openLooKeng查询用户。
  • schema
    • drop:删除已有 schema。
    • alter:修改已有 schema 的定义。
    • select:只有授予 select 权限,show schemas 才能显示对应的 schema。
    • create:使用给定列新建表;通过 select 查询语句来新建视图。
    • show:显示当前 schema 或者指定 schema 下的所有授权表。
  • table
    • drop:删除已有表、视图、列。
    • alter:修改已有表的定义;设置表声明;更新给定条件下的行数据。
    • insert:插入行数据。
    • delete:删除行数据。
    • grant:给特定授权人授予特定权限。
    • revoke:取消特定授权人的特定权限。
    • select:只有授予 select 权限,show tables 才能显示对应的表。
    • show:显示指定表下的所有授权列的类型和其他属性。
  • column
    • select:检索数据;只有授予 select 权限,show columns 才能显示对应的列。

列掩码

列掩码只适用于select操作,指定用户只能获取掩码后的数据。 openLooKeng目前支持8种掩码策略。

掩码类型描述
Redact小写字母转化为x,大写字母转化为X,数字转化为0
Partial mask: show last 4显示最后四个字符;其他转化为’X’。
Partial mask: show first 4显示前四个字符;其他转化为’X’。
Hash使用sha256得到的哈希值。
Nullify替换为NULL。
Unmasked (retain original value)不进行掩码。
Date: show only yearDate类型:只显示年份。
Custom自定义。 例子: cast(concat({col}, “test”) as {type})。

行过滤

行过滤只适用于select操作,指定用户只能获取过滤后的数据。通过将自定义过滤表达式作为SQL中的where条件实现数据过滤。

策略配置参考

  • 基本策略:必须给相应的 catalog 授权 useselect 权限。catalog 的 showcreate 权限作为可选项以确定是否启用 show catalogs 和创建 schema 的权限。
标签描述
策略名称输入策略名称。
catalog选择相应的 catalog。
none无需继续配置其他资源。
  • 如果需要获取 catalog 的元数据信息 (例如:show schemas/tables/columns),需要给相应 catalog 下的 information_schema 授予 select 权限。
标签描述
Policy Name输入策略名称。
catalog选择相应的 catalog。
schema选择 information_schema
table (表示选择所有表)
column (表示选择所有列)
  • 新增系统会话属性权限管理策略。
标签描述
Policy Name输入策略名称。
systemproperty设定相应的系统会话属性。
  • 新增 catalog 会话属性权限管理策略。
标签描述
Policy Name输入策略名称。
catalog选择相应的 catalog。
sessionproperty设定相应的 catalog 会话属性。
  • 新增含 catalog、schema、table 和 column 组合的权限管理策略。
标签描述
Policy Name输入策略名称。
catalog选择相应的 catalog。
schema对于选中的 catalog(s),选择该策略适用的 schema(s)。
table对于选中的 catalog(s) 和 schema(s),选择该策略适用的表。
column对于选中的 catalog(s)、schema(s) 和表,选择该策略适用的列。