MaxCompute支持通過ACL(Access Control Lists)方式和Policy權限控制方案授予用戶或角色對指定對象執行指定操作的權限。本文為您介紹MaxCompute支持的ACL、Policy授權命令,并提供授權示例供參考。
ACL權限控制
前提條件。
使用ACL權限控制方案前,請您確認已記錄好如下信息:
被授權人的賬號或角色名稱,且賬號或角色已添加至MaxCompute項目。阿里云賬號格式為
ALIYUN$阿里云賬號
,RAM用戶賬號格式為RAM$歸屬阿里云賬號:RAM用戶名
。您可以通過MaxCompute客戶端執行
list users;
或list roles;
命令獲取賬號或角色信息。授權對象類型、對象名稱及操作。
更多對象類型及操作信息,請參見MaxCompute權限。
使用限制。
ACL權限控制功能的使用限制如下:
ACL權限控制只支持對已存在的對象、被授權人進行授權,可以避免刪除并重建同名對象所帶來的安全風險。
ACL權限控制不支持通過
[with grant option]
子句授權。例如當用戶A授權用戶B可以訪問某個對象時,用戶B無法將權限進一步授權給用戶C。ACL授權為白名單(Allow)授權,不支持黑名單(Deny)授權。
注意事項。
使用ACL權限控制功能的注意事項如下:
如果刪除了對象,MaxCompute會自動撤銷與該對象關聯的所有ACL授權信息。
當一個用戶被移除后,與該用戶有關的授權仍然會被保留。一旦該用戶以后被再次添加到該項目時,該用戶的歷史授權訪問權限將被重新激活。如果需要徹底清除用戶的權限信息,請參見徹底清除被刪除用戶遺留的權限信息。
命令格式。
ACL權限控制命令格式如下:
ACL授權。
grant <actions> on <object_type> <object_name> [(<column_list>)] to <subject_type> <subject_name> [privilegeproperties("conditions" = "<conditions>", "expires"="<days>")];
列級別權限控制。
grant <actions> on table <table_name> (<column_list>) to <subject_type> <subject_name>; revoke <actions> on table <table_name> (<column_list>) from <subject_type> <subject_name>;
參數說明如下。
參數名稱
是否必填
說明
actions
是
指定被授予的操作權限名稱。單次授權可以指定單個或多個操作。
當有多個操作時,多個操作名稱之間使用英文逗號(,)分隔。操作取值請參見MaxCompute權限。
object_type
是
指定被授予的對象類型,即客體。單次授權只能指定一個客體。
客體取值請參見MaxCompute權限。
object_name
是
指定被授予的對象的名稱。獲取方式如下:
項目名稱:您可以登錄MaxCompute控制臺,左上角切換地域后,即可在項目管理頁簽獲取具體的MaxCompute項目名稱。
表名稱:您可以通過MaxCompute客戶端執行
show tables;
命令獲取表或視圖名稱。資源名稱:您可以通過MaxCompute客戶端執行
list resources;
命令獲取資源名稱。函數名稱:您可以通過MaxCompute客戶端執行
list functions;
命令獲取函數名稱。實例名稱:您可以通過MaxCompute客戶端執行
show instances;
命令獲取實例ID。
授權對象支持以通配符星號(*)來表達。例如,
table taobao*
表示所有以taobao
開頭的表。說明授權給ROLE支持使用通配符星號(*);授權給USER不支持使用通配符。
column_list
否
僅當object_type為Table,且需要對表進行列級別權限控制時,需要配置該參數。單次授權可以指定單個或多個列名,列名之間使用英文逗號(,)分隔。
說明該參數實現的是對指定表的指定列的Describe、Select、Alter、Update、Drop、ShowHistory、ALL權限進行控制。如果表的列設置了敏感等級,可通過Label權限控制功能,通過敏感等級標簽對訪問敏感數據的權限進行控制。
privilegeproperties
conditions
否
從請求消息來源及訪問方式等維度進行權限控制。格式為
"<var_name> <Operation> 常量" and "<var_name> <Operation> 常量" and ...
,支持的var_name及Operation列表,請參見Conditions。days
否
指定權限過期時間,單位為天。未指定該參數時,權限默認長期有效。指定該參數時,權限到期后,MaxCompute會自動清除權限信息。
subject_type
是
指定被授權人的類型。取值范圍如下:
USER:阿里云賬號或RAM用戶
ROLE:角色
subject_name
是
指定被授權的用戶賬號或角色名稱。單次授權只能指定一個用戶或角色。
您可以通過MaxCompute客戶端執行
list users;
或list roles;
命令獲取用戶賬號或角色名稱。
Conditions。
conditions支持的var_name及Operation列表如下。
var_name
類型
Operation
說明
acs:UserAgent
STRING
StringEquals:
=
StringNotEquals:
<>
StringLike:
like
StringNotLike:
not like
發送請求時的客戶端UserAgent。
acs:Referer
STRING
發送請求時的HTTP referer。
acs:SourceIp
IP Address
IpAddress:
in (...)
NotIpAddress:
not in (...)
發送請求時的客戶端IP地址。
acs:SecureTransport
BOOLEAN
True
False
發送請求是否使用了安全通道,如HTTPS。
acs:CurrentTime
DATEANDTIME
DateEquals:
=
DateNotEquals:
<>
DateLessThan:
<
DateLessThanEquals:
<=
DateGreaterThan:
>
DateGreaterThanEquals:
>=
Web Server接收到請求的時間,以ISO 8601格式表示,如2012-11-11T23:59:59Z。
使用示例。
假設Bob@aliyun.com是test_project_a的項目所有者,Allen、Alice、Tom是隸屬于Bob@aliyun.com的RAM用戶。以MaxCompute客戶端操作為例,授權示例如下:
示例一:為用戶授權
在項目test_project_a中創建表sale_detail,并為用戶Allen授予表的讀取元數據(Describe)和讀取表數據(Select)權限。命令示例如下。
--Bob進入項目test_project_a。 use test_project_a; --創建一張分區表sale_detail。 create table if not exists sale_detail ( shop_name string, customer_id string, total_price double ) partitioned by (sale_date string, region string); --將用戶Allen添加為項目成員。 add user RAM$Bob@aliyun.com:Allen; --為Allen授予權限。 grant Describe, Select on table sale_detail to USER RAM$Bob@aliyun.com:Allen; --查看用戶Allen的授權結果。 show grants for RAM$Bob@aliyun.com:Allen; --授權結果如下。 Authorization Type: ACL [user/RAM$Bob@aliyun.com:Allen] A projects/test_project_a/tables/sale_detail: Describe | Select
示例二:為用戶授權
在示例一中創建的表sale_detail基礎上,為用戶Alice授予表sale_detail中shop_name和customer_id兩列的所有操作權限。命令示例如下。
--Bob進入項目test_project_a。 use test_project_a; --將用戶Alice添加為項目成員。 add user RAM$Bob@aliyun.com:Alice; --為Alice授予列級別控制權限。 grant All on table sale_detail (shop_name, customer_id) to USER RAM$Bob@aliyun.com:Alice; --查看用戶Alice的授權結果。 show grants for RAM$Bob@aliyun.com:Alice; --授權結果如下。 Authorization Type: ACL [user/RAM$Bob@aliyun.com:Alice] A projects/test_project_a/tables/sale_detail/customer_id: All A projects/test_project_a/tables/sale_detail/shop_name: All
示例三:基于角色為多個用戶授予相同權限
為Alice、Tom及另一阿里云賬號Lily@aliyun.com授予在項目test_project_a中創建實例、創建資源、創建函數、創建表以及查看項目所有對象類型的權限。命令示例如下。
--Bob進入項目test_project_a。 use test_project_a; --將用戶Alice、Tom、Lily@aliyun.com添加為項目成員。 add user RAM$Bob@aliyun.com:Alice; add user RAM$Bob@aliyun.com:Tom; add user ALIYUN$Lily@aliyun.com; --創建角色Worker。 create role Worker; --為用戶綁定角色Worker。 grant Worker TO RAM$Bob@aliyun.com:Alice; grant Worker TO RAM$Bob@aliyun.com:Tom; grant Worker TO ALIYUN$Lily@aliyun.com; --為角色Worker授予在項目test_project_a中創建實例、創建資源、創建函數、創建表以及查看項目所有對象類型的權限。 grant CreateInstance, CreateResource, CreateFunction, CreateTable, List on project test_project_a TO ROLE Worker; --查看用戶Lily的授權結果。 show grants for ALIYUN$Lily@aliyun.com; --授權結果如下。表明用戶Lily已經具備上述權限。 [roles] worker Authorization Type: ACL [role/worker] A projects/test_project_a: CreateTable | CreateResource | CreateInstance | CreateFunction | List
Policy權限控制
前提條件
使用Policy權限控制方案前,請您確認已記錄好如下信息:
被授權角色的名稱,且角色已添加至MaxCompute項目。
您可以通過MaxCompute客戶端執行
list roles;
命令獲取角色信息。如果需要新增角色,請參見角色規劃。
授權對象類型、對象名稱及操作。
更多對象類型及操作信息,請參見MaxCompute權限。
使用限制
Policy權限控制只支持對已存在的角色進行授權。
注意事項
使用Policy權限控制功能的注意事項如下:
當白名單和黑名單授權信息同時存在時,遵循黑名單優先原則。
Policy權限控制允許對不存在的對象授權,當刪除對象時,與該對象關聯的Policy授權信息不會被刪除,授權人需要注意刪除并重建同名對象所帶來的安全風險。
當一個用戶被移除后,與該用戶有關的授權仍然會被保留。一旦該用戶以后被再次添加到該項目時,該用戶的歷史授權訪問權限將被重新激活。如果需要徹底清除用戶的權限信息,請參見徹底清除被刪除用戶遺留的權限信息。
命令格式
Policy權限控制命令格式如下:
grant <actions> on <object_type> <object_name> to ROLE <role_name> privilegeproperties("policy" = "true", "allow"="{true|false}"[, "conditions"= "<conditions>" ,"expires"="<days>"]);
參數說明
參數名稱
是否必填
說明
actions
是
指定被授予的操作權限名稱。單次授權可以指定多個操作。
當有多個操作時,多個操作名稱之間使用英文逗號(,)分隔。操作取值請參見MaxCompute權限。
object_type
是
指定被授予的對象類型,即客體。單次授權只能指定一個客體。
客體取值請參見MaxCompute權限。
object_name
是
指定被授予的對象的名稱。獲取方式如下:
項目名稱:您可以登錄MaxCompute控制臺,左上角切換地域后,即可在項目管理頁簽獲取具體的MaxCompute項目名稱。
表名稱:您可以通過MaxCompute客戶端執行
show tables;
命令獲取表或視圖名稱。資源名稱:您可以通過MaxCompute客戶端執行
list resources;
命令獲取資源名稱。函數名稱:您可以通過MaxCompute客戶端執行
list functions;
命令獲取函數名稱。實例名稱:您可以通過MaxCompute客戶端執行
show instances;
命令獲取實例ID。
授權對象支持以通配符星號(*)來表達。例如,
table taobao*
表示所有以taobao
開頭的表。說明授權給ROLE支持使用通配符星號(*);授權給USER不支持使用通配符。
role_name
是
指定被授權的角色名稱。單次授權只能指定一個角色。
您可以通過MaxCompute客戶端執行
list roles;
命令獲取角色名稱。privilegeproperties
policy
是
固定取值為true。表示使用Policy權限控制方案。
allow
白名單授權必填
指定白名單授權機制。取值范圍如下:
true:表示允許對指定對象執行指定操作。
false:表示不允許對指定對象執行指定操作,即黑名單。
conditions
否
從請求消息來源及訪問方式等維度進行權限控制。詳細參數取值請參見Conditions。
days
否
指定權限過期時間,單位為天。未指定該參數時,權限默認長期有效。指定該參數時,權限到期后,MaxCompute會自動清除權限信息。
示例
假設Bob@aliyun.com是test_project_a的項目所有者,Allen、Tom是隸屬于bob@aliyun.com的RAM用戶。Allen已被賦予test_project_a項目的Admin角色。以MaxCompute客戶端操作為例,授權示例如下:
示例一:基于角色為用戶授權(黑名單)
禁止Tom刪除以
tb_
開頭的表。命令示例如下。--Bob進入項目test_project_a。 use test_project_a; --創建角色Worker。 create role Worker; --將用戶Tom添加為項目成員。 add user RAM$Bob@aliyun.com:Tom; --將角色Worker綁定至用戶Tom。 grant Worker TO RAM$Bob@aliyun.com:Tom; --禁止角色Worker刪除項目test_project_a中以tb_開頭的表。 grant Drop on table tb_* to ROLE Worker privilegeproperties("policy" = "true", "allow"="false"); --查看用戶Tom的授權結果。 show grants for RAM$Bob@aliyun.com:Tom; --授權結果如下。D表示禁止,禁止刪除以tb_開頭的表。 Authorization Type: Policy [role/worker] D projects/test_project_a/tables/tb_*: Drop
示例二:撤銷Policy授權(黑名單)
基于示例一,撤銷對用戶Tom的授權。
--Bob進入項目test_project_a。 use test_project_a; --收回用戶Tom綁定的角色Worker。 revoke Worker from RAM$Bob@aliyun.com:Tom; --查看用戶Tom的授權結果。權限列表無Drop權限信息。 show grants for RAM$Bob@aliyun.com:Tom;
示例三:基于角色為用戶授權(白名單)
允許Tom修改以
tb_
開頭的表的數據。命令示例如下。--Bob進入項目test_project_a。 use test_project_a; --創建角色Worker。 create role Worker; --將用戶Tom添加為項目成員。 add user RAM$Bob@aliyun.com:Tom; --將角色Worker綁定至用戶Tom。 grant Worker TO RAM$Bob@aliyun.com:Tom; --允許角色Worker修改項目test_project_a中以tb_開頭的表的數據。 grant Update on table tb_* to ROLE Worker privilegeproperties("policy" = "true", "allow"="true"); --查看用戶Tom的授權結果。 show grants for RAM$Bob@aliyun.com:Tom; --授權結果如下。A表示允許,可以更新以tb_開頭的表的數據。 Authorization Type: Policy [role/worker] A projects/test_project_a/tables/tb_*: Update
示例四:撤銷Policy授權(白名單)
基于示例三,撤銷對用戶Tom的授權。
--Bob進入項目test_project_a。 use test_project_a; --收回用戶Tom綁定的角色Worker。 revoke Worker from RAM$Bob@aliyun.com:Tom; --查看用戶Tom的授權結果。權限列表無Update權限信息。 show grants for RAM$Bob@aliyun.com:Tom;
示例五:為具備內置角色的用戶進行精細化授權
禁止Allen刪除項目test_project_a中的所有表。命令示例如下。
--Bob進入項目test_project_a。 use test_project_a; --創建角色Worker。 create role Worker; --將角色Worker綁定至用戶Allen。 grant Worker TO RAM$Bob@aliyun.com:Allen; --禁止角色Worker刪除項目test_project_a中的所有表。 grant Drop on table * to ROLE Worker privilegeproperties("policy" = "true", "allow"="false"); --查看用戶Allen的授權結果。 show grants for RAM$Bob@aliyun.com:Allen; --授權結果如下。禁止刪除所有表。 [roles] role_project_admin, worker Authorization Type: Policy [role/role_project_admin] A projects/test_project_a: * A projects/test_project_a/instances/*: * A projects/test_project_a/jobs/*: * A projects/test_project_a/offlinemodels/*: * A projects/test_project_a/packages/*: * A projects/test_project_a/registration/functions/*: * A projects/test_project_a/resources/*: * A projects/test_project_a/tables/*: * A projects/test_project_a/volumes/*: * [role/worker] A projects/test_project_a/tables/tb_*: Update D projects/test_project_a/tables/*: Drop Authorization Type: ObjectCreator AG projects/test_project_a/tables/local_test: All AG projects/test_project_a/tables/mr_multiinout_out1: All AG projects/test_project_a/tables/mr_multiinout_out2: All AG projects/test_project_a/tables/ramtest: All AG projects/test_project_a/tables/wc_in: All AG projects/test_project_a/tables/wc_in1: All AG projects/test_project_a/tables/wc_in2: All AG projects/test_project_a/tables/wc_out: All
示例六:為具備內置角色的用戶撤銷授權
基于示例五,撤銷對用戶Allen的授權。命令示例如下。
--Bob進入項目test_project_a。 use test_project_a; --收回用戶Allen綁定的角色Worker。 revoke Worker from RAM$Bob@aliyun.com:Allen; --查看用戶Allen的授權結果。權限列表無Drop權限信息。 show grants for RAM$Bob@aliyun.com:Allen;
為用戶授予角色
為用戶授予某個角色,用戶即可具備角色被賦予的權限。
使用限制。
在對用戶授予角色前,您需要先為角色授予項目空間對象的相關操作權限。詳情請參見為角色或用戶授權。
命令格式。
grant <role_name> to <user_name>;
參數說明。
role_name:必填。待授予的角色名稱。
user_name:必填。待授予角色的阿里云用戶或RAM用戶賬號信息。阿里云賬號格式為
ALIYUN$****@aliyun.com;
,RAM用戶賬號格式為RAM$****
。
使用示例。
--對阿里云用戶test_user@aliyun.com賦予角色player。 grant player to ALIYUN$test_user@aliyun.com;
為用戶或角色授予訪問Package的權限
在安裝Package的MaxCompute項目中為用戶或角色授予訪問Package的權限。
被安裝的Package是一種獨立的MaxCompute對象類型。如果要訪問Package里的資源,您必須擁有該Package的Read權限。如果請求者沒有Read權限,可以由項目所有者、具備Super_Administrator或Admin角色的用戶通過ACL權限控制方案完成授權。
命令格式
grant <actions> on package <project_name>.<package_name> to {USER|ROLE} <name>;
注意事項
授權后,用戶或角色僅在安裝Package的項目中有權限訪問Package中的資源。如果需要精細化管控Package的權限,請參見Package的權限控制。
參數說明
參數名稱
是否必填
說明
actions
是
指定對資源的操作權限。固定取值為Read。
project_name
是
指定Package所屬MaxCompute項目名稱。
您可以登錄MaxCompute控制臺,左上角切換地域后,即可在項目管理頁簽獲取具體的MaxCompute項目名稱。
package_name
是
指定Package的名稱。您可以通過
您可以通過MaxCompute客戶端執行
show packages;
命令獲取已創建的Package信息。name
是
指定被授權的用戶賬號或角色名稱。單次授權只能指定一個用戶或角色。
您可以通過MaxCompute客戶端執行
list users;
或list roles;
命令獲取用戶賬號或角色名稱。使用示例
假設Bella為隸屬于Amy@aliyun.com的RAM用戶,現需要為Bella授予Package的訪問權限。命令示例如下。
--允許Bella訪問Package。 grant Read on package test_project_a.datashare to user RAM$Amy@aliyun.com:Bella;
相關命令
CREATE PACKAGE:創建Package。
CREATE ROLE:在MaxCompute項目空間中創建角色。
REVOKE:撤銷對用戶或角色授予的訪問Package的權限。