Ranger简介中介绍了 E-MapReduce 中创建和启动 Ranger 服务的集群,以及一些准备工作,本节介绍 Hive 集成 Ranger 的步骤流程。

Hive 集成 Ranger

  • Hive 访问模型

    用户可以通过三种方式访问 Hive 数据,包括 HiveServer 2、Hive Client 和 HDFS。

    • HiveServer 2 方式
      • 场景: 用户只能通过 HiveServer2 访问 Hive 数据,不能通过 Hive Client 和 HDFS 访问。
      • 方式:使用 beeline 客户端或者 JDBC 代码通过 HiveServer 2 去执行相关的 Hive 脚本。
      • 权限设置:

        Hive 官方自带的 Hive 授权 就是针对 HiveServer2 使用场景进行权限控制的。

        Ranger 中对 Hive 的表/列级别的权限控制也是针对 HiveServer2 的使用场景,如果用户还可以通过 Hive Client 或者 HDFS 访问 Hive 数据,仅仅对表/列层面做权限控制还不够,还需要下面两种方式的一些设置进一步控制权限。

    • Hive Client 方式
      • 场景: 用户可以通过 Hive Client 访问 Hive 数据。
      • 方式: 使用 Hive Client 访问。
      • 权限设置:

        Hive Client 会请求 HiveMetaStore 进行一些 DDL 操作(如 Alter Table Add Columns等),也会通过提交 MapReduce 作业读取 HDFS 中的数据进行处理。

        Hive 官方自带的 Hive 授权 就是针对 Hive Client 使用场景进行的权限控制,它会根据 SQL 中表的 HDFS 路径的读写权限来决定该用户是否可以进行相关的 DDL/DML 操作,如ALTER TABLE test ADD COLUMNS(b STRING)

        Ranger 中可以对 Hive 表的 HDFS 路径进行权限控制,加上 HiveMetaStore 配置 Storage Based Authorization,从而可以实现对 Hive Client 访问场景的权限控制。

        说明 Hive Client 场景的 DDL 操作权限实际也是通过底层 HDFS 权限控制,所以如果用户有 HDFS 权限,则也会有对应表的 DDL 操作权限(如 Drop Table/Alter Table 等)。
    • HDFS 方式
      • 场景: 用户可以直接访问 HDFS。
      • 方式: HDFS 客户端/代码等。
      • 权限设置:

        用户可以直接访问 HDFS,则需要对 Hive 表的底层 HDFS 数据增加 HDFS 的权限控制。

        通过 Ranger 对 Hive 表底层的 HDFS 路径进行权限控制,详情请参见权限配置示例

  • Enable Hive Plugin
    1. 登录阿里云E-MapReduce 控制台
    2. 单击上方的集群管理页签。
    3. 集群管理页面,单击相应集群所在行的详情
    4. 在左侧导航栏单击集群服务 > RANGER
    5. 单击右侧的操作下拉菜单,选择 启用 Hivestart_hive
    6. 在弹出框输入备注信息,然后单击确定

      单击右上角查看操作历史查看任务进度,等待任务完成。

      查看操作历史
      说明 Enable Hive Plugin 并重启 Hive 后,则 HiveServer2 场景 /HiveClient 场景(Storage Based Authorization)的都进行了相关的配置,HDFS 的权限可参见 HDFS 配置进行开启。
  • 重启 Hive

    上述任务完成后,需要重启 Hive 才生效。

    1. 左侧导航栏单击集群服务 > Hive
    2. 单击右上角操作下拉菜单,选择 重启 All Components
    3. 在弹出框输入执行 Commit 记录,然后单击确定
    4. 单击右上角查看操作历史查看任务进度,等待重启任务完成。
  • Ranger UI添加Hive service
    1. 进入 Ranger UI 页面,详情请参见Ranger 简介
    2. 在 Ranger 的 UI 页面添加 Hive Service。Ranger UI
    3. 配置相关参数。添加Hive Service
      参数 说明
      Service Name 固定值emr-hive。
      Username 自定义。
      Password 自定义。
      jdbc.driverClassName 默认值org.apache.hive.jdbc.HiveDriver。无需修改。
      jdbc.url
      • 标准集群: jdbc:hive2://emr-header-1:10000/
      • 高安全集群:jdbc:hive2://${master1_fullhost}:10000/;principal=hive/${master1_fullhost}@EMR.$id.COM
      说明 ${master1_fullhost} 为 master 1 的长域名,可登录 master 1 执行hostname命令获取,${master1_fullhost} 中的数字即为 $id 的值。
      Add New Configurations
      • Name:固定值policy.download.auth.users
      • Value:hadoop(标准集群)、hive(高安全集群)。
      说明 测试连接失败时,可忽略。
    4. 单击Add

权限配置示例

上面一节中已经将 Ranger 集成到 Hive,现在可以进行相关的权限设置。例如给用户 foo 授予表 testdb.test 的 a 列 Select 权限。

  1. 单击配置好的 emr-hive权限配置示例
  2. 单击右上角的Add New Policy
  3. 配置相关权限。 配置相关权限
    参数 说明
    Policy Name Policy的名称。可自定义。
    database 添加Hive中的数据库,例如:testdb。
    table 添加表,例如:test。
    Hive Column 可添加列名。填写*时表示所有列。
    Select Group User/Group 会自动从集群中同步过来,大约需要一分钟,用户可以事先将它们添加到集群。
    Select User
    Permissions 选择授予的权限。
  4. 单击add。添加一个 Policy 后,就实现了对 foo 的授权,然后用户 foo 就可以对 testdb.test 的表进行访问了。
    说明 Policy 添加后需要 1 分钟左右才会生效。