本文介绍如何将Presto集成到Ranger,以及如何配置权限。

前提条件

已创建E-MapReduce的集群,并且选择了Ranger和Presto服务。详情请参见创建集群

Presto集成Ranger

  1. Ranger启用Presto。
    1. 登录阿里云E-MapReduce控制台
    2. 在顶部菜单栏处,根据实际情况选择地域和资源组
    3. 单击上方的集群管理页签。
    4. 集群管理页面,单击相应集群所在行的详情
    5. 在左侧导航栏单击集群服务 > RANGER
    6. 单击右侧的操作下拉菜单,选择启用Presto
    7. 执行集群操作。
      1. 执行集群操作对话框中,输入执行原因,单击确定
      2. 确认对话框,单击确定
      3. 单击右上角查看操作历史查看任务进度,等待任务完成。
  2. Ranger UI添加Presto Service。
    1. 进入Ranger UI页面,详情请参见概述
    2. 在Ranger UI页面,单击Presto所在行的Add图标,添加Presto Service。
      presto
    3. 配置参数。
      Presto
      参数 说明
      Service Name 固定值为emr-presto
      Username 固定值为presto
      Password 不填写。
      jdbc.driverClassName 固定值为io.prestosql.jdbc.PrestoDriver
      jdbc.url 需要根据您的集群情况配置如下信息:
      • 普通集群:固定值为jdbc:presto://emr-header-1:9090
      • 高安全集群:填写格式为jdbc:presto://<your_hostname>:7778?SSL=true&SSLKeyStorePath=/etc/ecm/presto-conf/keystore&SSLKeyStorePassword=<your_keystore_password>&KerberosRemoteServiceName=presto&KerberosPrincipal=presto@EMR.<your_id>.COM&KerberosKeytabPath=/etc/ecm/presto-conf/jdbc.keytab
        其中涉及参数如下所示:
        • <your_hostname>:您可以在集群的emr-header-1节点上执行hostname获取。
        • <your_keystore_password>:您可以在集群的emr-header-1节点上执行 sed -n 's/http-server.https.keystore.key=\([^;]*\)/\1/p' /etc/ecm/presto-conf/config.properties获取。
        • <your_id>:您可以在集群的emr-header-1节点上执行 hostname | grep -Eo '[0-9]+$'获取。
        • jdbc.keytab文件创建步骤如下:
          1. 在集群的emr-header-1节点上执行命令sh /usr/lib/has-current/bin/admin-local.sh /etc/ecm/has-conf -k /etc/ecm/has-conf/admin.keytab
          2. 执行命令addprinc -randkey presto以生成Principal。
          3. 执行命令xst -k /etc/ecm/presto-conf/jdbc.keytab presto以导出keytab文件。
      Add New Configurations
      • Name:固定值为policy.download.auth.users
      • Value:固定值为presto
    4. 单击Add
  3. 重启Presto Master。
    1. 在左侧导航栏,选择集群服务 > Presto
    2. 单击右上角操作下拉菜单,选择重启PrestoMaster
    3. 执行集群操作。
      1. 执行集群操作对话框中,输入执行原因,单击确定
      2. 确认对话框,单击确定
      3. 单击右上角查看操作历史查看任务进度,等待任务完成。

权限配置示例

Ranger Presto权限控制与Ranger Hive和Ranger Hbase等权限控制不同,Ranger Presto采用的是权限分层次控制的策略。
注意
  • 配置的权限应该与所属的层次保持一致。如果配置的权限与所属的层次不相符,则该权限配置将不起作用。
  • Presto会对用户进行两次权限检查,首先检查该用户是否有访问Catalog的权限,其次检查本次访问所涉及到的权限。
示例一:给用户liu授予访问hive表testdb.test的a列的Select权限。
  1. 进入Ranger UI页面,详情请参见概述
  2. 在Ranger UI页面,单击配置好的emr-prestoshili1
  3. 单击右上角的Add New Policy
    添加Policy对catalog的访问权限进行控制。因为该权限为catalog层次,所以只需要配置到catalog层次即可。授权用户liu访问catalog的Use权限。
    注意 EMR-3.28.1之前版本需要设置Select权限。
    catelog
  4. 单击Add
  5. 单击右上角的Add New Policy
    配置liu用户对表testdb.test的a列的Select权限。由于表的Select权限属于column层次,因此需要单击添加层级Policy图标,依次添加schematablecolumn层次的内容。配置Column_liu
    参数 说明
    Policy Name 策略名称,可自定义。例如testdb。
    catalog 添加catalog的名称,可自定义。例如hive。
    schema 添加schema的名称,例如testdb。星号(*)表示所有schema。
    table 添加table的名称,例如test。星号(*)表示所有table。
    column 添加column的名称,例如a。星号(*)表示所有column。
    Select User 指定添加此策略的用户,例如liu。
    Permissions 选择授予的权限,例如Select。
  6. 单击Add
    添加Policy后,实现对liu用户的授权。liu用户即可以对testdb.test表的a列进行访问。
    说明 添加、删除或修改Policy后,需要等待约一分钟至授权生效。
示例二:给用户chen添加创建hive表testdb.test的Create权限。
  1. 进入Ranger UI页面,详情请参见概述
  2. 给用户chen添加Catalog访问权限(此例中Catalog=hive)。
    • 如果已经添加了Catalog层次的Policy,则直接编辑该Policy,在Select User中增加用户chen。
      1. 单击配置好的emr-presto
      2. 单击catalog_hive所在行的edit图标。chen
      3. 授权用户chen访问catalog的Use权限。add_condition
      4. 单击Add
    • 如果还未添加Catalog层次的Policy,则按照示例一中的方法,授权用户chen访问catalog的Use权限。
      注意 EMR-3.28.1之前版本需要设置Select权限。
  3. 单击右上角的Add New Policy
    由于表的Create权限属于schema层次,因此您需要配置权限到schema层次。单击添加层级Policy按钮,添加schema层次的内容。add_table
示例三:在Ranger UI页面,配置show schemasshow tables权限。
  • EMR-3.28.1之前版本
    您需要配置schema=information_schema,table=schemate,column=*的Select来获取show schemas执行的结果,配置schema=information_schema,table=tables,column=*的Select来获取show tables执行的结果,两者可以配置在一个Policy当中,示例如下。eg3
  • EMR-3.28.1及后续版本和EMR-4.4.1版本
    • 如果您需要执行show schemas命令,则需要配置对Catalog的Show权限。同理,如果您需要执行show tables命令,则需要配置对Schema的Show权限。
    • 因为Presto在鉴权完成后,还会对获取到的Schema和Table的列表进行一次筛选,只显示具有Select权限的Schema和Table,所以您还需要配置Schema和Table的Select权限。当您在执行Show命令时,只会显示出具有Select权限的Schema和Table。
    • 只有拥有Catalog的Select权限时,才能显示出该Catalog下您具有权限的Schema和Table。eg3-2

Ranger Presto与Ranger Hive共享权限配置

在部分场景下,Presto和Hive中配置的权限是一致的。由于EMR的Ranger提供了可以让Ranger Presto和Ranger Hive共享权限的方案,因此只需要在Ranger的Hive service中配置相关权限,Ranger Presto即可直接使用该权限配置用于检查用户权限。
说明 Ranger Presto与Ranger Hive共享权限配置,仅适用于Catalog为hive时的场景。
配置前需要关注以下事项:
  • 已正确配置Ranger Hive,详情请参见Hive配置
  • 已在Ranger UI中添加Ranger Presto service。
  • 与Ranger Presto一样,如果需要使用show schemasshow tables命令,则在Ranger Hive service中配置用户对database=information_schema,table=*,column=*的Select权限。

使用及配置方法如下:

  1. 登录Master节点,修改配置文件/etc/ecm/presto-conf/ranger-presto-security.xml中的ranger.plugin.hive.authorization.enable修改为true
  2. 在左侧导航栏中,选择集群服务 > Presto
  3. 单击右上角的操作 > 重启PrestoMaster
  4. 执行集群操作。
    1. 执行集群操作对话框中,输入执行原因,单击确定
    2. 确认对话框,单击确定
    3. 单击右上角查看操作历史查看任务进度,等待任务完成。