使用者被賦予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授權操作流程如下:
- 安裝並登入MaxCompute本地用戶端。
- 執行
create role
命令建立角色delete_test。命令樣本如下。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$bob@aliyun.com:Alice;
如果不清楚帳號名稱,可以在MaxCompute用戶端執行
list users;
命令擷取。更多將角色賦予使用者資訊,請參見角色規劃。 - 執行
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查詢許可權資訊。
- 以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執行刪除操作。
- 撤銷為角色授與權限,保留角色
操作流程如下:
- 安裝並登入MaxCompute本地用戶端。
- 基於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$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查詢許可權資訊。
- 以Alice身份登入MaxCompute用戶端,執行
drop table
命令嘗試刪除以tb_開頭的表。命令樣本如下。
返回OK,表明撤銷Policy授權成功。drop table tb_test;
- 收回賦予使用者的角色,如果不再需要角色,可刪除角色
操作流程如下:
- 安裝並登入MaxCompute本地用戶端。
- 執行
revoke
命令收回授予Alice的delete_test角色。命令樣本如下。revoke delete_test from ram$bob@aliyun.com:Alice;
更多收回賦予使用者的角色資訊,請參見角色規劃。
- 執行
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
- 以Alice身份登入MaxCompute用戶端,執行
drop table
命令嘗試刪除以tb_開頭的表。命令樣本如下。
返回OK,表明撤銷Policy授權成功。drop table tb_test;
- (可選)執行
drop role
命令刪除delete_test角色。命令樣本如下。drop role delete_test;
返回OK,表明角色刪除成功。更多刪除角色資訊,請參見角色規劃。