使用者被賦予MaxCompute內建的角色後,會具備內建角色相應的許可權,例如使用者被賦予開發角色則具備表、資源等的操作許可權。但實際業務情境中,需要對此類使用者的操作許可權進行更精細化的管理,例如不允許刪除重要表。本文基於案例為您介紹如何通過Policy對具備內建角色許可權的使用者進行許可權管理。
前提條件
已安裝MaxCompute用戶端。更多安裝MaxCompute用戶端操作,請參見安裝並配置MaxCompute用戶端。
背景資訊
當使用者已經被賦予內建角色,且需要對使用者的許可權進行更精細化管理時,推薦您使用Policy許可權管控機制,來解決ACL許可權管控機制無法精細化管理此類許可權的問題。
Policy許可權管控機制是一種基於角色的許可權管理方式,允許或禁止角色操作(例如讀、寫)專案中的對象(例如表),將角色賦予使用者後,即可管控使用者權限。更多Policy授權或撤銷授權文法資訊,請參見Policy許可權管控。
Policy授權
假設RAM使用者Alice已具備MaxCompute專案的開發角色,現需要禁止Alice刪除以tb_開頭的所有表。Alice帳號名為Alice,所屬阿里雲帳號為Bo*@aliyun.com。
Policy授權操作需要由專案所有者、具備Super_Administrator或Admin角色的使用者執行。Policy授權操作流程如下:
執行
CREATE ROLE命令建立角色delete_test。基於Policy許可權管控機制,執行
GRANT命令為角色delete_test授權,禁止刪除以tb_開頭的所有表。命令樣本如下。
GRANT DROP ON TABLE tb_* TO ROLE delete_test privilegeproperties("policy" = "true", "allow"="false");更多Policy授權文法格式資訊,請參見Policy授權(Grant)。
執行
GRANT命令將delete_test角色賦予Alice。命令樣本如下。
GRANT delete_test TO ram$bo*@aliyun.com:Alice;如果不清楚帳號名稱,可以在MaxCompute用戶端執行
LIST USERS;命令擷取。更多將角色賦予使用者資訊,請參見角色規劃。執行
SHOW GRANTS命令查看Alice的許可權資訊。命令樣本如下。
SHOW GRANTS FOR ram$bo*@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查詢許可權資訊。
以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$bo*@aliyun.com:Alice; Deny by policy
撤銷Policy授權
基於Policy授權中的案例,假設以tb_開頭的所有表在實際業務中已不再需要,允許Alice執行刪除操作。
撤銷Policy授權操作需要由專案所有者、具備Super_Administrator或Admin角色的使用者執行。撤銷Policy授權方式如下:
撤銷為角色授與權限,保留角色
操作流程如下:
基於Policy許可權管控機制,執行
REVOKE命令撤銷Policy授權,允許delete_test角色刪除以tb_開頭的所有表。命令樣本如下。
REVOKE DROP ON TABLE tb_* FROM ROLE delete_test privilegeproperties("policy" = "true", "allow"="false");更多撤銷Policy授權文法格式資訊,請參見撤銷Policy授權(Revoke)。
執行
SHOW GRANTS命令查看Alice的許可權資訊。命令樣本如下。SHOW GRANTS FOR ram$bo*@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查詢許可權資訊。
以Alice身份登入MaxCompute用戶端,執行
DROP TABLE命令嘗試刪除以tb_開頭的表。命令樣本如下。
DROP TABLE tb_test;返回OK,表明撤銷Policy授權成功。
收回賦予使用者的角色,如果不再需要角色,可刪除角色
操作流程如下:
執行
REVOKE命令收回授予Alice的delete_test角色。命令樣本如下。
REVOKE delete_test FROM ram$bo*@aliyun.com:Alice;更多收回賦予使用者的角色資訊,請參見角色規劃。
執行
SHOW GRANTSshow grants命令查看Alice的許可權資訊。命令樣本如下。SHOW GRANTS FOR ram$bo*@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以Alice身份登入MaxCompute用戶端,執行
DROP TABLE命令嘗試刪除以tb_開頭的表。命令樣本如下。
DROP TABLE tb_test;返回OK,表明撤銷Policy授權成功。
(可選)執行
DROP ROLE命令刪除delete_test角色。命令樣本如下。
DROP ROLE delete_test;返回OK,表明角色刪除成功。更多刪除角色資訊,請參見角色規劃。