用户被赋予MaxCompute内置的角色后,会具备内置角色相应的权限,例如用户被赋予开发角色则具备表、资源等的操作权限。但实际业务场景中,需要对此类用户的操作权限进行更精细化的管理,例如不允许删除重要表。本文基于案例为您介绍如何通过Policy对具备内置角色权限的用户进行权限管理。
前提条件
已安装MaxCompute客户端。更多安装MaxCompute客户端操作,请参见安装并配置MaxCompute客户端。
背景信息
当用户已经被赋予内置角色,且需要对用户的权限进行更精细化管理时,推荐您使用Policy权限管控机制,来解决ACL权限管控机制无法精细化管理此类权限的问题。
Policy权限管控机制是一种基于角色的权限管理方式,允许或禁止角色操作(例如读、写)项目中的对象(例如表),将角色赋予用户后,即可管控用户权限。更多Policy授权或撤销授权语法信息,请参见Policy权限管控。
Policy授权
假设RAM用户Alice已具备MaxCompute项目的开发角色,现需要禁止Alice删除以tb_开头的所有表。Alice账号名为Alice,所属阿里云账号为Bob@aliyun.com。
Policy授权操作需要由项目所有者、具备Super_Administrator或Admin角色的用户执行。Policy授权操作流程如下:
- 登录MaxCompute客户端。
- 执行
create role
命令创建角色delete_test。命令示例如下。create role delete_test;
更多创建角色信息,请参见创建角色。
- 基于Policy权限管控机制,执行
grant
命令为角色delete_test授权,禁止删除以tb_开头的所有表。命令示例如下。grant drop on table tb_* to role delete_test privilegeproperties("policy" = "true", "allow"="false");
更多Policy授权语法格式信息,请参见Policy授权(Grant)。
- 执行
grant
命令将delete_test角色赋予Alice。命令示例如下。grant delete_test to ram$bob@aliyun.com:Alice;
如果不清楚账号名称,可以在MaxCompute客户端执行
list users;
命令获取。更多将角色赋予用户信息,请参见使用角色为用户授权。 - 执行
show grants
命令查看Alice的权限信息。命令示例如下。show grants for ram$bob@aliyun.com:Alice;
返回结果如下。
[roles] role_project_admin, delete_test --Alice已被赋予delete_test角色。 Authorization Type: Policy --授权方式为Policy。 [role/delete_test] D projects/mcproject_name/tables/tb_*: Drop --不允许(D表示Deny)删除项目中以tb_开头的所有表。 [role/role_project_admin] A projects/mcproject_name: * A projects/mcproject_name/instances/*: * A projects/mcproject_name/jobs/*: * A projects/mcproject_name/offlinemodels/*: * A projects/mcproject_name/packages/*: * A projects/mcproject_name/registration/functions/*: * A projects/mcproject_name/resources/*: * A projects/mcproject_name/tables/*: * A projects/mcproject_name/volumes/*: * Authorization Type: ObjectCreator AG projects/mcproject_name/tables/local_test: All AG projects/mcproject_name/tables/mr_multiinout_out1: All AG projects/mcproject_name/tables/mr_multiinout_out2: All AG projects/mcproject_name/tables/ramtest: All AG projects/mcproject_name/tables/wc_in: All AG projects/mcproject_name/tables/wc_in1: All AG projects/mcproject_name/tables/wc_in2: All AG projects/mcproject_name/tables/wc_out: All
更多查看用户权限信息,请参见查看用户的权限。
- 以Alice身份登录MaxCompute客户端,执行
drop table
命令尝试删除以tb_开头的表。命令示例如下。drop table tb_test;
返回结果如下。表明权限控制生效。如果删除成功,表明权限控制不生效,请仔细确认是否已经正确执行上述步骤。
FAILED: Catalog Service Failed, ErrorCode: 50, Error Message: ODPS-0130013:Authorization exception - Authorization Failed [4011], You have NO privilege 'odps:Drop' on {acs:odps:*:projects/mcproject_name/tables/tb_test}. Explicitly denied by policy. Context ID:85efa8e9-40da-4660-bbfd-b503dfa64c0a. --->Tips: Pricipal:RAM$bob@aliyun.com:Alice; Deny by policy
撤销Policy授权
基于Policy授权中的案例,假设以tb_开头的所有表在实际业务中已不再需要,允许Alice执行删除操作。
撤销Policy授权操作需要由项目所有者、具备Super_Administrator或Admin角色的用户执行。撤销Policy授权方式如下:
- 撤销为角色授予的权限,保留角色
操作流程如下:
- 登录MaxCompute客户端。
- 基于Policy权限管控机制,执行
revoke
命令撤销Policy授权,允许delete_test角色删除以tb_开头的所有表。
命令示例如下。revoke drop on table tb_* from role delete_test privilegeproperties("policy" = "true", "allow"="false");
更多撤销Policy授权语法格式信息,请参见撤销Policy授权(Revoke)。
- 执行
show grants
命令查看Alice的权限信息。命令示例如下。show grants for ram$bob@aliyun.com:Alice;
返回结果如下。
[roles] role_project_admin, delete_test --保留delete_test角色。 Authorization Type: Policy --Policy授权信息已撤销。 [role/role_project_admin] A projects/mcproject_name: * A projects/mcproject_name/instances/*: * A projects/mcproject_name/jobs/*: * A projects/mcproject_name/offlinemodels/*: * A projects/mcproject_name/packages/*: * A projects/mcproject_name/registration/functions/*: * A projects/mcproject_name/resources/*: * A projects/mcproject_name/tables/*: * A projects/mcproject_name/volumes/*: * Authorization Type: ObjectCreator AG projects/mcproject_name/tables/local_test: All AG projects/mcproject_name/tables/mr_multiinout_out1: All AG projects/mcproject_name/tables/mr_multiinout_out2: All AG projects/mcproject_name/tables/ramtest: All AG projects/mcproject_name/tables/tb_test: All AG projects/mcproject_name/tables/wc_in: All AG projects/mcproject_name/tables/wc_in1: All AG projects/mcproject_name/tables/wc_in2: All AG projects/mcproject_name/tables/wc_out: All
更多查看用户权限信息,请参见查看用户的权限。
- 以Alice身份登录MaxCompute客户端,执行
drop table
命令尝试删除以tb_开头的表。命令示例如下。
drop table tb_test;
返回OK,表明撤销Policy授权成功。
- 收回赋予用户的角色,如果不再需要角色,可删除角色
操作流程如下:
- 登录MaxCompute客户端。
- 执行
revoke
命令收回授予Alice的delete_test角色。
命令示例如下。revoke delete_test from ram$bob@aliyun.com:Alice;
更多收回赋予用户的角色信息,请参见收回授予用户的角色。
- 执行
show grants
命令查看Alice的权限信息。命令示例如下。show grants for ram$bob@aliyun.com:Alice;
返回结果如下。
[roles] role_project_admin --已删除delete_test角色。 Authorization Type: Policy [role/role_project_admin] A projects/mcproject_name: * A projects/mcproject_name/instances/*: * A projects/mcproject_name/jobs/*: * A projects/mcproject_name/offlinemodels/*: * A projects/mcproject_name/packages/*: * A projects/mcproject_name/registration/functions/*: * A projects/mcproject_name/resources/*: * A projects/mcproject_name/tables/*: * A projects/mcproject_name/volumes/*: * Authorization Type: ObjectCreator AG projects/mcproject_name/tables/local_test: All AG projects/mcproject_name/tables/mr_multiinout_out1: All AG projects/mcproject_name/tables/mr_multiinout_out2: All AG projects/mcproject_name/tables/ramtest: All AG projects/mcproject_name/tables/wc_in: All AG projects/mcproject_name/tables/wc_in1: All AG projects/mcproject_name/tables/wc_in2: All AG projects/mcproject_name/tables/wc_out: All
- 以Alice身份登录MaxCompute客户端,执行
drop table
命令尝试删除以tb_开头的表。命令示例如下。
drop table tb_test;
返回OK,表明撤销Policy授权成功。
- (可选)执行
drop role
命令删除delete_test角色。
命令示例如下。drop role delete_test;
返回OK,表明角色删除成功。更多删除角色信息,请参见删除角色。
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
转转请注明出处:https://www.yunxiaoer.com/157674.html