全部產品
Search
文件中心

MaxCompute:基於Policy對具備內建角色的使用者進行許可權管理

更新時間:Jun 19, 2024

使用者被賦予MaxCompute內建的角色後,會具備內建角色相應的許可權,例如使用者被賦予開發角色則具備表、資源等的操作許可權。但實際業務情境中,需要對此類使用者的操作許可權進行更精細化的管理,例如不允許刪除重要表。本文基於案例為您介紹如何通過Policy對具備內建角色許可權的使用者進行許可權管理。

前提條件

已安裝MaxCompute用戶端。更多安裝MaxCompute用戶端操作,請參見安裝並配置MaxCompute用戶端

背景資訊

當使用者已經被賦予內建角色,且需要對使用者的許可權進行更精細化管理時,推薦您使用Policy許可權管控機制,來解決ACL許可權管控機制無法精細化管理此類許可權的問題。

Policy許可權管控機制是一種基於角色的許可權管理方式,允許或禁止角色操作(例如讀、寫)專案中的對象(例如表),將角色賦予使用者後,即可管控使用者權限。更多Policy授權或撤銷授權文法資訊,請參見Policy許可權管控

Policy授權

假設RAM使用者Alice已具備MaxCompute專案的開發角色,現需要禁止Alice刪除以tb_開頭的所有表。Alice帳號名為Alice,所屬阿里雲帳號為Bob@aliyun.com。

Policy授權操作需要由專案所有者、具備Super_Administrator或Admin角色的使用者執行。Policy授權操作流程如下:

  1. 安裝並登入MaxCompute本地用戶端
  2. 執行create role命令建立角色delete_test。
    命令樣本如下。
    create role delete_test;

    更多建立角色資訊,請參見角色規劃

  3. 基於Policy許可權管控機制,執行grant命令為角色delete_test授權,禁止刪除以tb_開頭的所有表。
    命令樣本如下。
    grant drop on table tb_* to role delete_test privilegeproperties("policy" = "true", "allow"="false");

    更多Policy授權文法格式資訊,請參見Policy授權(Grant)

  4. 執行grant命令將delete_test角色賦予Alice。
    命令樣本如下。
    grant delete_test to ram$bob@aliyun.com:Alice;  

    如果不清楚帳號名稱,可以在MaxCompute用戶端執行list users;命令擷取。更多將角色賦予使用者資訊,請參見角色規劃

  5. 執行show grants命令查看Alice的許可權資訊。
    命令樣本如下。
    show grants for ram$bob@aliyun.com:Alice; 
    返回結果如下。
    [roles]
    role_project_admin, delete_test                                 --Alice已被賦予delete_test角色。
    
    Authorization Type: Policy                                      --授權方式為Policy。
    [role/delete_test]
    D       projects/mcproject_name/tables/tb_*: Drop               --不允許(D表示Deny)刪除專案中以tb_開頭的所有表。
    [role/role_project_admin]
    A       projects/mcproject_name: *
    A       projects/mcproject_name/instances/*: *
    A       projects/mcproject_name/jobs/*: *
    A       projects/mcproject_name/offlinemodels/*: *
    A       projects/mcproject_name/packages/*: *
    A       projects/mcproject_name/registration/functions/*: *
    A       projects/mcproject_name/resources/*: *
    A       projects/mcproject_name/tables/*: *
    A       projects/mcproject_name/volumes/*: *
    
    Authorization Type: ObjectCreator
    AG      projects/mcproject_name/tables/local_test: All
    AG      projects/mcproject_name/tables/mr_multiinout_out1: All
    AG      projects/mcproject_name/tables/mr_multiinout_out2: All
    AG      projects/mcproject_name/tables/ramtest: All
    AG      projects/mcproject_name/tables/wc_in: All
    AG      projects/mcproject_name/tables/wc_in1: All
    AG      projects/mcproject_name/tables/wc_in2: All
    AG      projects/mcproject_name/tables/wc_out: All

    更多查看使用者權限資訊,請參見通過MaxCompute SQL查詢許可權資訊

  6. 以Alice身份登入MaxCompute用戶端,執行drop table命令嘗試刪除以tb_開頭的表。
    命令樣本如下。
    drop table tb_test;
    返回結果如下。表明許可權控制生效。如果刪除成功,表明許可權控制不生效,請仔細確認是否已經正確執行上述步驟。
    FAILED: Catalog Service Failed, ErrorCode: 50, Error Message: ODPS-0130013:Authorization exception - Authorization Failed [4011],
    You have NO privilege 'odps:Drop' on {acs:odps:*:projects/mcproject_name/tables/tb_test}.
    Explicitly denied by policy.
    Context ID:85efa8e9-40da-4660-bbfd-b503dfa64c0a. --->Tips: Pricipal:RAM$bob@aliyun.com:Alice; Deny by policy

撤銷Policy授權

基於Policy授權中的案例,假設以tb_開頭的所有表在實際業務中已不再需要,允許Alice執行刪除操作。

撤銷Policy授權操作需要由專案所有者、具備Super_Administrator或Admin角色的使用者執行。撤銷Policy授權方式如下:
  • 撤銷為角色授與權限,保留角色

    操作流程如下:

    1. 安裝並登入MaxCompute本地用戶端
    2. 基於Policy許可權管控機制,執行revoke命令撤銷Policy授權,允許delete_test角色刪除以tb_開頭的所有表。
      命令樣本如下。
      revoke drop on table tb_* from role delete_test privilegeproperties("policy" = "true", "allow"="false");

      更多撤銷Policy授權文法格式資訊,請參見撤銷Policy授權(Revoke)

    3. 執行show grants命令查看Alice的許可權資訊。命令樣本如下。
      show grants for ram$bob@aliyun.com:Alice; 
      返回結果如下。
      [roles]
      role_project_admin, delete_test                                 --保留delete_test角色。
      
      Authorization Type: Policy                                      --Policy授權資訊已撤銷。
      [role/role_project_admin]
      A       projects/mcproject_name: *
      A       projects/mcproject_name/instances/*: *
      A       projects/mcproject_name/jobs/*: *
      A       projects/mcproject_name/offlinemodels/*: *
      A       projects/mcproject_name/packages/*: *
      A       projects/mcproject_name/registration/functions/*: *
      A       projects/mcproject_name/resources/*: *
      A       projects/mcproject_name/tables/*: *
      A       projects/mcproject_name/volumes/*: *
      
      Authorization Type: ObjectCreator
      AG      projects/mcproject_name/tables/local_test: All
      AG      projects/mcproject_name/tables/mr_multiinout_out1: All
      AG      projects/mcproject_name/tables/mr_multiinout_out2: All
      AG      projects/mcproject_name/tables/ramtest: All
      AG      projects/mcproject_name/tables/tb_test: All
      AG      projects/mcproject_name/tables/wc_in: All
      AG      projects/mcproject_name/tables/wc_in1: All
      AG      projects/mcproject_name/tables/wc_in2: All
      AG      projects/mcproject_name/tables/wc_out: All

      更多查看使用者權限資訊,請參見通過MaxCompute SQL查詢許可權資訊

    4. 以Alice身份登入MaxCompute用戶端,執行drop table命令嘗試刪除以tb_開頭的表。

      命令樣本如下。

      drop table tb_test;
      返回OK,表明撤銷Policy授權成功。
  • 收回賦予使用者的角色,如果不再需要角色,可刪除角色

    操作流程如下:

    1. 安裝並登入MaxCompute本地用戶端
    2. 執行revoke命令收回授予Alice的delete_test角色。
      命令樣本如下。
      revoke delete_test from ram$bob@aliyun.com:Alice;

      更多收回賦予使用者的角色資訊,請參見角色規劃

    3. 執行show grants命令查看Alice的許可權資訊。命令樣本如下。
      show grants for ram$bob@aliyun.com:Alice; 
      返回結果如下。
      [roles]
      role_project_admin                                           --已刪除delete_test角色。
      
      Authorization Type: Policy
      [role/role_project_admin]
      A       projects/mcproject_name: *
      A       projects/mcproject_name/instances/*: *
      A       projects/mcproject_name/jobs/*: *
      A       projects/mcproject_name/offlinemodels/*: *
      A       projects/mcproject_name/packages/*: *
      A       projects/mcproject_name/registration/functions/*: *
      A       projects/mcproject_name/resources/*: *
      A       projects/mcproject_name/tables/*: *
      A       projects/mcproject_name/volumes/*: *
      
      Authorization Type: ObjectCreator
      AG      projects/mcproject_name/tables/local_test: All
      AG      projects/mcproject_name/tables/mr_multiinout_out1: All
      AG      projects/mcproject_name/tables/mr_multiinout_out2: All
      AG      projects/mcproject_name/tables/ramtest: All
      AG      projects/mcproject_name/tables/wc_in: All
      AG      projects/mcproject_name/tables/wc_in1: All
      AG      projects/mcproject_name/tables/wc_in2: All
      AG      projects/mcproject_name/tables/wc_out: All
    4. 以Alice身份登入MaxCompute用戶端,執行drop table命令嘗試刪除以tb_開頭的表。

      命令樣本如下。

      drop table tb_test;
      返回OK,表明撤銷Policy授權成功。
    5. (可選)執行drop role命令刪除delete_test角色。
      命令樣本如下。
      drop role delete_test;

      返回OK,表明角色刪除成功。更多刪除角色資訊,請參見角色規劃