全部產品
Search
文件中心

Data Lake Formation:DLF+EMR之統一許可權最佳實務

更新時間:Nov 15, 2024

本文結合具體業務情境,為您介紹如何使用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 資料許可權。也可通過DingTalk群聯絡我們: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資料許可權,以授予不同使用者訪問和操作各類資源的適當許可權。