将 Ranger 与 Kerberos 搭配使用

以下示例会创建并使用启用了 Kerberos 且包含 RangerSolr 组件的 Dataproc 集群,以控制用户对 Hadoop、YARN 和 HIVE 资源的访问权限。

注意:

  • 您可以通过组件网关访问 Ranger 网页界面。

  • 在包含 Kerberos 集群的 Ranger 中,Dataproc 通过删除 Kerberos 用户的领域和实例将 Kerberos 用户映射到系统用户。例如,Kerberos 主账号 user1/cluster-m@MY.REALM 被映射到系统 user1,且系统定义了 Ranger 政策以允许或拒绝 user1 的权限。

  1. 设置 Ranger admin 密码

  2. 设置 Kerberos Root 主账号密码

  3. 创建集群。

    1. 以下 gcloud 命令可以在本地终端窗口中运行,也可以从项目的 Cloud Shell 中运行。
      gcloud dataproc clusters create cluster-name \
          --region=region \
          --optional-components=SOLR,RANGER \
          --enable-component-gateway \
          --properties="dataproc:ranger.kms.key.uri=projects/project-id/locations/global/keyRings/keyring/cryptoKeys/key,dataproc:ranger.admin.password.uri=gs://bucket/admin-password.encrypted" \
          --kerberos-root-principal-password-uri=gs://bucket/kerberos-root-principal-password.encrypted \
          --kerberos-kms-key=projects/project-id/locations/global/keyRings/keyring/cryptoKeys/key
      
  4. 运行集群后,导航到 Google Cloud 控制台上的 Dataproc 集群页面,然后选择集群名称以打开集群详细信息页面。点击网页界面标签页以显示组件网关链接列表,这些链接指向安装在集群上的默认组件和可选组件的网页界面。点击 Ranger 链接。

  5. 通过输入 admin 用户名和 Ranger 管理员密码登录 Ranger。

  6. Ranger admin 界面会在本地浏览器中打开。

YARN 访问政策

此示例创建了一个 Ranger 政策,以允许和拒绝用户访问 YARN root.default 队列

  1. 从 Ranger 管理界面中选择 yarn-dataproc

  2. yarn-dataproc 政策页面上,点击添加新政策。 在创建政策页面上,输入或选择以下字段:

    • Policy Name:“yarn-policy-1”
    • Queue:“root.default”
    • Audit Logging:“是”
    • Allow Conditions
      • Select User:“userone”
      • Permissions:“全选”(授予所有权限)
    • Deny Conditions

      • Select User:“usertwo”
      • Permissions:“全选”(拒绝所有权限)

      点击添加以保存政策。该政策列在 yarn-dataproc 政策页面上:

  3. 在主 SSH 会话窗口中以 userone 身份运行 Hadoop mapreduce 作业:

    userone@example-cluster-m:~$ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduced-examples.
    jar pi 5 10
    

    1. Ranger 界面显示允许 userone 提交作业。
  4. 从虚拟机的主 SSH 会话窗口以 usertwo 身份运行 Hadoop mapreduce 作业:

    usertwo@example-cluster-m:~$ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduced-examples.
    jar pi 5 10

    1. Ranger 界面显示拒绝 usertwo 提交作业。

HDFS 访问政策

此示例创建了一个 Ranger 政策,以允许和拒绝用户对 HDFS /tmp 目录的访问。

  1. 从 Ranger 管理界面中选择 hadoop-dataproc

  2. hadoop-dataproc 政策页面上,点击添加新政策。 在创建政策页面上,输入或选择以下字段:

    • Policy Name:“hadoop-policy-1”
    • Resource Path:“/tmp”
    • Audit Logging:“是”
    • Allow Conditions
      • Select User:“userone”
      • Permissions:“全选”(授予所有权限)
    • Deny Conditions

      • Select User:“usertwo”
      • Permissions:“全选”(拒绝所有权限)

      点击添加以保存政策。该政策列在 hadoop-dataproc 政策页面上:

  3. 以 userone 身份访问 HDFS /tmp 目录:

    userone@example-cluster-m:~$ hadoop fs -ls /tmp
    

    1. Ranger 界面显示允许 userone 访问 HDFS /tmp 目录。
  4. usertwo 身份访问 HDFS /tmp 目录:

    usertwo@example-cluster-m:~$ hadoop fs -ls /tmp
    

    1. Ranger 界面显示拒绝 usertwo 访问 HDFS /tmp 目录。

Hive 访问政策

此示例创建了一个 Ranger 政策,以允许和拒绝用户访问 Hive 表。

  1. 在主实例上使用 Hive CLI 创建一个小型的 employee 表。

    hive> CREATE TABLE IF NOT EXISTS employee (eid int, name String); INSERT INTO employee VALUES (1 , 'bob') , (2 , 'alice'), (3 , 'john');
    

  2. 从 Ranger 管理界面中选择 hive-dataproc

  3. hive-dataproc 政策页面上,点击添加新政策。 在创建政策页面上,输入或选择以下字段:

    • Policy Name:“hive-policy-1”
    • database:“默认”
    • table:“员工”
    • Hive Column:“*”
    • Audit Logging:“是”
    • Allow Conditions
      • Select User:“userone”
      • Permissions:“全选”(授予所有权限)
    • Deny Conditions

      • Select User:“usertwo”
      • Permissions:“全选”(拒绝所有权限)

      点击添加以保存政策。该政策列在 hive-dataproc 政策页面上:

  4. 在虚拟机的主 SSH 会话中以 userone 身份针对 Hive 员工表运行查询:

    userone@example-cluster-m:~$ beeline -u "jdbc:hive2://$(hostname -f):10000/default;principal=hive/$(hostname -f)@REALM" -e "select * from employee;"
    

    1. userone 查询成功:
      Connected to: Apache Hive (version 2.3.6)
      Driver: Hive JDBC (version 2.3.6)
      Transaction isolation: TRANSACTION_REPEATABLE_READ
      +---------------+----------------+
      | employee.eid  | employee.name  |
      +---------------+----------------+
      | 1             | bob            |
      | 2             | alice          |
      | 3             | john           |
      +---------------+----------------+
      3 rows selected (2.033 seconds)
      
  5. 在虚拟机的主 SSH 会话中以 usertwo 身份针对 Hive 员工表运行查询:

    usertwo@example-cluster-m:~$ beeline -u "jdbc:hive2://$(hostname -f):10000/default;principal=hive/$(hostname -f)@REALM" -e "select * from employee;"
    

    1. 拒绝 usertwo 访问该表:
      Error: Could not open client transport with JDBC Uri:
      ...
      Permission denied: user=usertwo, access=EXECUTE, inode="/tmp/hive"
      

精细 Hive 访问

Ranger 支持在 Hive 上使用遮罩和行级过滤条件。此示例是通过添加遮罩和过滤条件政策基于上一个 hive-policy-1 构建的。

  1. 从 Ranger 管理界面中选择 hive-dataproc,然后选择遮罩标签,点击添加新政策

    1. 创建政策页面中,输入或选择以下字段来创建一个政策用来掩盖(取消)员工姓名列:

      • Policy Name:“hive-masking 政策”
      • database:“默认”
      • table:“员工”
      • Hive Column:“姓名”
      • Audit Logging:“是”
      • Mask Conditions
        • Select User:“userone”
        • Access Types:“选择”(添加/修改权限)
        • Select Masking Option:“取消”

          点击添加以保存政策。

  2. 从 Ranger 管理界面中选择 hive-dataproc,然后选择行级过滤条件标签,点击添加新政策

    1. 创建政策页面中,输入或选择以下字段来创建一个政策用来过滤(返回)eid 不等于 1 的行:

      • Policy Name:“hive-filter 政策”
      • Hive Database:“默认”
      • Hive Table:“员工”
      • Audit Logging:“是”
      • Mask Conditions
        • Select User:“userone”
        • Access Types:“选择”(添加/修改权限)
        • Row Level Filter:“eid != 1”过滤条件表达式

          点击添加以保存政策。

    2. 在虚拟机的主 SSH 会话中以 userone 身份针对 Hive 员工表运行上一查询:

      userone@example-cluster-m:~$ beeline -u "jdbc:hive2://$(hostname -f):10000/default;principal=hive/$(hostname -f)@REALM" -e "select * from employee;"
      

      1. 查询将返回遮盖了的名称列以及从结果中滤除的 bob (eid=1):
        Transaction isolation: TRANSACTION_REPEATABLE_READ
        +---------------+----------------+
        | employee.eid  | employee.name  |
        +---------------+----------------+
        | 2             | NULL           |
        | 3             | NULL           |
        +---------------+----------------+
        2 rows selected (0.47 seconds)