全部产品
Search
文档中心

弹性伸缩:通过标签鉴权精细化管理弹性伸缩

更新时间:Jan 18, 2024

弹性伸缩对伸缩组进行分类管理并控制其访问权限,既可以精细地授权某个伸缩组权限,也可以对带有某个标签的伸缩组进行分组授权。本文为您介绍如何通过标签鉴权控制RAM用户的权限,实现不同用户能够拥有不同的访问和控制权限,提高管理效率,同时降低信息泄露风险。

背景信息

  • 标签是云资源的标识,可以帮助您从不同维度对具有相同特征的云资源进行分类、搜索和聚合。更多信息,请参见标签概述

  • 访问控制RAM可基于权限策略,管理用户身份,控制云资源的访问和操作。更多信息,请参见什么是访问控制

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

基于标签控制RAM用户权限(即标签鉴权)的逻辑如下:

image

不支持标签鉴权的API接口说明

为某RAM用户授予标签鉴权的权限策略后,该RAM用户调用下列API接口时不支持使用标签鉴权管理弹性伸缩。

接口

不支持标签鉴权

DescribeRegions

定时任务未绑定伸缩组时:

  • CreateScheduledTask

  • ModifyScheduledTask

  • DescribeScheduledTasks

  • DeleteScheduledTask

报警任务未绑定伸缩组时:

  • CreateAlarm

  • DescribeAlarms

  • ModifyAlarm

  • EnableAlarm

  • DeleteAlarm

示例场景说明

本文以下列场景作为示例,说明如何实现标签鉴权。

假如已创建2个伸缩组用于游戏开发时使用,且各伸缩组标签(Tag)包含环境和项目两个维度,即environment和team。您需要控制某RAM用户对下列伸缩组拥有不同的特定权限,伸缩组详情如下所示:

伸缩组

伸缩组名称

伸缩组的标签

伸缩组1

asg-001

  • 标签1:environment:test,其中标签键为environment,标签值为test

  • 标签2:team:game1,其中标签键为team,标签值为game1

伸缩组2

asg-002

  • 标签1:environment:dev,其中标签键为environment,标签值为dev

  • 标签2:team:game2,其中标签键为team,标签值为game2

具体场景如下所示:

  • 场景1:不允许创建不带标签的伸缩组,仅当创建时为伸缩组1绑定environment:testteam:game1标签后,伸缩组1才可以创建成功。

  • 场景2:查询伸缩组时,只允许查看伸缩组1(即绑定environment:testteam:game1标签)资源。

  • 场景3:只允许操作伸缩组1(即绑定environment:testteam:game1标签)的资源功能,不允许操作伸缩组2(即绑定environment:devteam:game2标签)资源。

操作步骤

说明

操作前,请您确保已创建RAM用户。若未创建请您先创建RAM用户,具体操作,请参见创建RAM用户

  1. 创建2个伸缩组。

    具体操作,请参见配置伸缩组。其中,伸缩组详情请参见示例场景说明

  2. 登录RAM控制台

  3. 创建自定义策略。

    具体操作,请参见创建自定义权限策略

    您可以在策略(Condition)中为云资源设置多个标签条件来限制对弹性伸缩资源的操作权限。支持的标签鉴权条件如下所示:

    标签鉴权条件

    说明

    acs:RequestTag

    限制在请求中必须传入特定的标签。

    如果API请求中没有标签参数,则不能使用acs:RequestTag,否则会导致鉴权失败。

    acs:ResourceTag

    限制指定的资源必须包含特定的标签。

    如果API请求中没有资源ID参数,则不能使用acs:ResourceTag,否则会导致鉴权失败。

    整体示例如下所示:

    {
        "Version": "1",
        "Statement": [
             {
               "Effect": "Allow",
               "Action": "ess:Create*",
               "Resource": "*",
               "Condition": {
                       "StringEquals": {
                            "acs:RequestTag/environment": "test",
                            "acs:RequestTag/team": "game1"
                       }
                  }
             },
             {
                "Effect": "Allow",
                "Action": "ess:Describle*",
                "Resource": "*",
                "Condition": {
                        "StringEquals": {
                        "acs:RequestTag/environment": "test",
                        "acs:RequestTag/team": "game1"
                        }
                  }
             },
             {
                "Action": "ess:*",
                "Effect": "Allow",
                "Resource": "*",
                "Condition": {
                    "StringEquals": {
                        "acs:ResourceTag/environment": "test",
                        "acs:ResourceTag/Team": "game1"
                      }
                  }
             },
             {
                "Effect": "Allow",
                "Action": [
                       "ess:Describe*",
                       "ess:List*",
                       "ess:DescribeRegions",
                       "ess:CreateScheduledTask",
                       "ess:ModifyScheduledTask",
                       "ess:DescribeScheduledTasks",
                       "ess:DeleteScheduledTask",
                       "ess:CreateAlarm",
                       "ess:DescribeAlarms",
                       "ess:ModifyAlarm",
                       "ess:EnableAlarm",
                       "ess:DeleteAlarm"
                    ],
        "Resource": "*"
          }
       ]
    }
    • 场景1:不允许创建不带标签的伸缩组1

      即仅当创建时为伸缩组1绑定environment:testteam:game1标签后,伸缩组1才可以创建成功。

      对应的自定权限策略如下所示:

      {
          "Effect": "Allow",
          "Action": "ess:Create*",
          "Resource": "*",
          "Condition": {
              "StringEquals": {
                  "acs:RequestTag/environment": "test",
                  "acs:RequestTag/team": "game1"
              }
          }
      }
    • 场景2:只允许查询绑定标签的伸缩组1

      即伸缩组1绑定environment:testteam:game1标签后,查询伸缩组时只能查询到伸缩组1的资源。

      对应的自定权限策略如下所示:

      {
          "Effect": "Allow",
          "Action": "ess:Describle*",
          "Resource": "*",
          "Condition": {
              "StringEquals": {
                  "acs:RequestTag/environment": "test",
                  "acs:RequestTag/team": "game1"
              }
          }
      }
    • 场景3:只允许操作伸缩组1,不允许操作伸缩组2

      即伸缩组1绑定了environment:testteam:game1标签,而伸缩组2绑定environment:devteam: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": "*"
            }
         ]
      }
  4. 将自定义策略授权给您希望控制访问的RAM用户。

    具体操作,请参见为RAM用户授权

  5. 验证权限策略是否生效。

    • 创建伸缩组1验证场景1

      • 伸缩组1已绑定标签environment:testteam:game1),伸缩组1可成功创建。

      • 没有设置标签或者设置了其他标签,则提示无权限创建。资源级别鉴权执行结果

    • 查询伸缩组验证场景2

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

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

      • 没有指定具体某伸缩组,仅搜索environment:testteam:game1标签,则查询出来所有带该标签的伸缩组。

    • 删除伸缩组来验证场景3

      • 删除的伸缩组1已绑定标签environment:testteam:game1,则可以删除该伸缩组。

      • 删除的伸缩组2未绑定标签environment:testteam:game1或设置了其他标签,则提示无权限删除该伸缩组。资源级别鉴权执行结果

相关文档