全部產品
Search
文件中心

DataWorks:實現指定使用者訪問特定UDF最佳實務

更新時間:Jul 03, 2024

本文為您介紹如何?將資源(表、UDF等)設定為僅能被指定的使用者訪問。此方法涉及資料的加密解密演算法,屬於資料安全管控範疇。

前提條件

您需要提前安裝MaxCompute用戶端,以實現指定UDF被指定使用者訪問的操作。詳情請參見安裝並配置MaxCompute用戶端

背景資訊

設定使用者存取權限的常見方法有如下幾種:

  • Package方案,通過打包授權進行許可權精細化管控。

    Package用於解決跨專案空間的資料共用及資源授權問題。通過Package授予使用者開發人員角色後,使用者擁有所有許可權,風險不可控。詳情請參見基於Package跨專案訪問資源

    • 下圖為DataWorks開發人員角色的許可權。**

      由上圖可見,開發人員角色對工作空間中的Package、Functions、Resources和Table預設有全部許可權,不符合許可權配置的要求。

    • 下圖為通過DataWorks添加子帳號並賦予開發人員角色的許可權。**

    由此可見,通過打包授權和DataWorks預設的角色都不能滿足特定使用者訪問指定UDF的需求。例如,授予子帳號RAM$xxxxx.pt@aliyun-test.com:ramtest開發人員角色,則預設該子帳號擁有當前工作空間中全部對象的所有操作許可權,詳情請參見使用者授權

  • 在DataWorks中建立角色進行許可權管控。

    在DataWorks工作配置頁面的MaxCompute進階配置頁面,可以對自訂使用者角色進行許可權管控。在該頁面只能針對某個表或專案進行授權,不能對資源和UDF進行授權。

    說明

    更多有關DataWorks工作空間的MaxCompute屬性介紹,請參見配置MaxCompute引擎許可權

  • Role Policy結合Project Policy實現指定使用者訪問指定UDF。

    通過Policy可以精細化地管理具體使用者對特定資源的具體許可權粒度。

    說明

    為了安全起見,建議初學者使用測試專案來驗證Policy。

因此您可以通過Policy方案實現特定UDF被指定使用者訪問:

  • 如果您不想讓其他使用者訪問工作空間內具體的資源,在DataWorks中添加資料開發人員許可權後,再根據Role Policy的操作,在MaxCompute用戶端將其配置為拒絕存取權限。

  • 如果您需要指定使用者訪問指定資源,在DataWorks中添加資料開發人員許可權後,再根據Project Policy的操作,在MaxCompute用戶端將其配置為允許存取權限。

操作步驟

  1. 建立預設拒絕訪問UDF的角色。

    1. 在用戶端輸入如下命令建立角色denyudfrole。

      create role denyudfrole;
    2. 建立Policy授權檔案,如下所示。

      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Deny",
            "Action": ["odps:Read","odps:List"],
            "Resource": "acs:odps:*:projects/sz_mc/resources/getaddr.jar"
          },
          {
            "Effect": "Deny",
            "Action": ["odps:Read","odps:List"],
            "Resource": "acs:odps:*:projects/sz_mc/registration/functions/getregion"
          }
        ]
      }
    3. 設定Role Policy。

      在用戶端執行如下命令,設定Role Policy檔案的存放路徑。

      put policy /Users/yangyi/Desktop/role_policy.json on role denyudfrole;
    4. 在用戶端執行如下命令查看Role Policy。

      get policy on role denyudfrole;

      返回結果如下。**

    5. 在用戶端執行如下命令添加子帳號至role denyudfrole。

      grant denyudfrole to RAM$xxxx.pt@aliyun-test.com:ramtest;
  2. 驗證拒絕訪問UDF的角色是否建立成功。

    1. 登入用戶端輸入whoami;確認角色。

      **

    2. 通過show grants;查看當前登入使用者權限。

      **

      通過查詢發現該RAM子帳號有兩個角色,一個是role_project_dev(即DataWorks預設的開發人員角色),另一個是剛自訂建立的denyudfrole。

    3. 驗證自建UDF以及依賴的包的許可權。

      **

      通過上述驗證發現,該子帳號在擁有DataWorks開發人員角色的前提下,沒有自建UDF(getregion)的讀許可權。您還需要結合Project Policy來實現該UDF只能被指定的使用者訪問。

  3. 配置Project Policy。

    1. 編寫Policy。

      {
      "Version": "1", "Statement":
      [{
      "Effect":"Allow",
      "Principal":"RAM$yangyi.pt@aliyun-test.com:yangyitest",
      "Action":["odps:Read","odps:List","odps:Select"],
      "Resource":"acs:odps:*:projects/sz_mc/resources/getaddr.jar"
      },
      {
      "Effect":"Allow",
       "Principal":"RAM$xxxx.pt@aliyun-test.com:yangyitest",
      "Action":["odps:Read","odps:List","odps:Select"],
      "Resource":"acs:odps:*:projects/sz_mc/registration/functions/getregion"
      }] }
    2. 設定Role Policy。

      在用戶端執行如下命令,設定Role Policy檔案的存放路徑。

      put policy /Users/yangyi/Desktop/project_policy.json;
    3. 在用戶端執行如下命令查看Role Policy。

      get policy;

      返回結果如下。**

    4. 通過whoami;show grants;進行驗證。

      **

    5. 運行SQL任務,查看是否僅指定的RAM子帳號能夠查看指定的UDF和依賴的包。

      • 指定的RAM子帳號查看指定的UDF。**

      • 查看依賴包。**