DLF+EMR之统一权限最佳实践

本文结合具体业务场景,为您介绍如何使用DLF+EMR两个产品实现数据湖上统一权限。

背景说明

元数据管理和数据权限控制是DLF产品提供的数据湖构建所需的基础能力。通过DLF提供的统一元数据视图访问湖上数据,有效解决了数据湖中元数据一致性问题以及数据共享难题。同时各引擎也可通过集成DLF统一权限获得企业级的权限管理能力。

相关概念说明

  • EMR:阿里云 E-MapReduce产品,详见什么是E-MapReduce

  • DLF Catalog:DLF数据目录(DLF),DLF元数据体系的最上层实体,可以包括数据库,数据表等元数据信息。详见数据目录

  • DLF 数据权限:DLF所提供的数据湖的数据权限体系,支持配置数据库、数据表、数据列、函数四种维度细粒度权限控制。详见数据权限概述

业务场景说明

某公司有一个EMR集群,期望Hive、Spark、Presto、Impala引擎可以通过统一的数据权限,控制实际业务中不同用户使用数据的权限,主要分为以下几种情况:

  • 超级管理员

    • 拥有数据湖上数据的所有权限,以及分配权限给其他人员的能力。

  • 业务A数据管理员

    • 拥有业务A相关的db_a的所有数据使用和访问权限,以及分配该数据库权限给其他人员的能力。

  • 业务A数据开发人员

    • 拥有业务A相关的db_a中所有数据使用和访问权限。

  • 业务A数据分析人员

    • 拥有业务A相关的db_a中部分表的部分列的访问权限,如对table1中col1,cole2的访问权限。

操作步骤

  1. 创建EMR集群,并使用DLF作为元数据。

    1. 登录E-MapReduce控制台

    2. 创建E-MapReduce集群,输入选项如下:

      • 业务场景:选择数据湖

      • 可选服务:需要至少选中HiveDLF-Auth组件,其他组件根据业务需要选择。

      • 元数据:选择DLF 统一元数据。

      • DLF数据目录:选择默认的DLF Catalog,或者新建一个数据目录(Catalog)。此处演示使用catalog_test为例。

    3. 继续其他配置完成EMR集群创建。

      说明
      • 如果您已经有E-MapReduce集群,但未安装DLF-Auth组件,可以通过EMR集群中添加服务的方式,添加DLF-Auth组件后,再使用DLF数据权限。

      • 如果您已经有E-MapReduce集群,但Hive元数据未使用DLF,可以通过元数据迁移后再使用DLF 数据权限。可以参考EMR元数据迁移到数据湖构建(DLF)也可通过钉钉群联系我们:33719678

  2. 初始化相关数据库和数据表。

    1. 登录EMR集群,可参考登录集群

    2. 通过Beeline连接Hive SQL。

      beeline -u jdbc:hive2://<主节点的节点名称>:10000
    3. 执行以下语句初始化数据,创建测试数据。

      --创建数据库和表
      create database db_a;
      create table db_a.table1(
      col1 string,
      col2 string,
      col3 string
      );
      create table db_a.table2(
      col1 string,
      col2 string,
      col3 string
      );
      
      create database db_b;
      create table db_b.table1(
      col1 string,
      col2 string,
      col3 string
      );
      
      --初始化测试数据
      --db_a.table1
      insert overwrite table db_a.table1 values('1','aliyun','emrA1'),('2','aliyun','dlfA1');
      
      --db_a.table2
      insert overwrite table db_a.table2 values('1','aliyun','emrA2'),('2','aliyun','dlfA2');
      
      --db_b.table1
      insert overwrite table db_b.table1 values('1','aliyun','emrB1'),('2','aliyun','dlfB1');
  3. 初始化各角色登录所需的RAM用户。

    • 超级管理员,新建RAM用户:dlf_data_admin。

    • 业务A数据管理员,新建RAM用户:dlf_dba_admin。

    • 业务A数据开发人员,新建RAM用户:dlf_dba_dev。

    • 业务A数据分析人员,新建RAM用户:dlf_dba_analyst。

  4. 开启数据权限控制。

    需要完成以下两步,才可以正式开启EMR集群的数据权限控制:

    1. 在EMR集群开启数据权限控制,具体操作参考DLF-Auth

    2. 在DLF中开启Catalog的权限控制,具体操作参考权限设置

      说明

      生产使用建议同时开启LDAP认证,以保证用户身份经过合法校验。以下示例为简单说明权限问题,并未开启LDAP认证,所以beeline连接时未要求输入密码。

  5. 设置超级管理员的权限,使其具备DLF控制台授权权限,以及所有数据的访问权限。

    1. 打开数据湖构建控制台

    2. 在左侧菜单栏,选择数据权限 > 角色

    3. admin角色中,添加用户dlf_data_admin,此时dlf_data_admin就会具备dlf管理所有数据权限的管理员。可以为任意用户配置相关数据权限。

    4. 如果需要dlf_data_admin可以为在DLF控制台为RAM用户配置数据权限,还需要在RAM控制台中,为dlf_data_admin添加权限策略:AliyunDLFFullAccessAliyunRAMReadOnlyAccess

    5. 登录EMR集群,使用dlf_data_admin连接Hive,执行HiveSQL。

      beeline -u jdbc:hive2://<主节点的节点名称>:10000 -n dlf_data_admin
      select * from db_a.table1;
      select * from db_b.table1;

      上述SQL查询成功,该用户dlf_data_admin同时具备了所有数据库,数据表的访问权限。

  6. 设置业务A数据管理员的权限,使其具备DLF控制台授权db_a数据库的权限,以及db_a数据库数据的访问权限。

    1. 切换阿里云网站的登录用户为dlf_data_admin子账号,使用该账户后续为其他用户进行数据授权。

    2. 登录数据湖构建控制台

    3. 在左侧菜单栏,选择数据权限 > 数据授权,单击新增授权

    4. 输入如下信息:

      • 主体类型RAM 用户/角色

      • 主体选择:dlf_dba_admin。

      • 授权资源资源授权

      • 选择数据目录:catalog_test。

      • 选中数据库:db_a。

      • 权限配置

        • 数据库-数据权限ALL

        • 数据库-授权权限ALL

        • 数据库下所有对象-数据权限ALL

        • 数据库下所有对象-授权权限ALL

    5. 单击确定,保存授权信息。

    6. 如果需要dlf_dba_admin在DLF控制台为RAM用户配置数据权限,还需要在RAM控制台中,为dlf_dba_admin添加权限策略:AliyunDLFFullAccess,AliyunRAMReadOnlyAccess。

    7. 登录EMR集群,使用dlf_dba_admin连接Hive,执行HiveSQL。

      beeline -u jdbc:hive2://<主节点的节点名称>:10000 -n dlf_dba_admin
      select * from db_a.table1;
      select * from db_b.table1;

      上述SQL第一条查询成功,该用户dlf_dba_admin具备了db_a数据库及其下面所有资源的权限。

      上述SQL第二条查询失败,该用户dlf_dba_admin不具备db_b数据库及其下面所有资源的权限。

  7. 设置业务A数据开发人员的权限,使其具备db_a数据库数据的查询和修改权限。

    1. 切换阿里云网站的登录用户为dlf_dba_admin子账号,使用该账户后续为其他用户进行数据授权。

    2. 登录数据湖构建控制台

    3. 在左侧菜单栏,选择数据权限>数据授权,单击新增授权

    4. 输入如下信息:

      • 主体类型RAM 用户/角色

      • 主体选择:dlf_dba_dev。

      • 授权资源资源授权

      • 选择数据目录:catalog_test。

      • 选中数据库:db_a。

      • 权限配置

        • 数据库-数据权限ALL

        • 数据库-授权权限ALL。

        • 数据库下所有对象-数据权限ALL

        • 数据库下所有对象-授权权限ALL

    5. 单击确定,保存授权信息。

    6. 登录EMR集群,使用dlf_dba_dev连接Hive,执行HiveSQL。

      beeline -u jdbc:hive2://<主节点的节点名称>:10000 -n dlf_dba_dev
      select * from db_a.table1;
      insert into table db_a.table1 values('3','aliyun','emrA1'),('4','aliyun','dlfA1');
      
      select * from db_b.table1;
      insert into table db_b.table1 values('3','aliyun','emrA1'),('4','aliyun','dlfA1');
      

      上述SQL第1、2条查询成功,该用户dlf_dba_dev具备了db_a数据库及其下面所有资源的查询和修改权限。

      上述SQL第3、4条查询失败,该用户dlf_dba_dev不具备db_b数据库及其下面所有资源的查询和修改权限。

  8. 设置业务A数据分析人员的权限,使其具备db_a数据库table1(col1,col2)的访问权限。

    1. 在阿里云网站的登录用户为dlf_dba_admin子账号,使用该账户后续为其他用户进行数据授权。

    2. 登录数据湖构建控制台

    3. 在左侧菜单栏,选择数据权限>数据授权,单击新增授权

    4. 输入如下信息:

      • 主体类型RAM 用户/角色

      • 主体选择:dlf_dba_analyst。

      • 授权资源资源授权

      • 资源类型数据列

      • 选择数据目录:catalog_test。

      • 选择数据库:db_a。

      • 选择数据表:table1。

      • 权限配置

        • 数据列-数据权限ALL

    5. 单击确定,保存授权信息。

    6. 登录EMR集群,使用dlf_dba_analyst连接Hive,执行HiveSQL。

      beeline -u jdbc:hive2://<主节点的节点名称>:10000 -n dlf_dba_analyst
      select * from db_a.table1;
      select col1,col2 from db_a.table1;
      insert into table db_a.table1 values('5','aliyun','emrA1'),('6','aliyun','dlfA1');
      select * from db_b.table1;

      上述SQL第2条查询成功,该用户dlf_dba_dev具备了db_a.table1(col1,col2)的查询权限。

      上述SQL第1条查询失败,该用户dlf_dba_dev不具备db_a.table1(col3)的查询权限。

      上述SQL第3条查询失败,该用户dlf_dba_dev不具备db_a.table1的数据修改权限。

      上述SQL第4条查询失败,该用户dlf_dba_dev不具备db_b数据库的数据查询权限。

总结

以上示例演示了一个简单业务场景下如何运用DLF进行数据授权的操作步骤。您可以根据具体业务需求,灵活配置DLF数据权限,以授予不同用户访问和操作各类资源的适当权限。