使用标签鉴权精细化管理弹性伸缩
背景
通过标签和访问控制IAM结合,并将标签作为权限策略的匹配条件,您可以实现对弹性伸缩的精细化管理。
- 标签是云资源的标识,可以帮助您从不同维度对具有相同特征的云资源进行分类、搜索和聚合。
- IAM提供权限管理能力,可基于权限策略,管理用户身份,控制云资源的访问和操作。更多信息,请参见什么IAM。
本文为您介绍如何通过标签鉴权控制IAM用户的权限,实现不同用户能够拥有不同的访问和控制权限,提高管理效率,同时降低信息泄露风险。
示例场景
假设已创建2个伸缩组,且各伸缩组标签(Tag)包含项目维度,即team,详情如下:
伸缩组 |
伸缩组名称 |
伸缩组标签 |
---|---|---|
伸缩组1 |
asg-001 |
标签:team:game1,其中标签键为team,标签值为game1。 |
伸缩组2 |
asg-002 |
标签:team:game2,其中标签键为team,标签值为game2。 |
您可以通过标签鉴权方式控制某IAM用户对以上伸缩组拥有不同的特定权限,示例场景如下:
- 场景一:不允许创建不带标签的伸缩组1。创建伸缩组1时须为伸缩组1绑定team:game1标签后,才可以创建成功。
- 场景二:只允许查询绑定team:game1标签的伸缩组1。
- 场景三:只允许操作伸缩组1,不允许操作伸缩组2。伸缩组1绑定了team:game1标签,伸缩组2绑定了team:game2标签,只允许操作绑定team:game1标签的伸缩组功能,不允许操作绑定team:game2标签的伸缩组功能。
操作步骤

操作前请您确保已创建IAM用户且赋予ECS、VPC、IMS的只读权限。若未创建请您先创建IAM用户,具体操作,请参见创建IAM用户。
- 创建2个伸缩组。具体操作,请参见创建伸缩组。
- 登录IAM控制台。
- 创建自定义策略。具体操作,请参见创建自定义策略。
您可以在策略(Condition)中为云资源设置多个标签条件来限制对弹性伸缩资源的操作权限。支持的标签鉴权条件如下所示:
表2 标签鉴权条件 标签鉴权条件
说明
g:RequestTag
限制在请求中必须传入特定的标签。
如果API请求中没有标签参数,则不能使用g:RequestTag,否则会导致鉴权失败。
g:ResourceTag
限制指定的资源必须包含特定的标签。
如果API请求中没有资源ID参数,则不能使用g:ResourceTag,否则会导致鉴权失败。
- 场景一:不允许创建不带标签的伸缩组1。
创建伸缩组1时须为伸缩组1绑定team:game1标签后,才可以创建成功。
对应的自定权限策略如下所示:
{ "Version": "5.0", "Statement": [ { "Effect": "Allow", "Action": [ "as:scalingGroup:create" ], "Condition": { "StringEquals": { "g:RequestTag/team": [ "game1" ] } } }, { "Effect": "Allow", "Action": [ "as:scalingConfig:list" ] }, { "Effect": "Allow", "Action": [ "as::listQuotas" ] } ] }
- 场景二:只允许查询绑定标签的伸缩组1。
伸缩组1绑定team:game1标签后,查询伸缩组时只能查询到伸缩组1的资源。
对应的自定权限策略如下所示:{ "Version": "5.0", "Statement": [ { "Effect": "Allow", "Action": [ "as:scalingGroup:get" ], "Condition": { "StringEquals": { "g:ResourceTag/team": [ "game1" ] } } }, { "Effect": "Allow", "Action": [ "as:scalingConfig:list" ] }, { "Effect": "Allow", "Action": [ "as::listQuotas" ] } ] }
- 场景三:只允许操作伸缩组1,不允许操作伸缩组2。
伸缩组1绑定了team:game1标签,伸缩组2绑定team:game2标签,只允许操作绑定team:game1标签的伸缩组功能,不允许操作绑定了team:game2标签的伸缩组功能。
对应的自定权限策略如下所示:
{ "Version": "5.0", "Statement": [ { "Effect": "Allow", "Action": [ "as:scalingConfig:list" ] }, { "Effect": "Allow", "Action": [ "as::listQuotas" ] }, { "Effect": "Allow", "Action": [ "as:scalingGroup:update" ] }, { "Effect": "Allow", "Action": [ "as:scalingGroup:resume", "as:scalingGroup:pause" ], "Condition": { "StringEquals": { "g:ResourceTag/team": [ "game1" ] } } } ] }
- 场景一:不允许创建不带标签的伸缩组1。
- 将自定义策略授权给您希望控制访问的IAM用户。具体操作,请参见给IAM用户授权。
效果验证
验证权限策略是否生效。
- 场景一:不允许创建不带标签的伸缩组1。
伸缩组1已绑定了标签team:game1,创建伸缩组1可成功创建。若没有设置标签team:game1或者设置了其他标签,则提示无权限创建。
- 场景二:只允许查询绑定标签的伸缩组1。
指定查询伸缩组1(已绑定标签team:game1),但查询时未筛选标签选项,则可以查询到该伸缩组信息。
指定查询除伸缩组1外的某个未绑定标签team:game1的伸缩组,则查询结果为空。
- 场景三:只允许操作伸缩组1,不允许操作伸缩组2。
修改的伸缩组1(已绑定标签team:game1),有修改伸缩组的权限。
修改的伸缩组2(未绑定标签team:game1)或设置了其他标签,则提示无权限修改该伸缩组。