MaxCompute支持通過ACL(Access Control Lists)、Policy方式撤銷用戶或角色對指定對象執行指定操作的權限。
前提條件
使用ACL、Policy權限控制方案前,請您確認已記錄好如下信息:
被授權人的賬號或角色名稱,且賬號或角色已添加至MaxCompute項目。阿里云賬號格式為
ALIYUN$阿里云賬號
,RAM用戶賬號格式為RAM$歸屬阿里云賬號:RAM用戶名
。您可以通過MaxCompute客戶端執行
list users;
或list roles;
命令獲取賬號或角色信息。授權對象類型、對象名稱及操作。
更多對象類型及操作信息,請參見MaxCompute權限。
使用限制
ACL權限控制功能的使用限制如下:
ACL權限控制只支持對已存在的對象、被授權人進行授權,可以避免刪除并重建同名對象所帶來的安全風險。
ACL權限控制不支持通過
[with grant option]
子句授權。例如當用戶A授權用戶B可以訪問某個對象時,用戶B無法將權限進一步授權給用戶C。ACL授權為白名單(Allow)授權,不支持黑名單(Deny)授權。
Policy權限控制只支持對已存在的角色進行授權。
注意事項
使用ACL權限控制功能的注意事項如下:
如果刪除了對象,MaxCompute會自動撤銷與該對象關聯的所有ACL授權信息。
當一個用戶被移除后,與該用戶有關的授權仍然會被保留。一旦該用戶以后被再次添加到該項目時,該用戶的歷史授權訪問權限將被重新激活。如果需要徹底清除用戶的權限信息,請參見徹底清除被刪除用戶遺留的權限信息。
使用Policy權限控制功能的注意事項如下:
Policy權限控制允許對不存在的對象授權,當刪除對象時,與該對象關聯的Policy授權信息不會被刪除,授權人需要注意刪除并重建同名對象所帶來的安全風險。
當一個用戶被移除后,與該用戶有關的授權仍然會被保留。一旦該用戶以后被再次添加到該項目時,該用戶的歷史授權訪問權限將被重新激活。如果需要徹底清除用戶的權限信息,請參見徹底清除被刪除用戶遺留的權限信息。
命令格式
撤銷ACL授權
revoke <actions> on <object_type> <object_name> [(<column_list>)] from <subject_type> <subject_name>;
撤銷Policy授權
revoke <actions> on <object_type> <object_name> from ROLE <role_name> privilegeproperties ("policy" = "true", "allow"="{true|false}");
參數說明
參數名稱 | 是否必填 | 說明 | |
actions | 是 | 指定被授予的操作權限名稱。單次授權可以指定單個或多個操作。 當有多個操作時,多個操作名稱之間使用英文逗號(,)分隔。操作取值請參見MaxCompute權限。 | |
object_type | 是 | 指定被授予的對象類型,即客體。單次授權只能指定一個客體。 客體取值請參見MaxCompute權限。 | |
object_name | 是 | 指定被授予的對象的名稱。獲取方式如下:
授權對象支持以通配符星號(*)來表達。例如, 說明 授權給ROLE支持使用通配符星號(*);授權給USER不支持使用通配符。 | |
column_list | 否 | 僅當object_type為Table,且需要對表進行列級別權限控制時,需要配置該參數。單次授權可以指定單個或多個列名,列名之間使用英文逗號(,)分隔。 說明 該參數實現的是對指定表的指定列的Describe、Select、Alter、Update、Drop、ShowHistory、ALL權限進行控制。如果表的列設置了敏感等級,可通過Label權限控制功能,通過敏感等級標簽對訪問敏感數據的權限進行控制。 | |
subject_type | 是 | 指定被授權人的類型。取值范圍如下:
| |
subject_name | 是 | 指定被授權的用戶賬號或角色名稱。單次授權只能指定一個用戶或角色。 您可以通過MaxCompute客戶端執行 | |
role_name | 是 | 指定被授權的角色名稱。單次授權只能指定一個角色。 您可以通過MaxCompute客戶端執行 | |
privilegeproperties | policy | 是 | 固定取值為true。表示使用Policy權限控制方案。 |
allow | 白名單授權必填 | 指定白名單授權機制。取值范圍如下:
|
執行環境
本文中的命令支持在如下工具平臺執行:
成功連接MaxCompute項目,然后執行授權命令。
使用
use <MaxCompute_Name>;
命令進入目標MaxCompute項目,然后執行授權命令。
示例
假設Bob@aliyun.com是test_project_a的項目所有者,Allen、Alice、Tom是隸屬于Bob@aliyun.com的RAM用戶。以MaxCompute客戶端操作為例,授權示例如下:
示例一:為用戶撤銷授權
基于示例一、二,撤銷對用戶Allen、Alice的授權。命令示例如下。
--Bob進入項目test_project_a。 use test_project_a; --撤銷Allen授權。 revoke Describe, Select on table sale_detail (shop_name, customer_id) from USER RAM$Bob@aliyun.com:Allen; --撤銷Alice授權。 revoke All on table sale_detail (shop_name, customer_id) from USER RAM$Bob@aliyun.com:Alice; --查看用戶Allen的撤銷授權結果。權限列表無Describe, Select權限信息。 show grants for RAM$Bob@aliyun.com:Allen; --查看用戶Alice的撤銷授權結果。權限列表無All權限信息。 show grants for RAM$Bob@aliyun.com:Alice;
示例二:為多個用戶撤銷基于角色授予的相同權限
撤銷對用戶Alice、Tom、Lily@aliyun.com的授權。命令示例如下。
--Bob進入項目test_project_a。 use test_project_a; --收回用戶Alice、Tom、Lily@aliyun.com綁定的角色Worker。 revoke Worker from RAM$Bob@aliyun.com:Alice; revoke Worker from RAM$Bob@aliyun.com:Tom; revoke Worker from ALIYUN$Lily@aliyun.com; --查看用戶Lily的撤銷授權結果。權限列表無Worker信息。 show grants for ALIYUN$Lily@aliyun.com;
撤銷為用戶或角色授予的訪問Package的權限
在安裝Package的MaxCompute項目中撤銷為用戶或角色授予的訪問Package的權限。
命令格式
revoke <actions> on package <project_name>.<package_name> from {USER|ROLE} <name>;
參數說明
參數名稱
是否必填
說明
actions
是
指定對資源的操作權限。固定取值為Read。
project_name
是
指定Package所屬MaxCompute項目名稱。
您可以登錄MaxCompute控制臺,左上角切換地域后,即可在項目管理頁簽獲取具體的MaxCompute項目名稱。
package_name
是
指定Package的名稱。
您可以通過MaxCompute客戶端執行
show packages;
命令獲取已創建的Package信息。name
是
指定待撤銷授權的用戶賬號或角色名稱。單次撤銷授權只能指定一個用戶或角色。
您可以通過MaxCompute客戶端執行
list users;
或list roles;
命令獲取用戶賬號或角色名稱。使用示例
撤銷為Bella授予的Package訪問權限。命令示例如下。
--撤銷允許Bella訪問Package的權限。 revoke Read on package test_project_a.datashare from user RAM$Amy@aliyun.com:Bella;
撤銷Label顯式授權
由Project Owner或具備Admin角色的用戶撤銷Label顯式授權。
命令格式
revoke Label on table <table_name> [(<column_list>)] from {USER|ROLE} <name>;
注意事項
撤銷顯式授予用戶的表的Label權限,會同時撤銷顯式授予用戶的表列的Label權限。
撤銷顯式Label授權信息,不會影響為用戶設置的訪問許可等級標簽。例如用戶的訪問許可等級為2,為用戶顯式授予訪問某張表敏感等級不超過3的數據,撤銷授權后,用戶仍然可以訪問表中敏感等級小于等于2的數據。
參數說明
參數名稱
是否必填
說明
table_name
是
指定目標表或視圖的名稱。
您可以通過MaxCompute客戶端執行
show tables;
命令獲取表或視圖名稱。column_list
否
當需要撤銷目標表或視圖中指定列的敏感數據訪問權限時,需要配置該參數。可以指定多個列名,列名之間用英文逗號(,)分隔。
name
是
指定用戶或角色的名稱。
您可以通過MaxCompute客戶端執行
list users;
或list roles;
命令獲取用戶賬號或角色名稱。使用示例
假設項目test_project_a中存在一張表sale_detail,shop_name、customer_id和total_price為表的列。Bob@aliyun.com是test_project_a的項目所有者。Allen為隸屬于Bob的RAM用戶,已被添加至項目test_project_a中。
撤銷為Allen授予的訪問高敏感級數據權限,命令示例如下。
--撤銷Allen訪問sale_detail表的shop_name、customer_id和total_price列中敏感度不超過3級的數據權限。 revoke Label on table sale_detail(shop_name, customer_id, total_price) from USER RAM$Bob@aliyun.com:Allen; --查看Allen的撤銷授權結果。 show label grants on table sale_detail for USER RAM$Bob@aliyun.com:Allen; --返回結果如下。 User Label: 1 +-------------+--------------+--------------------------+ | Column | GrantedLabel | Expires | +-------------+--------------+--------------------------+ | total_price | 3 | 2021-12-31T19:56:18+0800 | +-------------+--------------+--------------------------+ --撤銷Allen訪問sale_detail表中敏感數據的權限。 revoke Label on table sale_detail from USER RAM$Bob@aliyun.com:Allen; --查看Allen的撤銷授權結果。 show label grants on table sale_detail for USER RAM$Bob@aliyun.com:Allen; --返回結果如下。 User Label: 1
刪除角色中的用戶
刪除指定角色內的用戶。
命令格式
revoke <role_name> from <user_name>;
參數說明
role_name:必填。待刪除用戶所屬的角色名稱。
user_name:必填。待刪除阿里云用戶或RAM用戶的賬號信息。阿里云賬號格式為
ALIYUN$****@aliyun.com;
,RAM用戶賬號格式為RAM$****
。
使用示例
--刪除角色player中的阿里云用戶alice@aliyun.com。 revoke player from ALIYUN$alice@aliyun.com;
相關命令
CREATE PACKAGE:創建Package。
CREATE ROLE:在MaxCompute項目空間中創建角色。
SET LABEL:MaxCompute支持在項目級別為用戶設置訪問許可等級標簽,為表或表的列設置敏感等級標簽(Label)。
GRANT:MaxCompute支持通過ACL(Access Control Lists)方式授予用戶或角色對指定對象執行指定操作的權限。