Apache Ranger提供集中式的权限管理框架,支持对Hadoop生态中的多个组件进行细粒度的权限控制。本文介绍如何集成Ranger以及如何配置OSS-HDFS服务的访问权限。

前提条件

  • 已创建EMR-5.6.0及以上版本的集群。

    创建集群过程中,选择Ranger服务、并选中Kerberos集群模式。关于创建集群的具体步骤,请参见创建集群

    EMR
  • 已开通并授权访问OSS-HDFS服务。具体步骤,请参见开通并授权访问OSS-HDFS服务

集成Ranger

  1. 进入集群详情页面。
    1. 登录阿里云E-MapReduce控制台
    2. 在顶部菜单栏处,根据实际情况选择地域和资源组
    3. 单击上方的集群管理页签。
    4. 集群管理页面,单击相应集群所在行的详情
  2. 启用OSS。
    1. 在左侧导航栏中,选择集群服务 > RANGER
    2. 在RANGER服务页面,选择操作 > 启用OSS
    3. 执行集群操作对话框中,填写执行原因,单击确定
    4. 确认对话框,单击确定
  3. 部署客户端配置。
    1. 在左侧导航栏中,选择集群服务 > HDFS
    2. 在HDFS服务页面,单击配置,然后单击右上角的部署客户端配置
    3. 执行集群操作中,输入执行原因,单击确定
    4. 确认对话框中,单击确定
      您可以单击上方的查看操作历史,查看执行状态和进度。
  4. 重启Jindofsx Namespace Service。
    1. JindoData服务页面的右上角,选择操作 > 重启Jindofsx Namespace Service
    2. 执行集群操作对话框中,输入执行原因,单击确定
    3. 在弹出的确认对话框中,单击确定
  5. 重启HiveServer2。
    1. 在左侧导航栏中,选择集群服务 > Hive
    2. 在Hive服务页面的右上角,选择操作 > 重启HiveServer2
    3. 执行集群操作对话框中,输入执行原因,单击确定
    4. 在弹出的确认对话框中,单击确定
  6. 创建用户Principal。
    1. 通过SSH方式连接集群的emr-header-1节点,详情请参见登录集群
    2. 执行如下命令,进入Kerberos的admin工具。
      sudo sh /usr/lib/has-current/bin/admin-local.sh /etc/ecm/has-conf -k /etc/ecm/has-conf/admin.keytab
    3. 执行如下命令,创建用户名为test的Principal。
      本示例密码设置为123456。
      sudo addprinc -pw 123456 test
      说明 需要记录用户名和密码,在创建TGT时会用到。如果您不想记录用户名和密码,则可以执行下一步,将Principal的用户名和密码导入到keytab文件中。
    4. 可选:执行如下命令,生成keytab文件。
      sudo ktadd -k /root/test.keytab test

      执行quit命令,可以退出Kerberos的admin工具。

  7. 创建TGT。
    创建TGT的机器,可以是任意一台需要运行Hive Client的机器。
    1. 创建test用户。
      sudo useradd test
    2. 执行以下命令,切换为test用户。
      sudo su test
    3. 生成TGT。
      • 方式一:使用用户名和密码方式,创建TGT。
        1. 执行kinit命令并回车。
          sudo kinit
          Password for test@EMR.23****.COM:
        2. 输入test用户的密码123456。
      • 方式二:使用keytab文件,创建TGT。
        步骤6中的test.keytab文件,已经保存在emr-header-1机器的/root/目录下,需要先使用cp /root/test.keytab /home/test/命令拷贝到当前机器的/home/test/目录下,再执行以下命令创建TGT。
        sudo kinit -kt /home/test/test.keytab test
    4. 查看TGT。
      使用klist命令,返回如下信息。
      Ticket cache: FILE:/tmp/krb5cc_1012
      Default principal: test@EMR.23****.COM
      
      Valid starting       Expires              Service principal
      07/24/2021 13:20:44  07/25/2021 13:20:44  krbtgt/EMR.23****.COM@EMR.23****.COM
              renew until 07/25/2021 13:20:44

配置OSS-HDFS访问权限

配置test用户拥有访问oss://examplebucket/dir/目录的访问权限。

  1. 进入Ranger UI页面,详情请参见概述
  2. 在Ranger UI页面,单击已有的emr-oss
    emr-oss
  3. 配置dir/目录的Execute权限。
    1. 单击右上角的Add New Policy
    2. Edit Policy页面,配置下表参数。
      参数描述
      Policy Name策略名称,可以自定义。
      Path填写为examplebucket/dir
      Select User指定添加此策略的用户。

      本示例设置为test用户。

      Permissions选择授予的权限。

      本示例设置访问权限为Execute。

    3. 单击Add
  4. 访问OSS-HDFS。
    1. 通过SSH方式连接集群的emr-header-1节点,详情请参见登录集群
    2. 执行以下命令,切换为本文示例创建的test用户。
      sudo su test
    3. 执行以下命令,访问OSS-HDFS服务。
      sudo hadoop fs -ls oss://examplebucket/dir/
      当您访问Ranger没有授权的路径时,提示以下错误信息。
      org.apache.hadoop.security.AccessControlException: Permission denied: user=test, access=READ_EXECUTE, resourcePath="examplebucket/dir/"