非项目空间Owner用户必须被加入MaxCompute项目空间中,并被授予相对应权限,才能操作MaxCompute中的数据、作业、资源及函数。本文将介绍项目空间Owner如何将其他用户(包括RAM子账号)加入和移出MaxCompute并授权。

如果您是项目空间Owner,建议您仔细阅读本文。如果您是普通用户,建议您向Owner提出申请,加入对应的项目空间后再阅读后续章节。

本文的操作均在安装并配置客户端运行。

添加用户

当项目空间的Owner Alice决定对另一个用户授权时,Alice需要先将该用户添加到自己的项目空间中来,只有添加到项目空间中的用户才能够被授权。

添加用户的命令如下。
add user
云账号的<username>既可以是在阿里云官网上注册过的有效邮箱地址,也可以是执行此命令的云账号的某个RAM子账号,命令如下。
add user ALIYUN$odps_test_user@aliyun.com;
add user RAM$ram_test_user;
假设Alice的云账号为alice@aliyun.com,那么当Alice执行上述两条语句后,通过list users;命令即可看到如下结果。
RAM$alice@aliyun.com:ram_test_user
ALIYUN$odps_test_user@aliyun.com

这表明云账号odps_test_user@aliyun.com以及Alice通过RAM创建的子账号ram_test_user已经被加入到了该项目空间中。

添加RAM子账号

添加RAM子账号有以下两种方式:
  • 通过DataWorks进行操作,详情请参见准备RAM用户
  • 通过MaxCompute户端执行add accountprovider ram;命令添加RAM子账号。
    odps@ odps_pd_inter>add accountprovider ram;
    OK
    项目空间Owner执行list accountproviders;命令查看该项目所支持的账号系统,确认RAM账号添加成功。
    odps@ ****>list accountproviders;
    说明
    • MaxCompute只允许主账号将自身的RAM子账号加入到项目空间中,不允许加入其它云账号的RAM子账号,因此在add user时,无需在RAM子账号前指定主账号名称,MaxCompute默认判定命令的执行者即是子账号对应的主账号。
    • MaxCompute只能够识别RAM的账号体系,不能识别RAM的权限体系。即用户可以将自身的任意RAM子账号加入MaxCompute的某一个项目中,但MaxCompute在对该RAM子账号做权限验证时,并不会考虑RAM中的权限定义。

用户授权

添加用户后,项目空间Owner或者项目空间管理员需要给该用户进行授权,只有用户获得权限后,才能在项目空间内执行操作。

MaxCompute提供了ACL授权,跨项目空间数据分享及项目空间数据保护等多种策略。下面列举两个常见场景,更多详情请参见ACL授权
  • 场景一:假设Jack是项目空间prj1的管理员,一个新加入的项目组成员Alice(已拥有云账号:alice@aliyun.com)申请加入项目空间prj1,并申请查看Table列表、提交作业和创建表的权限。
    项目空间的admin role或者该项目空间owner在客户端执行如下命令。
    --进入项目空间prj1 
    use prj1; 
    --添加用户 
    add user aliyun$alice@aliyun.com; 
    --使用grant语句对用户授权。
    grant List, CreateTable, CreateInstance on project prj1 to user aliyun$alice@aliyun.com; 
  • 场景二:假设用户云账号为bob@aliyun.com,已经被添加到某个项目空间($user_project_name),需要给它授予建表、获取表信息和执行的权限。
    项目空间的admin role或者该项目空间owner在客户端可以执行如下命令。
    --向 bob@aliyun.com 授予名为 “$user_project_name” 的project的CreateTable(创建表)权限。
    grant CreateTable on PROJECT $user_project_name to USER ALIYUN$bob@aliyun.com;
    --向bob@aliyun.com授予名为 “$user_table_name” 的Table的Describe(获取表信息)权限。  
    grant Describe on Table $user_table_name to USER ALIYUN$bob@aliyun.com;
    --向bob@aliyun.com授予名为 "$user_function_name" 的Function的Execute(执行)权限。 
    grant Execute on Function $user_function_name to USER ALIYUN$bob@aliyun.com;  

给RAM子账号授权

通过list accountproviders;来查看账号支持情况。
odps@ ****>list accountproviders;
ALIYUN, RAM
由上可见,这个项目空间已经能够支持RAM账号体系,即可以向这个项目空间添加 RAM子账号并授予某张表的Describe权限。
odps@ ****>add user ram$bob@aliyun.com:Alice;
OK: DisplayName=RAM$bob@aliyun.com:Alice
odps@ ****>grant Describe on table src to user ram$bob@aliyun.com:Alice;
OK
此时,bob@aliyun.com的RAM子账号Alice就可以通过自己的AccessKeyID及AccessKeySecret登录MaxCompute ,并对表src进行desc操作。
说明
  • 获取RAM子账号AccessKeyIDAccessKeySecret的相关操作请参见RAM 介绍
  • 更多MaxCompute添加/删除用户的操作请参见本文相关内容。
  • 更多有关授权的操作请参见授权

删除用户

当一个用户离开此项目团队时,Alice需要将该用户从项目空间中移除。用户一旦从项目空间中被移除,该用户将不再拥有任何访问项目空间资源的权限。

移除用户命令如下。
remove user;
说明
  • 当一个用户被移除后,该用户不再拥有访问该项目空间资源的任何权限。
  • 移除一个用户之前,如果该用户已被赋予某些角色,则需要先撤销该用户的所有角色。关于角色的介绍请参考角色管理
  • 当一个用户被移除后,与该用户有关的ACL授权仍然会被保留。一旦该用户以后被再添加到该项目空间时,该用户的历史的ACL授权访问权限将被重新激活。
  • MaxCompute目前不支持在项目空间中彻底移除一个用户及其所有权限数据。
Alice执行下述两条命令,即可移除相关用户。
remove user ALIYUN$odps_test_user@aliyun.com;
remove user RAM$ram_test_user;
执行如下命令查看用户是否移除。查看结果将不会看到这两个账号。此时,表明这两个账号已经被移出项目空间。
LIST USERS;

删除RAM子账号

同样,您也可以通过remove user命令删除自身的RAM子账号。
-- 回收子账号Alice权限
odps@ ****>revoke describe on table src from user ram$bob@aliyun.com:Alice;
OK
-- 删除子账号
odps@ ****>remove user ram$bob@aliyun.com:Alice;
Confirm to "remove user ram$bob@aliyun.com:Alice;" (yes/no)? yes
OK
如果您是项目空间的Owner,也可以通过remove accountprovider将RAM账号系统从当前项目中删除。
odps@ ****>remove accountprovider ram;
Confirm to "remove accountprovider ram;" (yes/no)? yes
OK
odps@ ****>list accountproviders;
ALIYUN