云服务器ECS资源绑定标签后,您可以使用标签为资源做分类并控制访问。本文介绍如何通过标签控制RAM用户的权限,使不同的用户可以拥有不同云资源的访问和操作权限。
前提条件
已使用主账号创建一个RAM用户。具体操作,请参见创建RAM用户。
背景信息
标签可用于标识云资源,实现资源的分类管理;访问控制RAM可基于权限策略,管理用户身份,控制云资源的访问和操作权限。标签和RAM结合,将标签作为权限策略的匹配条件,可以实现云资源精细化权限管理。
基于标签控制RAM用户权限(即标签鉴权)的逻辑如下:
应用场景示例
本文操作步骤以下述场景为示例,说明如何使用标签鉴权。
不允许创建未绑定标签
costcenter:tony
的资源。仅允许在操作时带上请求标签
costcenter:tony
请求参数。不允许操作其他用户创建的资源未绑定标签
costcenter:tony
的资源。支持某些查询接口,同时可以查看您已绑定标签
costcenter:tony
的实例。不允许修改标签,防止标签被修改。
更多API接口标签鉴权说明,请参见API接口标签鉴权说明。
操作步骤
本步骤将使用阿里云账号(主账号)新建一个自定义策略UseTagAccessRes(规定了RAM用户需要指定标签costcenter:tony
后方可访问和操作ECS资源),并将自定义策略UseTagAccessRes授权给RAM用户userTest。
使用阿里云账号(主账号)RAM控制台。
创建自定义策略UseTagAccessRes。具体操作,请参见创建自定义权限策略。
如下示例中,您可以在策略(
Condition
)中为云资源设置多个标签条件来限制操作权限。支持的标签鉴权条件如下:标签鉴权条件
说明
acs:RequestTag
限制在请求中必须传入特定的标签。
如果API请求中没有标签参数,则不能使用
acs:RequestTag
,否则会导致鉴权失败。acs:ResourceTag
限制指定的资源必须包含特定的标签。
如果API请求中没有资源ID参数,则不能使用
acs:ResourceTag
,否则会导致鉴权失败。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:Run*", "ecs:Create*", "ecs:Purchase*", "ecs:DescribeInstances", "ecs:List*" ], "Resource": "*", "Condition": { "StringEquals": { "acs:RequestTag/costcenter": "tony" } } }, { "Effect": "Allow", "Action": "*", "Resource": "*", "Condition": { "StringEquals": { "acs:ResourceTag/costcenter": "tony" } } }, { "Effect": "Allow", "Action": [ "ecs:List*", "ecs:DescribeInstanceStatus", "ecs:DescribeInstanceVncUrl", "ecs:DescribeInstanceAutoRenewAttribute", "ecs:DescribeInstanceRamRole", "ecs:DescribeInstanceTypeFamilies", "ecs:DescribeInstanceTypes", "ecs:DescribeInstanceAttachmentAttributes", "ecs:DescribeInstancesFullStatus", "ecs:DescribeInstanceHistoryEvents", "ecs:DescribeInstanceMonitorData", "ecs:DescribeInstanceMaintenanceAttributes", "ecs:DescribeInstanceModificationPrice", "ecs:DescribeA*", "ecs:DescribeC*", "ecs:DescribeD*", "ecs:DescribeE*", "ecs:DescribeH*", "ecs:DescribeIm*", "ecs:DescribeInv*", "ecs:DescribeK*", "ecs:DescribeL*", "ecs:DescribeM*", "ecs:DescribeN*", "ecs:DescribeP*", "ecs:DescribeR*", "ecs:DescribeS*", "ecs:DescribeT*", "ecs:DescribeZ*", "vpc:DescribeVpcs", "vpc:DescribeVSwitches", "bss:PayOrder" ], "Resource": "*" }, { "Effect": "Deny", "Action": [ "ecs:RemoveTags", "ecs:UntagResources", "ecs:AddTags", "ecs:TagResources" ], "Resource": "*" } ] }
以上策略内容可以实现如下权限控制:
不允许创建未绑定标签
costcenter:tony
的资源。仅允许在操作时带上请求标签
costcenter:tony
请求参数。{ "Effect": "Allow", "Action": [ "ecs:Run*", "ecs:Create*", "ecs:Purchase*" ], "Resource": "*", "Condition": { "StringEquals": { "acs:RequestTag/costcenter": "tony" } } }
不允许操作其他用户创建的资源(未绑定标签
costcenter:tony
的资源)。{ "Effect": "Allow", "Action": "*", "Resource": "*", "Condition": { "StringEquals": { "acs:ResourceTag/costcenter": "tony" } } }
支持某些查询接口,同时可以查看您已绑定标签
costcenter:tony
的实例。{ "Effect": "Allow", "Action": [ "ecs:DescribeInstances", "ecs:List*" ], "Resource": "*", "Condition": { "StringEquals": { "acs:RequestTag/costcenter": "tony" } } }, { "Effect": "Allow", "Action": [ "ecs:List*", "ecs:DescribeInstanceStatus", "ecs:DescribeInstanceVncUrl", "ecs:DescribeInstanceAutoRenewAttribute", "ecs:DescribeInstanceRamRole", "ecs:DescribeInstanceTypeFamilies", "ecs:DescribeInstanceTypes", "ecs:DescribeInstanceAttachmentAttributes", "ecs:DescribeInstancesFullStatus", "ecs:DescribeInstanceHistoryEvents", "ecs:DescribeInstanceMonitorData", "ecs:DescribeInstanceMaintenanceAttributes", "ecs:DescribeInstanceModificationPrice", "ecs:DescribeA*", "ecs:DescribeC*", "ecs:DescribeD*", "ecs:DescribeE*", "ecs:DescribeH*", "ecs:DescribeIm*", "ecs:DescribeInv*", "ecs:DescribeK*", "ecs:DescribeL*", "ecs:DescribeM*", "ecs:DescribeN*", "ecs:DescribeP*", "ecs:DescribeR*", "ecs:DescribeS*", "ecs:DescribeT*", "ecs:DescribeZ*", "vpc:DescribeVpcs", "vpc:DescribeVSwitches", "bss:PayOrder" ], "Resource": "*" }
不允许修改标签,防止标签被修改。
{ "Effect": "Deny", "Action": [ "ecs:RemoveTags", "ecs:UntagResources", "ecs:AddTags", "ecs:TagResources" ], "Resource": "*" }
将自定义策略授权给您希望控制访问的RAM用户或组。具体操作,请参见为RAM角色授权。
本步骤中将自定义策略UseTagAccessRes授权给RAM用户userTest。
说明如果您将自定义策略UseTagAccessRes授权已存在的RAM用户,请注意RAM用户多个权限策略产生的权限问题。
执行结果
当授权RAM用户只能访问和操作已绑定标签costcenter:tony
的资源后,该RAM用户访问及操作各资源的结果如下:
创建ECS实例
创建已绑定标签
costcenter:tony
的ECS实例时,会创建成功。创建未绑定标签
costcenter:tony
的ECS实例时,会提示以下错误。
查看ECS实例
登录ECS管理控制台。
在左侧导航栏,选择
。选择地域后,实例列表为空。
指定标签
costcenter:tony
后,可以查看有权限的资源。
修改安全组
修改已绑定标签
costcenter:tony
的安全组时,会修改成功。修改未绑定标签
costcenter:tony
的安全组时,会提示如下错误。
修改标签
不允许修改标签,修改标签时会提示以下错误。