MaxCompute权限

本文为您介绍MaxCompute支持的权限信息。

背景信息

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

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

权限要素

说明

主体(Subject)

被授予权限的用户或角色,即被授权人。

需要注意的是:

  • 被授权人必须已添加至MaxCompute项目中。

  • 使用阿里云账号执行授权操作时,支持为当前账号下的RAM用户和其他阿里云账号授权。

  • 使用RAM用户账号执行授权操作时,仅支持为隶属同一个阿里云账号的其他RAM用户授权,不支持为其他账号授权。

说明

授权人为执行授权操作的用户。授权人需要具备为目标客体和目标操作授权的能力,才可以执行授权操作。

客体(Object)

MaxCompute租户内的对象。

MaxCompute项目中的对象或行为。

  • 对象

    • 项目(Project):MaxCompute项目。

    • 表(Table):MaxCompute项目中的表或视图。

      在MaxCompute项目中,视图(View)是虚拟表,权限操作与表相同(若视图Owner缺失视图引用表的SELECT权限,则视图不可用)。

    • 函数(Function):MaxCompute项目中用户自定义的函数(MaxCompute UDF)。

    • 资源(Resource):MaxCompute项目中上传的资源,例如JAR包、ZIP包。

    • 实例(Instance):MaxCompute作业运行时生成的实例。

  • 行为

    • Tunnel下载:下载表、函数、资源或实例。

    • 列级别敏感数据:访问表或表的列级敏感数据。

    • Package:跨项目访问资源。

    • 管理类权限管控:对权限资源(Resource)执行某种操作(Action)。

操作(Action)

操作与客体类型有关,不同客体类型所支持的操作不相同。例如表的读、写、查操作。

租户内对象权限一览表

MaxCompute租户内对象的权限关系表如下。

客体(Object)

操作(Action)

说明

支持的授权人

支持的授权方案

Networklink

List

查看网络连接所有类型的对象列表。

  • 项目所有者(Project Owner)

  • 具备Super_Administrator或Admin角色的用户

为角色授权:Policy权限控制

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的所有权限。

    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角色的用户

    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的角色列表。

    角色管理

    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_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/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拒绝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/roles/resource/<role_name>

    清理过期权限

    清理过期权限。

    ClearExpiredGrants
    projects/<project_name>/authorization