本文为您介绍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