本文為您介紹MaxCompute支持的權限信息。
背景信息
MaxCompute細化了項目(Project)、Quota、Networklink對象以及項目內的表(Table)、函數(Function)、資源(Resource)及實例(Instance)對象的操作,同時還支持對Tunnel下載、敏感數據訪問及跨項目訪問行為進行管控。在項目實際運行過程中,可以根據人員操作范疇進行精細化授權,為各對象安全提供可靠保障。
執行權限授權操作時,需要包含如下三個要素。
權限要素 | 說明 |
主體(Subject) | 被授予權限的用戶或角色,即被授權人。 需要注意的是:
說明 授權人為執行授權操作的用戶。授權人需要具備為目標客體和目標操作授權的能力,才可以執行授權操作。 |
客體(Object) | MaxCompute項目中的對象或行為。
|
操作(Action) | 操作與客體類型有關,不同客體類型所支持的操作不相同。例如表的讀、寫、查操作。 |
租戶內對象權限一覽表
MaxCompute租戶內對象的權限關系表如下。
客體(Object) | 操作(Action) | 說明 | 支持的授權人 | 支持的授權方案 |
Networklink | List | 查看網絡連接所有類型的對象列表。 |
| 為角色授權:Policy權限控制。 |
CreateNetworklink | 在租戶創建網絡連接對象(Networklink)。 | |||
Describe | 讀取網絡連接對象的元信息。 | |||
Drop | 刪除網絡連接對象。 | |||
All | 具備上述網絡連接對象的所有權限。 | |||
Quota | Usage | 使用Quota,主要對 |
|
項目及項目內對象權限一覽表
MaxCompute項目及項目內對象支持的權限列表如下:
對象
MaxCompute項目及項目內對象的權限關系表如下。
客體(Object)
操作(Action)
說明
支持的授權人
支持的授權方案
Project
Read
查看項目自身(不包括項目中的任何對象)的信息。
項目所有者(Project Owner)
暫未開放授權能力
Write
更新項目自身(不包括項目中的任何對象)的信息。
List
查看項目所有類型的對象列表。例如
show tables;
、show functions;
等。項目所有者(Project Owner)
具備Super_Administrator或Admin角色的用戶
為用戶或角色授權:ACL權限控制
為角色授權:Policy權限控制
CreateTable
在項目中創建表(Table)。例如
create table <table_name>...;
。CreateInstance
在項目中創建實例(Instance),即運行作業。
CreateFunction
在項目中創建自定義函數(Function)。例如
create function <function_name> ...;
。CreateResource
在項目中添加資源(Resource)。例如
add file|archive|py|jar <local_file>... ;
、add table <table_name> ...;
。All
具備上述Project的所有權限。
Table
Describe
讀取表的元數據信息,包含表結構、創建時間、修改時間、表數據大小等。例如
desc <table_name>;
。表所有者
項目所有者(Project Owner)
具備Super_Administrator角色的用戶
具備Admin角色的用戶(不支持修改表所有人)
Select
查看表的數據。例如
select * from <table_name>;
。Alter
修改表的元數據信息,包含修改表所有人、修改表名稱、修改列名、添加或刪除分區等。例如
alter table <table_name> add if not exists partition ...;
。Update
更新表數據。例如
insert into|overwrite table <table_name> ...;
、update <table_name> set ...;
、delete from <table_name> where ...;
。Drop
刪除表。例如
drop table <table_name>;
。ShowHistory
查看表的備份數據信息。例如
show history for table <table_name>;
。All
具備上述Table的所有權限。
Function
Read
讀取自定義函數(MaxCompute UDF)的程序文件。
函數所有者
項目所有者(Project Owner)
具備Super_Administrator或Admin角色的用戶
Write
更新自定義函數。
Delete
刪除自定義函數。例如
drop function <function_name>;
。Execute
調用自定義函數。例如
select <function_name> from ...;
。All
具備上述Function的所有權限。
Resource
Read
讀取資源。
資源所有者
項目所有者(Project Owner)
具備Super_Administrator或Admin角色的用戶
Write
更新資源。
Delete
刪除資源。例如
drop resource <resource_name>;
。All
具備上述Resource的所有權限。
External Volume
CreateVolume
創建External Volume。
External Volume所有者
項目所有者(Project Owner)
具備Super_Administrator或Admin角色的用戶
Read
讀取External Volume。
Write
更新External Volume。
Delete
刪除External Volume。例如
vfs -rm -r <volume_path>;
。All
具備上述External Volume的所有權限。
Instance
Read
讀取實例。
項目所有者(Project Owner)
具備Super_Administrator或Admin角色的用戶
Write
更新實例。
All
具備上述Instance的所有權限。
說明Project的CreateTable操作,Table的Select、Alter、Update和Drop操作需要與Project的CreateInstance操作權限配合使用。
如果您單獨使用Table的上述幾種權限,且沒有CreateInstance權限,則無法完成對應操作。例如,當您通過項目A查詢項目B的表時,需要具備項目A的CreateInstance權限和項目B的表Select權限。
行為
MaxCompute項目內對象的行為權限關系表如下。
客體(Object)
操作(Action)
說明
支持的授權人
支持的授權方案
Table、Function、Resource、Instance
Download
使用Tunnel下載表數據、資源、函數或實例。
項目所有者(Project Owner)
具備Super_Administrator角色的用戶
Label
不涉及
讀取列級敏感數據。
項目所有者(Project Owner)
具備Admin角色的用戶
Package
Read
將項目中的對象及允許的操作權限進行打包,生成Package,實現跨項目授權。
項目所有者(Project Owner)
具備Admin角色的用戶
項目管理類權限一覽表
MaxComopute管理類權限Action列表如下。
權限類別
Action列表
說明
Project安全配置
SetSecurityConfiguration
設置Project安全配置。
GetSecurityConfiguration
查看Project安全配置。
SetProperty
設置Project IP白名單。
Policy管理
PutPolicy
更新Policy。
GetPolicy
查看Policy。
AddPolicyStatments
添加PolicyStatments。
RemovePolicyStatments
移除PolicyStatments。
Account Provider管理
AddAccountProviders
添加Account Provider。
RemoveAccountProviders
移除Account Provider。
ListAccountProviders
列出Account Provider。
Trusted Projects管理
AddTrustedProjects
添加Trusted Projects。
RemoveTrustedProjects
移除Trusted Projects。
ListTrustedProjects
列出Trusted Projects。
Principal管理
AddUser
添加User。
RemoveUser
移除User。
ListUsers
列出User。
ListUserRoles
列出User的角色列表。
角色管理
CreateRole
創建角色。
DescribeRole
查看角色。
AlterRole
修改角色屬性。
DropRole
刪除角色。
ListRoles
列出角色。
角色授權
GrantRole
授予用戶角色。
RevokeRole
移除用戶角色。
ListRolePrincipals
查看角色用戶列表。
Package管理
CreatePackage
創建Package。
DescribePackage
查看Package。
DropPackage
刪除Package。
ShowPackages
列出Package。
InstallPackage
安裝Package。
UninstallPackage
卸載Package。
AllowInstallPackage
許可其他Projects使用Package。
DisallowInstallPackage
撤銷許可其他Projects使用Package。
AddPackageResource
向Package添加資源。
RemovePackageResource
向Package移除資源。
Label授權管控
GrantLabel
Label授權。
RevokeLabel
撤銷Label授權。
ShowLabelGrants
查看Label授權。
SetDataLabel
設置用戶、角色Label。
ACL授權管控
GrantPrivs
ACL授權。
RevokePrivs
撤銷ACL授權。
ShowAclGrants
查看ACL授權。
清理過期權限
ClearExpiredGrants
清理過期權限。
管理類權限Resource分類:
說明以下Resouce URI中省略
acs:odps:*:projects/<project_name>/
部分,只書寫<project_name>/
后面的部分。權限對象類別
Resouce URI
說明
Project安全配置
authorization/configurations/security_configuration
project security_configuration
authorization/configurations/policy
project policy
authorization/configurations/security_policy
project security_policy
authorization/configurations/protected_exception
project protected_exception
Project
authorization
項目空間的Account Provider、Trusted Projects等管理類。
Project Principal
authorization/users
project用戶。
Project 角色
authorization/roles/resource/<role_name>
project資源類角色。
authorization/roles/administrator/<role_name>
project管理類角色。
authorization/roles/super_administrator/super_administrator
project內置super_administrator角色。
Project 資源
authorization/objecttype/objectname
Table、Volume、Job等資源。
Package管理
authorization/packages/<projectname>.<packagename>
package類權限。
Package資源
authorization/packageresources/projectname.packagename/objecttype/objectname
package中資源。
使用說明:
對于用戶,因為涉及到用戶名,URI只支持指定到其類別,不支持指定到具體用戶。
對于角色,URI支持指定到具體某一角色。
為區分所有Package和所有Package中資源語意區別,前者URI中使用
packages/projectname.packagename
表達,后者使用packageresources/projectname.packagename/objecttype/objectname
表達。如此以來packages/*
表示所有Package,packageresources/*
表示Package中所有資源。
管理類權限點列表如下。
權限類別
權限點
Action
Resource
Project安全配置權限
設置安全配置。
SetSecurityConfiguration
projects/<project_name>/authorization/configurations/security_configuration
查看安全配置。
GetSecurityConfiguration
設置Policy。
PutPolicy
projects/<project_name>/authorization/configurations/policy
查看Policy。
GetPolicy
設置protected_exception。
PutPolicy
projects/<project_name>/authorization/configurations/protected_exception
查看protected_exception。
GetPolicy
設置security_policy。
PutPolicy
projects/<project_name>/authorization/configurations/security_policy
查看security_policy。
GetPolicy
Project Account Provider管理
添加Account Provider。
AddAccountProvider
projects/<project_name>/authorization
刪除Account Provider。
RemoveAccountProvider
列出Account Provider。
ListAccountProviders
Project Trusted Projects管理
添加Trusted Projects。
AddTrustedProjects
projects/<project_name>/authorization
刪除Trusted Projects。
RemoveTrustedProjects
列出Trusted Projects。
ListTrustedProjects
Project Principal管理
添加用戶。
AddUser
projects/<project_name>/authorization/users
刪除用戶。
RemoveUser
列出用戶。
ListUsers
列出用戶角色。
ListUserRoles
Project角色管理
添加資源類角色。
CreateRole
projects/<project_name>/authorization/roles/resource
查看資源類角色。
DescribeRole
projects/<project_name>/authorization/roles/resource/<role_name>
刪除資源類角色。
DropRole
添加管理類角色。
不涉及
說明只有Project Owner或者Super_Administrator可以創建管理類角色并對其進行賦權。
刪除管理類角色。
查看管理類角色。
DescribeRole
projects/<project_name>/authorization/roles/administrator/<role_name>
列出角色。
ListRoles
projects/<project_name>/authorization/roles
Project角色Policy管理
設置資源類角色Policy。
PutPolicy
projects/<project_name>/authorization/roles/resource/<role_name>
查看資源類角色Policy。
GetPolicy
增加資源類角色PolicyStatments。
AddPolicyStatments
projects/<project_name>/authorization/roles/resource/<role_name>
移除資源類角色PolicyStatments。
RemovePolicyStatments
設置管理類角色Policy。
不涉及
說明只有Project Owner或者Super_Administrator可以創建管理類角色并對其進行賦權。
查看管理類角色Policy。
GetPolicy
projects/<project_name>/authorization/roles/administrator/<role_name>
增加管理類角色PolicyStatments。
不涉及
說明只有Project Owner或者Super_Administrator可以創建管理類角色并對其進行賦權。
移除管理類角色PolicyStatments。
角色授權及查看
授予用戶資源類角色。
GrantRole
projects/<project_name>/authorization/roles/resource/<role_name>
移除用戶資源類角色。
RevokeRole
授予用戶管理類角色。
GrantRole
projects/<project_name>/authorization/roles/administrator/<role_name>
移除用戶管理類角色。
RevokeRole
授予用戶Super_Administrator角色。
不涉及
說明只有Project Owner或者Super_Administrator可以授予或移除用戶Super_Administrator角色。
移除用戶Super_Administrator角色。
查看資源類角色用戶列表。
ListRolePrincipals
projects/<project_name>/authorization/roles/resource/<role_name>
查看管理類角色用戶列表。
ListRolePrincipals
projects/<project_name>/authorization/roles/administrator/<role_name>
查看Super_Administrator角色用戶列表。
ListRolePrincipals
projects/<project_name>/authorization/roles/super_administrator/super_administrator
查看用戶的角色列表。
ListPrincipalRoles
projects/<project_name>/authorization/principals/users
Package管理
創建Package。
CreatePackage
projects/<project_name>/authorization/packages
列出Packages。
ShowPackages
查看Package。
DescribePackage
projects/<project_name>/authorization/packages/<package_creater_project_name>.<package_name>
刪除Package。
DropPackage
安裝Package。
InstallPackage
projects/<project_name>/authorization/packages/<package_creater_project_name>.<package_name>
卸載Package。
UninstallPackage
許可其他Projects使用Package。
AllowInstallPackage
projects/<project_name>/authorization/packages/<package_creater_project_name>.<package_name>
撤銷許可其他Projects使用Package。
DisallowInstallPackage
向Package添加資源。
AddPackageResource
projects/<project_name>/authorization/packages/<package_creater_project_name>.<package_name>
移除Package中資源。
RemovePackageResource
Label權限管控
Project內資源Label授權。
GrantLabel
projects/<project_name>/authorization/label/<resource_relative_id>
說明resource_relative_id
表示Project內資源路徑,例如名稱為table_1
的resource_relative_id
為tables/table_1
。支持資源通配符。例如
tables/*
表示Project內所有表。
Project內資源Label權限撤銷。
RevokeLabel
Project內資源Label權限查看。
ShowLabelGrants
Package資源Label授權。
GrantLabel
projects/<project_name>/authorization/packageresources/<package_creater_project_name>.<package_name>/<resource_relative_id>
Package內資源Label權限撤銷。
RevokeLabel
Package內資源Label權限查看。
ShowLabelGrants
查看用戶Label授權。
ShowLabelGrants
projects/<project_name>/authorization/users
查看角色Label授權。
ShowLabelGrants
projects/<project_name>/authorization/roles/resource/<role_name>
說明不支持對管理類角色進行Label授權、設置或者查看。
設置用戶、角色Label
設置用戶Label。
SetDataLabel
projects/<project_name>/authorization/users
設置角色Label。
SetDataLabel
projects/<project_name>/authorization/roles/resource/<role_name>
ACL權限管控
Project內資源ACL授權。
GrantPrivs
projects/<project_name>/authorization/<resource_relative_id>
說明支持對ACL授權的
actions
進行管控。Policy中支持
StringIntersectSetEmpty(IgnoreCase)/StringIntersectSetNotEmpty(IgnoreCase)/StringSubSet(IgnoreCase)/StringNotSubSet(IgnoreCase)
字符串集合類運算。可以在Policy中使用上述運算符對Actions集合進行約束(使用acs:Privileges
條件關鍵字)。例如以下Policy拒絕o
dpsxxxx@aliyun.com
對prj1
中所有表包含Download
或者Select
權限的ACL授權操作:{ "Action":[ "odps:GrantPrivs"], "Effect":"Deny", "Principal":"aliyun$odpsxxxx@aliyun.com", "Resource":"acs:odps::projects/prj1/authorization/acl/tables/*", "Condition":{ "IntersectionSetNotNull":{ "acs:Privileges":["Download","Select"] } } }
Project自身的
resource_relative_id
為projects/<project_name>
。
撤銷Project內資源ACL授權。
RevokePrivs
查看Project內資源ACL授權。
ShowAclGrants
Package資源ACL授權。
GrantPrivs
projects/<project_name>/authorization/packageresources/<package_creater_project_name>.<package_name>/<resource_relative_id>
撤銷Package資源ACL授權。
RevokePrivs
查看Package資源ACL授權。
ShowAclGrants
查看用戶ACL授權。
ShowAclGrants
projects/<project_name>/authorization/users
查看資源類角色ACL授權。
ShowAclGrants
projects/<project_name>/authorization/roles/resource/<role_name>
清理過期權限
清理過期權限。
ClearExpiredGrants
projects/<project_name>/authorization