Security Zone功能

更新时间:
复制 MD 格式

Ranger 2.1.0版本开始支持配置Security Zone功能,可以将资源划分到不同的Security Zone中,给每个Security Zone分配不同的管理员进行权限管理,即可以将资源分类交由不同的管理员管理。本文介绍如何配置Security Zone。

背景信息

例如,某公司有部门A和部门B两个部门,部门A主要使用Hive database a,以及HDFS路径/a,部门B主要使用Hive database b,以及HDFS路径/b。如果要使用Security Zone功能,可以将Hive database aHDFS路径/a划分到Zone a当中,将Hive database bHDFS路径/b划分到Zone b当中,并分别设置管理员,统一配置Zone中资源的权限。

Zone a和Zone b配置如下。
Zone: a
  service: emr-hive; path=/a/*,
  service: emr-hdfs; database=a
  
Zone: b
  service: emr-hive; path=/b/*,
  service: emr-hdfs; database=b

Security Zone的管理员有权限配置Zone中资源的权限,如果配置属于其他Zone的资源的权限,则将不会生效。当Ranger Plugin鉴权时,首先会判断资源属于哪个Security Zone,然后只会使用该Security Zone中配置的权限进行鉴权。如果没有找到资源所属的Security Zone,则会使用未划分Security Zone的权限进行鉴权。

前提条件

使用限制

EMR-5.x系列版本,支持配置Security Zone功能。

创建Security Zone管理员用户

本文示例需要新建admin_aadmin_b用户。

  1. 访问Ranger WebUI,详情请参见访问Ranger UI
  2. Ranger WebUI页面上方,选择Settings > Users/Groups/Roles
  3. Users页签,单击Add New User
  4. User Detail页面,填写用户信息,设置Select RoleUser,单击Save
    重要 Select Role必须设置为User,设置为Admin将会使得该用户成为超级管理员。超级管理员能够配置任何Security Zone的权限,就无法实现Security Zone管理员仅配置属于Zone的资源权限的功能。

配置Security Zone

您可以按照以下步骤配置Zone aZone b。

  1. 访问Ranger WebUI,详情请参见访问Ranger UI
  2. Ranger WebUI页面,单击上方的Security Zone
  3. Security Zone页面,单击Security Zones区域的add图标。
    该图标为 +(添加)按钮,位于 Security Zones 标题右侧。
  4. Create Zone页面,配置相关参数。
    参数 描述 示例
    Zone Name Security Zone的名称。 a
    Admin Users Security Zone的管理员用户。该用户需要在Settings中进行创建,用户角色需要为User,详情请参见创建Security Zone管理员用户 admin、admin_a
    Auditor Users 允许查看Security Zone审计日志的用户。 admin、admin_a
    Select Resource Services 选择Security Zone中的Service。 emr-hive、emr-hdfs
    Resource 填写属于该Security Zone的资源。 database=a、path=/a/*
  5. 单击Save,完成Zone a的配置。
  6. 重复步骤3~步骤5,完成Zone b的配置。

测试

  1. 使用admin_a用户登录Ranger WebUI,详情请参见访问Ranger UI
  2. Ranger WebUI页面,在右上角的Security Zone区域,选择a
  3. 单击emr-hive,查看emr-hive Service中的权限。
    只能查看和修改Zone a中配置的权限,无法查看和修改Zone b中配置的权限。您可以配置一个属于Zone b的资源的权限,例如给test用户配置b.test表的select权限。使用Beeline进行测试,该权限配置是不会生效的,因为database=b属于Zone b,在鉴权时只会检验Zone b中配置的权限。在Zone a中配置database=b资源的权限是不会起作用的。
    0: jdbc:hive2://xxx:10000> select * from b.test;
    Error: Error while compiling statement: FAILED: HiveAccessControlException Permission denied: user [test] does not
    have [SELECT] privilege on [b/test/*] (state=42000,code=40000)
  4. 使用admin_b用户登录Ranger WebUI,详情请参见访问Ranger UI
  5. Ranger WebUI页面,在右上角的Security Zone区域,选择b
  6. 单击emr-hive,查看emr-hive Service中的权限。
    只能查看和修改Zone b中配置的权限,无法查看和修改Zone a中配置的权限。您可以配置一个属于Zone b的资源的权限,例如给test用户配置b.test表的select权限。使用Beeline进行测试,该权限配置可以生效。
    0: jdbc:hive2://xxx xxx 10000> select * from b.test;
    INFO  : Compiling command(queryId=hadoop_20210706155423_3e80fd70-9e5c-438b-9...)
    INFO  : Concurrency mode is disabled, not creating a lock manager
    INFO  : Semantic Analysis Completed (retrial = false)
    INFO  : Returning Hive schema: Schema(fieldSchemas:[FieldSchema(name:test.id
    name:test.name, type:string, comment:null)], properties:null)
    INFO  : Completed compiling command(queryId=hadoop_20210706155423_3e80fd70-9...)
    : 0.122 seconds
    INFO  : Concurrency mode is disabled, not creating a lock manager
    INFO  : Executing command(queryId=hadoop_20210706155423_3e80fd70-9e5c-438b-9...)
    INFO  : Completed executing command(queryId=hadoop_20210706155423_3e80fd70-9...)
    : 0.001 seconds
    INFO  : OK
    INFO  : Concurrency mode is disabled, not creating a lock manager
    +----------+------------+
    | test.id  | test.name  |
    +----------+------------+
    | 1        | a          |
    | 2        | b          |
    | 3        | c          |
    +----------+------------+