弹性伸缩对伸缩组进行分类管理并控制其访问权限,既可以精细地授权某个伸缩组权限,也可以对带有某个标签的伸缩组进行分组授权。本文为您介绍如何通过标签鉴权控制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 - 为指定用户添加权限。
如果创建了多个伸缩组,您可以创建资源组对伸缩组进行分组管理,具体操作,请参见通过资源组精细化管理伸缩组。
如果您需要通过资源鉴权的方式分权管理弹性伸缩,具体操作,请参见通过资源鉴权管理弹性伸缩。