使用标签限制 RAM 用户管理 VPC

更新时间:
复制 MD 格式

您可以为 VPC 绑定标签,通过 RAM 的自定义策略指定授权的标签,利用标签限制 RAM 用户只能在指定的 VPC 中创建和管理交换机、网络ACL等资源。

工作原理

基于标签的 RAM 鉴权(标签鉴权)可以精细控制 RAM 用户对 VPC 资源的操作权限。在VPC场景下,标签鉴权常用于以下需求:

  • 限制 RAM 用户只能在特定VPC下创建资源(如交换机、网络ACL)。

  • 限制 RAM 用户创建资源时必须携带指定标签。

  • 限制 RAM 用户只能管理(修改、删除)带有特定标签的资源。

鉴权流程

标签鉴权的核心流程如下图所示:当RAM用户发起API请求时,RAM会根据主账号授予的权限策略中的Condition条件,同时检查请求中携带的标签acs:RequestTag)和目标资源上已绑定的标签acs:ResourceTag),只有所有条件均满足时,操作才会被允许。

image

Condition Key 说明

标签鉴权通过权限策略中的条件(Condition)实现,支持以下两种Condition Key:

对比维度

acs:ResourceTag

acs:RequestTag

检查对象

被操作的资源上已绑定的标签

API 请求中传递的标签信息

典型场景

控制可以操作哪些资源

控制调用 API 操作资源时必须带什么标签

效果

限制操作范围(只能操作特定资源)

限制操作行为(调用 API 时,请求参数里面必须携带的标签)

通过组合使用acs:ResourceTagacs:RequestTag,可以同时控制在哪个资源下操作调用 API 操作资源时必须带什么标签,实现更精细的权限管理。

支持的资源

  • 网络基础资源:专有网络(VPC)、交换机(VSwitch)、路由器(VRouter)、路由表(RouteTable)、预留网段(VSwitchCidrReservation)、高可用虚拟 IP(HaVip)、DHCP 选项集(DHCPOptionsSet)

  • 弹性公网 IP 与带宽:弹性公网 IP(EIP)、共享带宽(BandwidthPackage、CombandwidthPackage)、公网 IP 地址池(PublicIpAddressPool)、连续公网 IP 地址段(PublicIpAddressRange)

  • NAT 网关:NAT 网关(NatGateway)

  • IPv4/IPv6:IPv4 网关(IPv4Gateway)、IPv6 网关(IPv6Gateway)、IPv6 地址(IPv6Address)、IPv6 公网带宽(IPv6Bandwidth)

  • 安全与访问控制:网络 ACL(NetworkAcl)、前缀列表(PrefixList)、网关终端节点(GatewayEndpoint)

  • 流量监控与镜像:流日志(FlowLog)、流量镜像筛选条件(TrafficMirrorFilter)、流量镜像会话(TrafficMirrorSession)

隔离 VPC 各租户创建/删除交换机

场景示例

企业有不同的部门(如财务部、人事部),需要通过 RAM(访问控制)实现按部门隔离 VPC 资源的管理权限,并且要求特定部门(财务部)在创建资源时必须符合特定的规范(如打上生产环境标签)。

  1. 资源划分(部门隔离):

    • VPC-A (财务部):绑定标签 department:finance

    • VPC-B (人事部):绑定标签 department:hr

  2. 权限分配与标签鉴权

    • 跨部门隔离(按 VPC,使用 ResourceTag):只能在 VPC-A (department:finance) 下操作。

    • 资源创建合规(按请求参数,使用 RequestTag):在 VPC-A 下创建交换机或网络 ACL 时,必须携带 env:prod 标签。

    • 生命周期安全管理(按子资源,使用 ResourceTag):只能修改或删除自身带有 env:prod 标签的交换机和网络 ACL。

image

操作步骤

控制台

使用阿里云主账号(管理员)完成:

  1. 前往RAM控制台创建RAM用户

  2. 为 VPC 绑定标签:前往VPC 控制台,将鼠标悬停在目标 VPC 标签列的标签.png图标,单击气泡框中的绑定编辑

    • VPC-A:department:finance

    • VPC-B:department:hr

  3. RAM控制台创建自定义权限策略VpcTagAccessPolicy

    本示例中为 VPC 和交换机使用了不同的标签键:

    • department:finance用于acs:ResourceTag条件:控制可以在哪个VPC下操作。

    • env:prod用于acs:RequestTag条件:控制创建子资源时必须携带的标签。

    在实际使用中,您也可以为两者使用相同的标签键,根据业务需要灵活配置。

    {
      "Version": "1",
      "Statement": [
        {
          // Statement 1:仅允许在绑定了标签 department:finance 的VPC中创建交换机和网络ACL。
          // 使用 acs:ResourceTag,检查被操作的VPC(父资源)上是否绑定了指定标签。
          "Effect": "Allow",
          "Action": [
            "vpc:CreateVSwitch",
            "vpc:CreateNetworkAcl"
          ],
          "Resource": "acs:vpc:*:*:vpc/*",
          "Condition": {
            "StringEquals": {
              "acs:ResourceTag/department": [
                "finance"
              ]
            }
          }
        },
        {
          // Statement 2:创建交换机时,请求中必须携带标签 env:prod。
          // 使用 acs:RequestTag,检查API请求参数中是否包含指定标签。
          "Effect": "Allow",
          "Action": [
            "vpc:CreateVSwitch"
          ],
          "Resource": "acs:vpc:*:*:vswitch/*",
          "Condition": {
            "StringEquals": {
              "acs:RequestTag/env": [
                "prod"
              ]
            }
          }
        },
        {
          // Statement 3:创建网络ACL时,请求中必须携带标签 env:prod。
          // 同样使用 acs:RequestTag。
          "Effect": "Allow",
          "Action": [
            "vpc:CreateNetworkAcl"
          ],
          "Resource": "acs:vpc:*:*:networkacl/*",
          "Condition": {
            "StringEquals": {
              "acs:RequestTag/env": [
                "prod"
              ]
            }
          }
        },
        {
          // Statement 4:仅允许修改和删除绑定了标签 env:prod 的交换机和网络ACL。
          // 使用 acs:ResourceTag,检查被操作的子资源上是否绑定了指定标签。
          "Effect": "Allow",
          "Action": [
            "vpc:ModifyVSwitchAttribute",
            "vpc:DeleteVSwitch",
            "vpc:ModifyNetworkAclAttributes",
            "vpc:DeleteNetworkAcl"
          ],
          "Resource": "*",
          "Condition": {
            "StringEquals": {
              "acs:ResourceTag/env": [
                "prod"
              ]
            }
          }
        },
        {
          // Statement 5:允许查看VPC相关资源的信息(无条件限制)。
          "Effect": "Allow",
          "Action": [
            "vpc:Describe*",
            "vpc:List*"
          ],
          "Resource": "*"
        },
        {
          // Statement 6:(推荐)显式禁止标签操作。虽然本策略未授予标签权限(隐式拒绝已生效),
          // 但显式 Deny 可防止后续添加其他策略(如 vpc:)时意外授予标签修改权限。
          // 创建资源时通过 Create 类API的 Tag 参数指定标签,由Statement 2授权允许,不受Statement 6影响。
          "Effect": "Deny",
          "Action": [
            "vpc:TagResources",
            "vpc:UnTagResources"
          ],
          "Resource": "*"
        }
      ]
    }
  4. RAM用户授权: 资源范围选择账号级别,授权主体选择需要添加权限的RAM用户,权限策略选择自定义策略VpcTagAccessPolicy

API

使用阿里云主账号(管理员)完成:

  1. 调用CreateUser创建 RAM 用户。

  2. 调用TagResources为 VPC 创建并绑定标签。

  3. 调用CreatePolicy创建自定义权限策略。

  4. 调用AttachPolicyToUser为 RAM 用户授权。

结果验证

使用授权的RAM用户验证标签鉴权是否生效:

验证场景

结果

原因

VPC-A(department:finance)中创建交换机,请求中携带标签env:prod

成功

acs:ResourceTagacs:RequestTag条件均满足

VPC-B(department:hr)中创建交换机,请求中携带标签env:prod

失败

VPC上的acs:ResourceTag不满足(departmentfinance

VPC-A中创建交换机,不携带标签或携带其他标签

失败

acs:RequestTag不满足(未携带env:prod

VPC-B中创建交换机,不携带标签

失败

acs:ResourceTagacs:RequestTag条件均不满足

删除已绑定env:prod标签的交换机

成功

交换机上的acs:ResourceTag满足(env=prod

删除未绑定env:prod标签的交换机

失败

交换机上的acs:ResourceTag不满足