文档首页/ 弹性伸缩 AS/ 最佳实践/ 使用标签鉴权精细化管理弹性伸缩
更新时间:2025-07-11 GMT+08:00
分享

使用标签鉴权精细化管理弹性伸缩

背景

通过标签和访问控制IAM结合,并将标签作为权限策略的匹配条件,您可以实现对弹性伸缩的精细化管理。

  • 标签是云资源的标识,可以帮助您从不同维度对具有相同特征的云资源进行分类、搜索和聚合。
  • IAM提供权限管理能力,可基于权限策略,管理用户身份,控制云资源的访问和操作。更多信息,请参见什么IAM

本文为您介绍如何通过标签鉴权控制IAM用户的权限,实现不同用户能够拥有不同的访问和控制权限,提高管理效率,同时降低信息泄露风险。

示例场景

假设已创建2个伸缩组,且各伸缩组标签(Tag)包含项目维度,即team,详情如下:

表1 伸缩组及伸缩组标签

伸缩组

伸缩组名称

伸缩组标签

伸缩组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用户

  1. 创建2个伸缩组。具体操作,请参见创建伸缩组
  2. 登录IAM控制台。
  3. 创建自定义策略。具体操作,请参见创建自定义策略

    您可以在策略(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"
                ]
              }
            }
          }
        ]
      }
  4. 将自定义策略授权给您希望控制访问的IAM用户。具体操作,请参见给IAM用户授权

效果验证

验证权限策略是否生效。

  • 场景一:不允许创建不带标签的伸缩组1。

    伸缩组1已绑定了标签team:game1,创建伸缩组1可成功创建。若没有设置标签team:game1或者设置了其他标签,则提示无权限创建。

  • 场景二:只允许查询绑定标签的伸缩组1。

    指定查询伸缩组1(已绑定标签team:game1),但查询时未筛选标签选项,则可以查询到该伸缩组信息。

    指定查询除伸缩组1外的某个未绑定标签team:game1的伸缩组,则查询结果为空。

  • 场景三:只允许操作伸缩组1,不允许操作伸缩组2。

    修改的伸缩组1(已绑定标签team:game1),有修改伸缩组的权限。

    修改的伸缩组2(未绑定标签team:game1)或设置了其他标签,则提示无权限修改该伸缩组。

相关文档