Ranger

Ranger简介

Apache Ranger 提供集中式的权限管理框架,可以对Hadoop生态中的HDFS/Hive/YARN 等组件提供细粒度的权限访问控制,并且提供了Web UI页面方便管理员进行操作。

创建集群

BMR1.2.0及以上版本已支持 Ranger 组件集成,购置集群时勾选 Ranger 组件即可, 如下图所示:

访问集群的Ranger Web页面

通过SSH Tunnel访问Ranger Web页面

  1. 在创建集群中设置软件配置时,添加Ranger应用。
  2. 建立SSH Tunnel并配置浏览器,具体操作请参考准备中的所有步骤。
  3. 代理设置完后,在Master结点上执行 hostname 命令获取主机名。
  4. 通过访问链接http://hostname:6080 可登录 Ranger UI登录界面,默认的用户名/密码是admin/admin,如下图:

修改密码

初次登录后台后,管理员需要修改admin账户的密码,如下图所示:

权限配置

BMR Ranger 组件默认已启动了 hdfs/yarn/hive 插件,登录Ranger 管理后台可以看到默认已创建的 HDFS service/YARN service以及 HIVE service。

进入Access Manger页面,即可为HDFS、YARN、HIVE 等组件 service 配置相关的权限。

HDFS 配置

如下图所示,点击默认创建的 HDFS service,进入 policy 配置管理页,即可配置相关策略。

例如,给bls用户授予/user/foo;/user/log 路径的读/执行权限:

按照上述步骤设置添加一个Policy后,就实现了对bls的授权,如上图设置,bls用户对/user/foo的HDFS路径只有读和执行的权限。如果该用户上传文件则会报权限不足的错误。效果如截图所示:

当对 bls 用户授予 write 权限后, bls 用户才可以向该路径 put 文件。例如:

效果如截图所示:

HIVE 配置

用户可以通过三种方式访问Hive数据,包括HiveServer2、Hive Client和HDFS,所以我们需要对三种方式做访问权限控制。

  1. HiveServer2 方式:Ranger Hive 插件支持对 Hive 表/列级别的权限控制仅限于对 HiveServer2的使用场景(比如通过 beeline、jdbc 方式)
  2. Hive Client 方式:Hive 官方自带的 (Storage Based Authorization)就是针对 Hive Client使用场景进行的权限控制。本质上会根据SQL中表的HDFS路径的读写权限来决定该用户是否可以进行相关的DDL/DML操作。
  3. HDFS 方式:可以通过Ranger对Hive表底层的HDFS路径增加对HDFS文件的权限控制。

针对 HiveServer2 使用场景,ranger 可以实现对Hive表/列的权限设置,如下图所示,点击默认创建好的 Hive Service,进入 policy 配置管理页,即可配置相关策略。

例如:给用户 bls 授予表 bmr.user_info 的 name 字段的 select 权限。

由于ranger只对 hiveServer2 权限控制生效,下面将通过 beeline 工具访问 hiveServer2为例进行说明,首先以如下方式连接 hiveServer(如果开启安全模式,还要配置相应的 principal)

/opt/bmr/hive/bin/beeline -u "jdbc:hive2://localhost:10000/default;principal=yarn/ng6c79765-master-instance-fh2qdy0g.novalocal@BAIDU.COM"

当一个没有授予Hive 操作权限的 bls 用户创建数据库时会报如下异常信息:

当对 bls 用户授予 bmr.user_info 的 name 字段的 select 权限时,查询如下:

如果执行 select * 时则会报如下异常信息:

YARN 配置

登录 Ranger 管理界面,如下图所示,点击默认创建好的 yarn service,进入 policy 配置管理页,即可配置相关策略。

默认只有 yarn 服务账户可以提交作业到队列中,其他用户则无权限。例如 hdfs 提交作业时会出现以下异常:

下图演示了如何给 hdfs、bls 等账户授予 yarn 的 root.default 队列资源提交作业的权限。

当 hdfs 账户被授予权限后,等待片刻,就可以成功提交作业了,如下图所示: