您可以为 VPC 绑定标签,通过 RAM 的自定义策略指定授权的标签,利用标签限制 RAM 用户只能在指定的 VPC 中创建和管理交换机、网络ACL等资源。
工作原理
基于标签的 RAM 鉴权(标签鉴权)可以精细控制 RAM 用户对 VPC 资源的操作权限。在VPC场景下,标签鉴权常用于以下需求:
限制 RAM 用户只能在特定VPC下创建资源(如交换机、网络ACL)。
限制 RAM 用户创建资源时必须携带指定标签。
限制 RAM 用户只能管理(修改、删除)带有特定标签的资源。
鉴权流程
标签鉴权的核心流程如下图所示:当RAM用户发起API请求时,RAM会根据主账号授予的权限策略中的Condition条件,同时检查请求中携带的标签(acs:RequestTag)和目标资源上已绑定的标签(acs:ResourceTag),只有所有条件均满足时,操作才会被允许。
Condition Key 说明
标签鉴权通过权限策略中的条件(Condition)实现,支持以下两种Condition Key:
对比维度 | acs:ResourceTag | acs:RequestTag |
检查对象 | 被操作的资源上已绑定的标签 | API 请求中传递的标签信息 |
典型场景 | 控制 | 控制 |
效果 | 限制操作范围(只能操作特定资源) | 限制操作行为(调用 API 时,请求参数里面必须携带的标签) |
通过组合使用acs:ResourceTag和acs: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 资源的管理权限,并且要求特定部门(财务部)在创建资源时必须符合特定的规范(如打上生产环境标签)。
资源划分(部门隔离):
VPC-A (财务部):绑定标签
department:financeVPC-B (人事部):绑定标签
department:hr
权限分配与标签鉴权
跨部门隔离(按 VPC,使用 ResourceTag):只能在 VPC-A (
department:finance) 下操作。资源创建合规(按请求参数,使用 RequestTag):在 VPC-A 下创建交换机或网络 ACL 时,必须携带
env:prod标签。生命周期安全管理(按子资源,使用 ResourceTag):只能修改或删除自身带有
env:prod标签的交换机和网络 ACL。
操作步骤
控制台
使用阿里云主账号(管理员)完成:
为 VPC 绑定标签:前往VPC 控制台,将鼠标悬停在目标 VPC 标签列的
图标,单击气泡框中的绑定或编辑。VPC-A:
department:finance。VPC-B:
department:hr。
在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": "*" } ] }为RAM用户授权: 资源范围选择账号级别,授权主体选择需要添加权限的RAM用户,权限策略选择自定义策略
VpcTagAccessPolicy。
API
使用阿里云主账号(管理员)完成:
调用CreateUser创建 RAM 用户。
调用TagResources为 VPC 创建并绑定标签。
调用CreatePolicy创建自定义权限策略。
调用AttachPolicyToUser为 RAM 用户授权。
结果验证
使用授权的RAM用户验证标签鉴权是否生效:
前往VPC控制台 - 创建交换机页面,创建交换机时指定目标专有网络、标签键、标签值。
前往VPC控制台 - 交换机页面,删除绑定指定标签的交换机。
验证场景 | 结果 | 原因 |
在VPC-A( | 成功 |
|
在VPC-B( | 失败 | VPC上的 |
在VPC-A中创建交换机,不携带标签或携带其他标签 | 失败 |
|
在VPC-B中创建交换机,不携带标签 | 失败 |
|
删除已绑定 | 成功 | 交换机上的 |
删除未绑定 | 失败 | 交换机上的 |