Ranger简介中介绍了E-MapReduce中创建启动Ranger服务的集群,以及一些准备工作,从EMR-3.25.0版本开始,支持Presto集成Ranger。本文介绍Presto集成Ranger的一些步骤流程。

前提条件

创建的集群已包含或者添加Ranger和Presto服务。

Presto集成Ranger

  1. Ranger启用Presto。
    1. 登录阿里云E-MapReduce控制台
    2. 在顶部菜单栏处,根据实际情况选择地域(Region)和资源组
    3. 单击上方的集群管理页签。
    4. 集群管理页面,单击相应集群所在行的详情
    5. 在左侧导航栏单击集群服务 > RANGER
    6. 单击右侧的操作下拉菜单,选择启用Presto
    7. 执行集群操作对话框设置相关参数,然后单击确定
      单击右上角查看操作历史查看任务进度,等待任务完成。
  2. Ranger UI添加Presto service。
    1. 进入Ranger UI页面,详情请参见Ranger简介
    2. 在Ranger的UI页面添加Presto Service。
      presto
    3. 配置相关参数。
      Presto
      参数 说明
      Service Name 固定填写emr-presto
      Username 固定填写hadoop
      Password 不需要填写。
      jdbc.driverClassName 固定填写io.prestosql.jdbc.PrestoDriver
      jdbc.url 固定填写jdbc:presto://emr-header-1:9090
      Add New Configurations
      • Name:固定值policy.download.auth.users
      • Value:固定值hadoop
    4. 单击Add
  3. 重启Presto Master。
    1. 左侧导航栏单击集群服务 > Presto
    2. 单击右上角操作下拉菜单,选择重启PrestoMaster
    3. 执行集群操作对话框设置相关参数,然后单击确定
      单击右上角查看操作历史查看任务进度,等待任务完成。

权限配置示例

上面一节中已经将Ranger集成到Presto,可以进行相关的权限设置。

Ranger Presto权限控制与Ranger Hive、Ranger Hbase等权限控制不同,Ranger Presto采用的是权限分层次控制的策略,需要特别注意权限配置的方法。
注意
  • 控制到什么层次的权限,就配置到什么层次的权限,若配置的权限与所属的层次不相符,则该权限配置将不起作用。
  • Presto在对某个用户进行权限检查时,都会进行两次权限检查,首先检查某个用户是否有访问Catalog的权限,再去检查本次访问所涉及到的权限。
示例一:给用户liu授予访问hive表testdb.test的a列的Select权限。
  1. 单击配置好的emr-prestoshili1
  2. 单击右上角的Add New Policy
  3. 添加Policy对Catalog的访问权限进行控制。

    首先需要添加Policy对Catalog的访问权限进行控制(此例中Catalog=hive),该权限为Catalog层次,因此只需要配置到Catalog层次即可。

    edit_presto

    liu用户配置权限能够访问Catalog=hive之后,接下来添加Policy,配置liu对表testdb.test的a列的Select权限。由于表的Select权限属于column层次,因此我们需要配置权限到column层次,填写完Catalog之后,需要单击添加层级Policy,依次添加schema、table、column层次的内容。

    配置Column_liu
    参数 说明
    Policy Name Policy的名称,可自定义。例如:catalog_hive。
    Presto Catalog Catalog的名称,可自定义。例如:hive。
    schema 添加schema的名称,例如testdb,星号(*)表示所有schema。
    table 添加table的名称,例如test,星号(*)表示所有table。
    column 添加column的名称,例如a,星号(*)表示所有column。
    Select User 选择用户,例如liu。
    Permissions 选择授予的权限,例如Select。
  4. 单击Add

    添加一个Policy后,就实现了对liu用户的授权,然后liu用户就可以对testdb.test表的a列进行访问了。

示例二:给用户chen添加创建hive表testdb.test的Create权限。

首先需要给用户chen添加Catalog的访问权限(此例中Catalog=hive),分为以下两种情况:
  • 若已经添加过,则直接对该Policy进行编辑,在Select User中增加用户chen。
  • 若还未对Catalog=hive添加过访问权限,则按照示例一中的方法进行添加,并给用户chen添加Create权限。
add_condition

由于表的Create权限属于table层次,因此我们需要配置权限到table层次,填写完Catalog之后,需要单击添加层级Policy按钮,添加schema、table层次的内容。

add_table

Ranger Presto与Ranger Hive共享权限配置

上文介绍了Presto集成Ranger的方法以及Ranger Presto权限配置的方法,我们可以独立使用Ranger Presto对Presto的权限进行控制。但是在一些场景下,Presto和Hive中配置的权限是一致的,如果Presto中也配置相同的权限会非常麻烦。EMR的Ranger提供了可以让Ranger Presto和Ranger Hive共享权限的方案,只需要在Ranger的Hive service中配置相关权限,Ranger Presto可以直接使用该权限配置进行用户的权限检查。

配置前请注意以下事项:
  • 已正确配置了Ranger Hive,详情请参见Hive配置
  • 使用Ranger Presto与Ranger Hive共享权限也需要在Ranger UI中添加Ranger Presto service。
  • 与Ranger Presto一样,若需使用show schemasshow tables等命令,也需要在Ranger Hive service中配置用户对database=information_schema,table=*,column=*的Select权限。

使用及配置方法如下:

  1. 登录集群header-1节点,修改配置文件/etc/ecm/presto-conf/ranger-presto-security.xml,将ranger.plugin.hive.authorization.enable修改为true
  2. 在左侧导航栏中,单击集群服务 > Presto
  3. 单击右上角的操作 > 重启 PrestoMaster
    PrestoMaster重启完毕之后,Ranger Presto便能够使用Ranger Hive service中设置的权限。