MaxCompute细化了项目(Project)、Quota、Networklink对象以及项目内的表(Table)、函数(Function)、资源(Resource)及实例(Instance)对象的操作,同时还支持对Tunnel下载、敏感数据访问及跨项目访问行为进行管控。在项目实际运行过程中,可以根据人员操作范畴进行精细化授权,为各对象安全提供可靠保障。本文为您介绍MaxCompute支持的权限信息。

背景信息

执行权限授权操作时,需要包含如下三个要素。

权限要素 说明
主体(Subject) 被授予权限的用户或角色,即被授权人。
需要注意的是:
  • 被授权人必须已添加至MaxCompute项目中。
  • 使用阿里云账号执行授权操作时,支持为当前账号下的RAM用户和其他阿里云账号授权。
  • 使用RAM用户账号执行授权操作时,仅支持为隶属同一个阿里云账号的其他RAM用户授权,不支持为其他账号授权。
说明 授权人为执行授权操作的用户。授权人需要具备为目标客体和目标操作授权的能力,才可以执行授权操作。
客体(Object)
MaxCompute租户内的对象。
MaxCompute项目中的对象或行为。
操作(Action) 操作与客体类型有关,不同客体类型所支持的操作不相同。例如表的读、写、查操作。

租户内对象权限一览表

MaxCompute租户内对象的权限关系表如下。
客体(Object) 操作(Action) 说明 支持的授权人 支持的授权方案
Networklink List 查看网络连接所有类型的对象列表。
  • 项目所有者(Project Owner)
  • 具备Super_Administrator或Admin角色的用户
CreateNetworklink 在租户创建网络连接对象(Networklink)。
Describe 读取网络连接对象的元信息。
Drop 删除网络连接对象。
All 具备上述网络连接对象的所有权限。
Quota Usage 使用Quota,主要对use quota功能进行鉴权。
  • 项目所有者(Project Owner)
  • 具备Super_Administrator或Admin角色的用户

项目及项目内对象权限一览表

MaxCompute项目及项目内对象支持的权限列表如下:
  • 对象

    MaxCompute项目及项目内对象的权限关系表如下。

    客体(Object) 操作(Action) 说明 支持的授权人 支持的授权方案
    Project Read 查看项目自身(不包括项目中的任何对象)的信息。 项目所有者(Project Owner) 暂未开放授权能力
    Write 更新项目自身(不包括项目中的任何对象)的信息。
    List 查看项目所有类型的对象列表。例如show tables;show functions;等。
    • 项目所有者(Project Owner)
    • 具备Super_Administrator或Admin角色的用户
    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的所有权限。
    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角色的用户
    Download权限控制
    Label 不涉及 读取列级敏感数据。
    • 项目所有者(Project Owner)
    • 具备Admin角色的用户
    Label权限控制
    Package Read 将项目中的对象及允许的操作权限进行打包,生成Package,实现跨项目授权。
    • 项目所有者(Project Owner)
    • 具备Admin角色的用户
    基于Package跨项目访问资源

项目管理类权限一览表

  • 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的角色列表。
    AddGroup 添加Group。
    RemoveGroup 移除Group。
    ListGroups 列出Groups。
    ListGroupRoles 列出Group的角色列表。
    角色管理 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用户。
    authorization/groups 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资源 uthorization/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
    添加用户组。
    AddGroup
    projects/<project_name>/authorization/principals/groups
    删除用户组。
    RemoveGroup
    列出用户组。
    ListGroups
    列出用户组角色。
    ListGroupRoles
    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_1resource_relative_idtables/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/groups
    查看角色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/groups
    设置角色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拒绝odpsxxxx@aliyun.comprj1中所有表包含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_idprojects/<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/groups
    查看资源类角色ACL授权。
    ShowAclGrants
    projects/<project_name>/authorization/roles/resource/<role_name>
    清理过期权限 清理过期权限。
    ClearExpiredGrants
    projects/<project_name>/authorization