MaxCompute支持通过Policy权限控制方案,允许或禁止角色对指定对象执行指定操作,将角色绑定至用户后,用户权限即可生效。本文为您介绍MaxCompute支持的Policy授权命令,并提供授权示例供参考。
背景信息
Policy权限控制支持白名单授权机制,即允许(Allow:白名单)角色对指定对象执行指定操作。
该授权方式可以弥补ACL授权机制无法解决的授权问题。例如用户已经被赋予了开发角色,默认具备删除表的权限,但如果需要禁止用户执行删除表操作,可以通过Policy方式进行授权。
创建MaxCompute项目后,Policy权限控制功能开关默认为打开状态。项目所有者(Project Owner)可以在MaxCompute项目中执行set CheckPermissionUsingPolicy=true|false;
命令,开启或关闭Policy权限控制功能。
Policy权限控制适用于如下场景。
场景 | 说明 | 授权人 | 授权操作入口 |
---|---|---|---|
基于角色为用户授权 | 直接为单个角色,授予允许或禁止角色对指定对象执行单个或多个操作的权限,然后再将角色绑定至多个用户,用户即可具备角色的权限。 | 请参见权限一览表的支持的授权人列。 | |
为被赋予内置角色的用户通过自定义角色进行精细化授权 | 当用户已经被赋予内置角色时,如果需要对用户的操作权限进行更精细化的管理,无法通过ACL权限控制方案解决此类授权问题。此时,您可以通过Policy权限控制方案,新增角色,允许或禁止角色操作项目中的对象,并将角色绑定至用户后,即可实现精细化管控用户权限。 |
前提条件
- 被授权角色的名称,且角色已添加至MaxCompute项目。
您可以通过MaxCompute客户端执行
list roles;
命令获取角色信息。如果需要新增角色,请参见角色规划。
- 授权对象类型、对象名称及操作。
更多对象类型及操作信息,请参见MaxCompute权限。
使用限制
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>"]);
- 撤销Policy授权
revoke <actions> on <object_type> <object_name> from ROLE <role_name> privilegeproperties ("policy" = "true", "allow"="{true|false}");
参数名称 | 是否必填 | 说明 | |
---|---|---|---|
actions | 是 | 指定被授予的操作权限名称。单次授权可以指定多个操作。
当有多个操作时,多个操作名称之间使用英文逗号(,)分隔。操作取值请参见MaxCompute权限。 |
|
object_type | 是 | 指定被授予的对象类型,即客体。单次授权只能指定一个客体。
客体取值请参见MaxCompute权限。 |
|
object_name | 是 | 指定被授予的对象的名称。获取方式如下:
授权对象支持以通配符星号(*)来表达。例如,
table taobao* 表示所有以taobao 开头的表。
说明 授权给ROLE支持使用通配符星号(*);授权给USER不支持使用通配符。
|
|
role_name | 是 | 指定被授权的角色名称。单次授权只能指定一个角色。
您可以通过MaxCompute客户端执行 |
|
privilegeproperties | policy | 是 | 固定取值为true。表示使用Policy权限控制方案。 |
allow | 白名单授权必填 | 指定白名单授权机制。取值范围如下:
|
|
conditions | 否 | 从请求消息来源及访问方式等维度进行权限控制。详细参数取值请参见Conditions。 | |
days | 否 | 指定权限过期时间,单位为天。未指定该参数时,权限默认长期有效。指定该参数时,权限到期后,MaxCompute会自动清除权限信息。 |
Policy权限控制示例
- 示例一:基于角色为用户授权(黑名单)
禁止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;