MaxCompute支持通过Download权限控制方案,对角色或用户使用Tunnel下载表和实例的行为进行管控,提升项目数据安全性,避免出现数据泄露情况。本文为您介绍MaxCompute支持的Download授权命令,并提供授权示例供参考。
背景信息
在MaxCompute项目中,您可以通过Tunnel下载表和实例,但由于下载操作存在数据泄露安全风险,需要对该操作权限进行限制。
创建MaxCompute项目后,Download权限控制功能开关默认为关闭状态,表示不使用Download权限控制功能,即项目中的所有用户或角色对所有表或实例都有Download权限。项目所有者(Project owner)或具备Super_Administrator角色的用户可以在MaxCompute项目的Project级别,执行setproject odps.security.enabledownloadprivilege=true|false;
命令,开启或关闭Download权限控制功能。
Download权限控制适用于如下场景。
场景 | 说明 | 授权人 | 授权操作入口 |
为用户授权 | 为单个用户授予允许下载指定表数据或实例的权限。 | 请参见权限一览表的支持的授权人列。 | |
基于角色为用户授权 | 为单个角色,授予允许下载指定表数据或实例的权限,然后将角色绑定至多个用户,用户即可具备角色的权限。 |
前提条件
使用Download权限控制方案前,请您确认已记录好如下信息:
被授权人的账号或角色名称,且账号或角色已添加至MaxCompute项目。阿里云账号格式为
ALIYUN$阿里云账号
,RAM用户账号格式为RAM$归属阿里云账号:RAM用户名
。您可以通过MaxCompute客户端执行
list users;
或list roles;
命令获取账号或角色信息。授权对象类型及对象名称。
您可以通过MaxCompute客户端执行
show tables;
、list resources;
、list functions;
或show instances;
命令获取表或视图名称及实例名称。
使用限制
使用Download权限控制功能的使用限制如下:
只支持对已存在的对象、被授权人进行授权。
只支持将具体对象的Download权限授予用户,不支持通过通配符为用户授权。如果需要使用通配符,可以通过角色进行授权。
注意事项
使用Download权限控制功能的注意事项如下:
如果删除了对象,MaxCompute会自动撤销与该对象关联的所有Download授权信息。
当一个用户被移除后,与该用户有关的授权仍然会被保留。一旦该用户以后被再次添加到该项目时,该用户的历史授权访问权限将被重新激活。如果需要彻底清除用户的权限信息,请参见彻底清除被删除用户遗留的权限信息。
命令格式
Download权限控制命令格式如下:
Download授权
grant Download on <object_type> <object_name> to <subject_type> <subject_name>;
撤销Download授权
revoke Download on <object_type> <object_name> from <subject_type> <subject_name>;
参数说明如下。
参数名称 | 是否必填 | 说明 |
object_type | 是 | 指定被授予的对象类型,即客体。单次授权只能指定一个客体。 支持的客体取值如下:
|
object_name | 是 | 指定被授予的对象的名称。获取方式如下:
为角色授权时,授权对象支持以通配符星号(*)来表达。例如, |
subject_type | 是 | 指定被授权人的类型。
|
subject_name | 是 | 指定被授权的用户账号或角色名称。单次授权只能指定一个用户或角色。 您可以通过MaxCompute客户端执行 |
Download权限控制示例
假设username@example.com是test_project_a的项目所有者,Allen、Tom、Alice是隶属于username@example.com的RAM用户。test_project_a项目开启了Download权限控制功能。以MaxCompute客户端操作为例,授权示例如下:
示例一:为用户授予Download权限
将用户Allen添加至test_project_a项目,并授予下载sale_detail表数据权限。命令示例如下。
--Bob进入项目test_project_a。 use test_project_a; --将用户Allen添加为项目成员。 add user RAM$username@example.com:Allen; --支持用户Allen下载项目test_project_a中表sale_detail的数据。 grant Download on table sale_detail to USER RAM$username@example.com:Allen; --查看用户Allen的授权结果。 show grants for RAM$username@example.com:Allen; --授权结果如下。表明用户Allen已经具备Download权限。 Authorization Type: ACL [user/RAM$username@example.com:Allen] A projects/test_project_a/tables/sale_detail: Download
示例二:为用户撤销Download授权
基于示例一,撤销对用户Allen的授权。
--Bob进入项目test_project_a。 use test_project_a; --撤销用户Allen授权。 revoke Download on table sale_detail from USER RAM$username@example.com:Allen; --查看用户Allen的撤销授权结果。权限列表无Download信息。 show grants for RAM$username@example.com:Allen;
示例三:基于角色为多个用户授予Download权限
为Alice、Tom授予在项目test_project_a中下载以tb_开头的表数据权限。命令示例如下。
--Bob进入项目test_project_a。 use test_project_a; --将用户Alice、Tom添加为项目成员。 add user RAM$username@example.com:Alice; add user RAM$username@example.com:Tom; --创建角色Worker。 create role Worker; --为用户绑定角色Worker。 grant Worker TO RAM$username@example.com:Alice; grant Worker TO RAM$username@example.com:Tom; --支持角色Worker下载项目test_project_a中以tb_开头的表数据。 grant Download on table tb_* to ROLE Worker; --查看用户Alice的授权结果。 describe role Worker; --授权结果如下。A表示允许执行Download操作。 Authorization Type: Policy [role/worker] A projects/test_project_a/tables/tb_*: Download
示例四:为多个用户撤销基于角色授予的Download权限
基于示例三,撤销对用户Alice、Tom的授权。
--Bob进入项目test_project_a。 use test_project_a; --收回用户Alice、Tom绑定的角色Worker。 revoke Worker from RAM$username@example.com:Alice; revoke Worker from RAM$username@example.com:Tom; --查看用户Alice的撤销授权结果。权限列表无Download信息。 show grants for RAM$username@example.com:Alice;