云服务器ECS资源绑定标签后,您可以使用标签为资源做分类并控制访问。本文介绍如何通过标签控制RAM用户的权限,使不同的用户可以拥有不同云资源的访问和操作权限。

前提条件

已创建RAM用户,详情请参见创建RAM用户

背景信息

标签可用于标识云资源,实现资源的分类管理;访问控制RAM可基于权限策略,管理用户身份,控制云资源的访问和操作权限。标签和RAM结合,将标签作为权限策略的匹配条件,可以实现云资源精细化权限管理。

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

应用场景示例

本文操作步骤以以下场景为示例,说明如何使用标签鉴权。
  • 不允许创建未绑定标签costcenter:tony的资源。
  • 仅允许在操作时带上请求标签costcenter:tony请求参数。
  • 不允许操作其他用户创建的资源(未绑定标签costcenter:tony的资源。
  • 支持某些查询接口,同时可以查看您已绑定标签costcenter:tony的实例。
  • 不允许修改标签,防止标签被修改。
说明 更多API接口标签鉴权说明,请参见API接口标签鉴权说明

操作步骤

本步骤将使用阿里云账号(主账号)新建一个自定义策略UseTagAccessRes(规定了RAM用户需要指定标签costcenter:tony后方可访问和操作ECS资源),并将自定义策略UseTagAccessRes授权给RAM用户userTest。

  1. 使用阿里云账号(主账号)RAM控制台
  2. 创建自定义策略UseTagAccessRes,详情请参见创建自定义权限策略
    如下示例中,您可以在策略(Condition)中为云资源设置多个标签条件来限制操作权限。支持的标签鉴权条件如下:
    标签鉴权条件 说明
    acs:RequestTag 限制在请求中必须传入特定的标签。

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

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

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

    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "ecs:Run*",
                    "ecs:Create*",
                    "ecs:Purchase*",
                    "ecs:DescribeInstances",
                    "ecs:List*"
                ],
                "Resource": "*",
                "Condition": {
                    "StringEquals": {
                        "acs:RequestTag/costcenter": "tony"
                    }
                }
            },
            {
                "Effect": "Allow",
                "Action": "*",
                "Resource": "*",
                "Condition": {
                    "StringEquals": {
                        "acs:ResourceTag/costcenter": "tony"
                    }
                }
            },
            {
                "Effect": "Allow",
                "Action": [
                    "ecs:List*",
                    "ecs:DescribeInstanceStatus",
                    "ecs:DescribeInstanceVncUrl",
                    "ecs:DescribeInstanceAutoRenewAttribute",
                    "ecs:DescribeInstanceRamRole",
                    "ecs:DescribeInstanceTypeFamilies",
                    "ecs:DescribeInstanceTypes",
                    "ecs:DescribeInstanceAttachmentAttributes",
                    "ecs:DescribeInstancesFullStatus",
                    "ecs:DescribeInstanceHistoryEvents",
                    "ecs:DescribeInstanceMonitorData",
                    "ecs:DescribeInstanceMaintenanceAttributes",
                    "ecs:DescribeInstanceModificationPrice",
                    "ecs:DescribeA*",
                    "ecs:DescribeC*",
                    "ecs:DescribeD*",
                    "ecs:DescribeE*",
                    "ecs:DescribeH*",
                    "ecs:DescribeIm*",
                    "ecs:DescribeInv*",
                    "ecs:DescribeK*",
                    "ecs:DescribeL*",
                    "ecs:DescribeM*",
                    "ecs:DescribeN*",
                    "ecs:DescribeP*",
                    "ecs:DescribeR*",
                    "ecs:DescribeS*",
                    "ecs:DescribeT*",
                    "ecs:DescribeZ*",
                    "vpc:DescribeVpcs",
                    "vpc:DescribeVSwitches",
                    "bss:PayOrder"
                ],
                "Resource": "*"
            },
            {
                "Effect": "Deny",
                "Action": [
                    "ecs:RemoveTags",
                    "ecs:UntagResources",
                    "ecs:AddTags",
                    "ecs:TagResources"
                ],
                "Resource": "*"
            }
        ]
    }
    以上策略内容可以实现如下权限控制:
    • 不允许创建未绑定标签costcenter:tony的资源。

      仅允许在操作时带上请求标签costcenter:tony请求参数。

      {
          "Effect": "Allow",
          "Action": [
              "ecs:Run*",
              "ecs:Create*",
              "ecs:Purchase*"
          ],
          "Resource": "*",
          "Condition": {
              "StringEquals": {
                  "acs:RequestTag/costcenter": "tony"
              }
          }
      }
    • 不允许操作其他用户创建的资源(未绑定标签costcenter:tony的资源)。
      {
          "Effect": "Allow",
          "Action": "*",
          "Resource": "*",
          "Condition": {
              "StringEquals": {
                  "acs:ResourceTag/costcenter": "tony"
              }
          }
      }
    • 支持某些查询接口,同时可以查看您已绑定标签costcenter:tony的实例。
      {
          "Effect": "Allow",
          "Action": [
          "ecs:DescribeInstances",
              "ecs:List*"
          ],
          "Resource": "*",
          "Condition": {
          "StringEquals": {
          "acs:RequestTag/costcenter": "tony"
              }
          }
      },
      {
          "Effect": "Allow",
          "Action": [
              "ecs:List*",
              "ecs:DescribeInstanceStatus",
              "ecs:DescribeInstanceVncUrl",
              "ecs:DescribeInstanceAutoRenewAttribute",
              "ecs:DescribeInstanceRamRole",
              "ecs:DescribeInstanceTypeFamilies",
              "ecs:DescribeInstanceTypes",
              "ecs:DescribeInstanceAttachmentAttributes",
              "ecs:DescribeInstancesFullStatus",
              "ecs:DescribeInstanceHistoryEvents",
              "ecs:DescribeInstanceMonitorData",
              "ecs:DescribeInstanceMaintenanceAttributes",
              "ecs:DescribeInstanceModificationPrice",
              "ecs:DescribeA*",
              "ecs:DescribeC*",
              "ecs:DescribeD*",
              "ecs:DescribeE*",
              "ecs:DescribeH*",
              "ecs:DescribeIm*",
              "ecs:DescribeInv*",
              "ecs:DescribeK*",
              "ecs:DescribeL*",
              "ecs:DescribeM*",
              "ecs:DescribeN*",
              "ecs:DescribeP*",
              "ecs:DescribeR*",
              "ecs:DescribeS*",
              "ecs:DescribeT*",
              "ecs:DescribeZ*",
              "vpc:DescribeVpcs",
              "vpc:DescribeVSwitches",
              "bss:PayOrder"
          ],
          "Resource": "*"
      }
    • 不允许修改标签,防止标签被修改。
      {
          "Effect": "Deny",
          "Action": [
              "ecs:RemoveTags",
              "ecs:UntagResources",
              "ecs:AddTags",
              "ecs:TagResources"
          ],
          "Resource": "*"
      }
  3. 将自定义策略授权给您希望控制访问的RAM用户或组。具体操作,请参见为RAM角色授权
    本步骤中将自定义策略UseTagAccessRes授权给RAM用户userTest。
    说明 如果您将自定义策略UseTagAccessRes授权已存在的RAM用户,请注意RAM用户多个权限策略产生的权限问题。

执行结果

授权RAM用户只能访问和操作已绑定标签costcenter:tony的资源后,该RAM用户访问及操作各资源的结果如下:

创建ECS实例

  • 创建已绑定标签costcenter:tony的ECS实例时,会创建成功。
  • 创建未绑定标签costcenter:tony的ECS实例时,会提示以下错误。创建实例

查看ECS实例

  1. 登录ECS管理控制台
  2. 在左侧导航栏,选择实例与镜像 > 实例
  3. 选择地域后,实例列表为空。实例列表
  4. 指定标签costcenter:tony后,可以查看有权限的资源。查看实例

修改安全组

  • 修改已绑定标签costcenter:tony的安全组时,会修改成功。
  • 修改未绑定标签costcenter:tony的安全组时,会提示如下错误。修改安全组

修改标签

不允许修改标签,修改标签时会提示以下错误。修改标签