弹性伸缩对伸缩组进行分类管理并控制其访问权限,即可以精细地授权某个伸缩组权限,也可以对带有某个标签的伸缩组进行分组授权。本文为您介绍如何通过标签鉴权控制RAM用户的权限,实现不同用户能够拥有不同的访问和控制权限。

前提条件

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

背景信息

标签是云资源的标识,可以帮助您从不同维度对具有相同特征的云资源进行分类、搜索和聚合;访问控制RAM可基于权限策略,管理用户身份,控制云资源的访问和操作。通过标签和访问控制RAM结合,并将标签作为权限策略的匹配条件,您可以实现对弹性伸缩的精细化管理。关于标签和访问控制的更多信息,请参见标签概述什么是访问控制

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

示例场景说明

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

假如已创建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标签)的资源功能。

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

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

接口 不支持标签鉴权
DescribeRegions
定时任务未绑定伸缩组时:
  • CreateScheduledTask
  • ModifyScheduledTask
  • DescribeScheduledTasks
  • DeleteScheduledTask
报警任务未绑定伸缩组时:
  • CreateAlarm
  • DescribeAlarms
  • ModifyAlarm
  • EnableAlarm
  • DeleteAlarm

操作步骤

  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绑定environment:testteam:game1标签后,伸缩组1才可以创建成功。
    {
        "Effect": "Allow",
        "Action": "ess:Create*",
        "Resource": "*",
        "Condition": {
            "StringEquals": {
                "acs:RequestTag/environment": "test",
                "acs:RequestTag/team": "game1"
            }
        }
    }
    场景2:查询伸缩组时,只允许查询伸缩组1(即绑定environment:testteam:game1标签)的资源功能
    {
        "Effect": "Allow",
        "Action": "ess:Describle*",
        "Resource": "*",
        "Condition": {
            "StringEquals": {
                "acs:RequestTag/environment": "test",
                "acs:RequestTag/team": "game1"
            }
        }
    }
    场景3:只允许操作伸缩组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. 验证权限策略是否生效。

    在弹性伸缩控制台或者调用API对伸缩组进行相应操作,具体以测试创建伸缩组1和伸缩组2为例。

    • 创建伸缩组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或设置了其他标签,则提示无权限删除该伸缩组。资源级别鉴权执行结果

相关文档