全部产品
Search
文档中心

云服务器 ECS:通过标签实现精细化权限管理

更新时间:Sep 05, 2023

云服务器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的安全组时,会提示如下错误。修改安全组

修改标签

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