本文介绍如何基于标签控制RAM用户权限,实现不同的用户可以拥有不同云资源的访问和操作权限。
背景信息
标签可用于标识云资源,实现分类管理资源;访问控制RAM可基于权限策略,控制云资源的访问和操作权限。结合标签和RAM,将标签作为权限策略的匹配条件,可以实现云资源精细化权限管理。
基于标签控制RAM用户权限(即标签鉴权)的逻辑如下:
支持绑定标签的ECI资源包括ECI实例、镜像缓存和虚拟节点;仅支持在创建或者更新ECI资源时为其绑定标签。更多信息,请参见使用标签管理ECI实例。
配置示例
示例场景说明
本文以下述场景作为示例,说明如何实现标签鉴权。
假设您需要控制某一RAM用户只能操作特定(假设绑定了env:test
标签)的ECI资源,如下图:
具体需求包括:
需求1:不允许创建不带标签的ECI资源,仅当创建时为ECI资源绑定
env:test
标签才可以创建成功。需求2:只允许操作自身创建(即绑定
env:test
标签)的ECI资源,不允许操作其他ECI资源。需求3:查询ECI资源时,只允许查看自身创建(即绑定
env:test
标签)的ECI资源。
步骤一:配置自定义权限策略并授权
使用阿里云账号登录RAM控制台。
在左侧导航栏选择权限管理>权限策略。
在权限策略页面,单击创建权限策略。
完成自定义策略配置。
单击导入策略页签。
在弹出的对话框的右侧筛选项中选择系统策略,然后搜索并选中AliyunECIFullAccess,单击导入。
AliyunECIFullAccess为系统默认的管理ECI资源的权限,包括操作ECI资源、查询相关资源(安全组、VPC等资源)、创建ECI服务关联角色等权限。
单击脚本编辑页签。
在编辑框中修改权限策略内容,然后单击继续编辑基本信息。
在权限策略的
Condition
中,您可以增加需要匹配标签的条件来限制操作权限。支持的标签条件关键字如下:标签条件关键字
说明
acs:RequestTag
限制在请求中必须传入特定的标签。
如果API请求中没有标签参数,则不能使用
acs:RequestTag
,否则会导致鉴权失败。acs:ResourceTag
限制指定的资源必须包含特定的标签。
如果API请求中没有资源ID参数,则不能使用
acs:ResourceTag
,否则会导致鉴权失败。说明设计权限策略时,您可以根据各操作接口特性(API请求是否需要指定资源ID、是否支持传入标签),结合实际业务需求,来设置
acs:RequestTag
或acs:ResourceTag
。更多信息,请参见API接口鉴权说明。根据示例场景中的需求,设计权限策略如下:
需求
权限策略
不允许创建不带标签的ECI资源,仅当创建时为ECI资源绑定
env:test
标签才可以创建成功{ "Effect": "Allow", "Action": "eci:Create*", "Resource": "*", "Condition": { "StringEquals": { "acs:RequestTag/env": "test" } } }
只允许操作绑定了env:test标签的ECI资源,不允许操作其他资源
{ "Effect": "Allow", "Action": "eci:*", "Resource": "*", "Condition": { "StringEquals": { "acs:ResourceTag/env": "test" } } }
查询ECI资源时,只允许查看绑定了env:test标签的ECI资源。
{ "Effect": "Allow", "Action": "eci:Describe*", "Resource": "*", "Condition": { "StringEquals": { "acs:RequestTag/env": "test" } } }
结合AliyunECIFullAccess已有的权限策略,完整权限策略示例如下:
{ "Version": "1", "Statement": [{ "Effect": "Allow", "Action": "eci:Create*", "Resource": "*", "Condition": { "StringEquals": { "acs:RequestTag/env": "test" } } }, { "Effect": "Allow", "Action": "eci:*", "Resource": "*", "Condition": { "StringEquals": { "acs:ResourceTag/env": "test" } } }, { "Effect": "Allow", "Action": "eci:Describe*", "Resource": "*", "Condition": { "StringEquals": { "acs:RequestTag/env": "test" } } }, { "Action": [ "ecs:DescribeSecurityGroups" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "vpc:DescribeVSwitches", "vpc:DescribeVpcs", "vpc:DescribeEipAddresses" ], "Resource": "*", "Effect": "Allow" }, { "Action": "ram:CreateServiceLinkedRole", "Resource": "*", "Effect": "Allow", "Condition": { "StringEquals": { "ram:ServiceName": [ "eci.aliyuncs.com", "vnode.eci.aliyuncs.com" ] } } } ] }
说明如果您通过OpenAPI操作ECI资源,则使用AliyunECIFullAccess的权限即可;如果您通过ECI控制台操作ECI资源,则除了AliyunECIFullAccess的权限外,还需添加额外权限。更多信息,请参见为RAM用户授权。
输入权限策略名称,单击确定。
将自定义权限策略授予RAM用户。
步骤二:验证权限策略是否生效
使用RAM用户登录OpenAPI平台。
测试权限策略是否生效。
以ECI实例为例进行测试:
创建ECI实例
设置了
env:test
标签,则可以创建。没有设置标签或者设置了其他标签,则无法创建,提示没有权限。
删除ECI实例
删除的实例绑定了
env:test
标签,则可以删除。删除的实例没有绑定
env:test
标签,则无法删除,提示没有权限。
查询ECI实例
指定实例(该实例绑定了
env:test
标签)但没有设置标签,则查询出指定实例的信息。指定实例(该实例没有绑定
env:test
标签),则查询结果为空。没有指定实例,仅设置
env:test
标签,则查询出带有env:test
标签的所有实例信息。没有指定实例也没有设置标签,则查询结果为空。
API接口鉴权说明
为某一RAM用户授予含有标签鉴权的权限策略后,该RAM用户调用各API接口时的鉴权情况如下表所示:
接口 | 鉴权说明 |
CreateContainerGroup、CreateImageCache等创建接口 | 该类接口无需指定资源ID,则匹配
|
DescribeContainerGroups、DescribeImageCaches等查询接口 | 该类接口按需指定资源ID或传入标签,则匹配
说明 查询接口在鉴权不通过时,返回结果为空,并不会报错。 |
UpdateContainerGroup、UpdateImageCache等更新接口 | 该类接口必须指定资源ID,则匹配
说明 更新标签时,RAM用户需要分别具有更新前后的标签权限。即授权时,需要授予用户两个自定义权限策略,分别包含更新前后的标签条件限制。 |
RestartContainerGroup、ExecContainerCommand等其他操作接口 | 该类接口必须指定资源ID,则匹配
|