弹性伸缩对伸缩组进行分类管理并控制其访问权限,既可以精细地授权某个伸缩组权限,也可以对带有某个标签的伸缩组进行分组授权。本文为您介绍如何通过标签鉴权控制RAM用户的权限,实现不同用户能够拥有不同的访问和控制权限,提高管理效率,同时降低信息泄露风险。
背景信息
- 标签是云资源的标识,可以帮助您从不同维度对具有相同特征的云资源进行分类、搜索和聚合。更多信息,请参见标签概述。 
- 访问控制RAM可基于权限策略,管理用户身份,控制云资源的访问和操作。更多信息,请参见什么是访问控制。 
通过标签和访问控制RAM结合,并将标签作为权限策略的匹配条件,您可以实现对弹性伸缩的精细化管理。
基于标签控制RAM用户权限(即标签鉴权)的逻辑如下:
不支持标签鉴权的API接口说明
为某RAM用户授予标签鉴权的权限策略后,该RAM用户调用下列API接口时不支持使用标签鉴权管理弹性伸缩。
| 接口 | 不支持标签鉴权 | 
| DescribeRegions | 是 | 
| 定时任务未绑定伸缩组时: 
 | 是 | 
| 报警任务未绑定伸缩组时: 
 | 是 | 
示例场景说明
本文以下列场景作为示例,说明如何实现标签鉴权。
假如已创建2个伸缩组用于游戏开发时使用,且各伸缩组标签(Tag)包含环境和项目两个维度,即environment和team。您需要控制某RAM用户对下列伸缩组拥有不同的特定权限,伸缩组详情如下所示:
| 伸缩组 | 伸缩组名称 | 伸缩组的标签 | 
| 伸缩组1 | asg-001 | 
 | 
| 伸缩组2 | asg-002 | 
 | 
具体场景如下所示:
- 场景1:不允许创建不带标签的伸缩组,仅当创建时为伸缩组1绑定 - environment:test和- team:game1标签后,伸缩组1才可以创建成功。
- 场景2:查询伸缩组时,只允许查看伸缩组1(即绑定 - environment:test和- team:game1标签)资源。
- 场景3:只允许操作伸缩组1(即绑定 - environment:test和- team:game1标签)的资源功能,不允许操作伸缩组2(即绑定- environment:dev和- team:game2标签)资源。
操作步骤
操作前,请您确保已创建RAM用户。若未创建请您先创建RAM用户,具体操作,请参见创建RAM用户。
- 创建2个伸缩组。 
- 登录RAM控制台。 
- 创建自定义策略。 - 具体操作,请参见创建自定义权限策略。 - 您可以在策略( - Condition)中为云资源设置多个标签条件来限制对弹性伸缩资源的操作权限。支持的标签鉴权条件如下所示:- 标签鉴权条件 - 说明 - acs:RequestTag- 限制在请求中必须传入特定的标签。 - 如果API请求中没有标签参数,则不能使用 - acs:RequestTag,否则会导致鉴权失败。- acs:ResourceTag- 限制指定的资源必须包含特定的标签。 - 如果API请求中没有资源ID参数,则不能使用 - acs:ResourceTag,否则会导致鉴权失败。- 场景1:不允许创建不带标签的伸缩组1 - 即仅当创建时为伸缩组1绑定 - environment:test和- team:game1标签后,伸缩组1才可以创建成功。- 对应的自定权限策略如下所示: - { "Effect": "Allow", "Action": "ess:Create*", "Resource": "*", "Condition": { "StringEquals": { "acs:RequestTag/environment": "test", "acs:RequestTag/team": "game1" } } }
- 场景2:只允许查询绑定标签的伸缩组1 - 即伸缩组1绑定 - environment:test和- team:game1标签后,查询伸缩组时只能查询到伸缩组1的资源。- 对应的自定权限策略如下所示: - { "Effect": "Allow", "Action": "ess:Describle*", "Resource": "*", "Condition": { "StringEquals": { "acs:RequestTag/environment": "test", "acs:RequestTag/team": "game1" } } }
- 场景3:只允许操作伸缩组1,不允许操作伸缩组2 - 即伸缩组1绑定了 - environment:test和- team:game1标签,而伸缩组2绑定- environment:dev和- team:game2标签。- 对应的自定权限策略如下所示: - { "Version": "1", "Statement": [ { "Action": "ess:*", "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "acs:ResourceTag/environment": "test", "acs:ResourceTag/Team": "game1" } } }, { "Action": "ess:*", "Effect": "Deny", "Resource": "*", "Condition": { "StringEquals": { "acs:ResourceTag/environment": "dev", "acs:ResourceTag/team": "game2" } } }, { "Effect": "Allow", "Action": [ "ess:DescribeRegions", "ess:CreateScheduledTask", "ess:ModifyScheduledTask", "ess:DescribeScheduledTasks", "ess:DeleteScheduledTask", "ess:CreateAlarm", "ess:DescribeAlarms", "ess:ModifyAlarm", "ess:EnableAlarm", "ess:DeleteAlarm" ], "Resource": "*" } ] }
 
- 将自定义策略授权给您希望控制访问的RAM用户。 - 具体操作,请参见为RAM用户授权。 
- 验证权限策略是否生效。 - 创建伸缩组1验证场景1 - 伸缩组1已绑定标签 - environment:test和- team:game1),伸缩组1可成功创建。
- 没有设置标签或者设置了其他标签,则提示无权限创建。  
 
- 查询伸缩组验证场景2 - 指定查询伸缩组1(已绑定标签 - environment:test和- team:game1),但查询时未筛选标签选项,则可以查询到该伸缩组信息。
- 指定查询除伸缩组1外的某个未绑定标签 - environment:test和- team:game1的伸缩组,则查询结果为空。
- 没有指定具体某伸缩组,仅搜索 - environment:test和- team:game1标签,则查询出来所有带该标签的伸缩组。
 
- 删除伸缩组来验证场景3 - 删除的伸缩组1已绑定标签 - environment:test和- team:game1,则可以删除该伸缩组。
- 删除的伸缩组2未绑定标签 - environment:test和- team:game1或设置了其他标签,则提示无权限删除该伸缩组。 
 
 
相关文档
- 通过API方式创建、查看或删除伸缩组,更多信息,请参见CreateScalingGroup、DescribeScalingGroups或DeleteScalingGroup。 
- 通过API方式创建一个自定义权限策略,更多信息,请参见CreatePolicy - 创建一个权限策略。 
- 通过API方式为RAM用户授权,更多信息,请参见AttachPolicyToUser - 为指定用户添加权限。 
- 如果创建了多个伸缩组,您可以创建资源组对伸缩组进行分组管理,具体操作,请参见通过资源组精细化管理伸缩组。 
- 如果您需要通过资源鉴权的方式分权管理弹性伸缩,具体操作,请参见通过资源鉴权管理弹性伸缩。