对于非默认 VPC,您可以通过资源共享将 VPC 内的交换机共享给其他阿里云账号(主账号),以支持各个账号在共享交换机内创建ECS、RDS等资源。交换机使用者只能查看和管理自己创建的资源,无法查看、修改或删除其他账号的资源。
工作原理
如上图所示,账号A将自己拥有的交换机共享给账号B、C、D后,每个账号可以在已共享的交换机内创建云资源,这些云资源共用交换机的IP地址空间,默认网络互通。交换机所有者(账号A)也可以通过配置网络ACL或安全组,实现交换机或云资源之间的网络隔离。
共享VPC的典型应用场景:
企业网络集中管理:网络运维团队集中规划、配置和管理VPC,并将VPC的交换机共享给业务部门。业务部门可以根据业务需求在共享交换机中创建管理ECS等资源,无需关注网络配置和管理。
简化多账号网络运维:将VPC的交换机共享给多个账号,不用为每个账号单独配置VPC网络,从而极大减少了VPC的使用数量,降低多账号场景下的网络运维复杂度。
使用限制
默认VPC不支持共享,您需要先创建自定义VPC,再使用VPC共享功能。如果默认VPC中已有存量云资源,您可以考虑将这些云资源迁移或重建到非默认VPC。
使用共享VPC实现存量云资源的网络互通时,您需要考虑支持在共享交换机下创建的云资源类型、交换机所有者和使用者的权限、云资源本身是否支持迁移。如果不适用,或迁移重建成本高,请使用VPC对等连接或CEN实现跨VPC互联。
支持在共享交换机下创建的云资源类型
ECS实例
SLB实例
RDS实例
容器服务Terway组件
MongoDB实例
Redis实例
Kafka实例
Elasticsearch
ACR实例
PolarDB MySQL集群
RocketMQ实例
MSE注册配置中心
交换机所有者和使用者的权限
针对已共享的交换机:
目标 | 交换机所有者的权限 | 交换机使用者的权限 |
云资源(ECS、RDS等) | 每个账号只能查看和管理自身创建的云资源,无法查看和管理其他账号创建的云资源。 | |
安全组 | 每个账号只能查看和管理自身创建的安全组,无法查看和管理其他账号创建的安全组。 | |
弹性网卡 | 可以使用DescribeNetworkInterfaces查看使用者创建的弹性网卡,无法管理使用者创建的弹性网卡。 | 只可查看和管理自身创建的弹性网卡,无法查看其他账号的弹性网卡。 |
VPC、交换机、路由表、网络ACL、附加网段 | 全部权限 | 仅可查看 |
预留网段 | 全部权限 | 无权限 |
IPv6网关 | 全部权限 |
|
流日志 |
| 只能创建弹性网卡粒度的流日志,且仅对交换机使用者的弹性网卡生效。 |
NAT网关、VPN网关、云企业网、VPC对等连接 | 全部权限 | 无查看和管理权限,但可以通过所有者创建的这些网络资源,实现与VPC外部网络互通。 |
标签 | 共享行为不影响交换机所有者为资源配置的标签。交换机所有者与交换机使用者都可以为各自的资源配置标签,且标签互不可见也互不影响。 |
交换机取消共享后:
目标 | 交换机使用者的权限 |
云资源(ECS、RDS等) | 可以继续使用和管理(查看、修改、删除)自身已创建的云资源,但无法继续创建资源。 |
交换机及其关联资源 | 无法查看共享交换机,也无法查看共享交换机相关联的资源(例如VPC、路由表、私网网段、网络ACL)。 |
标签 | 系统会删除交换机使用者在该共享交换机上配置的标签。 |
在共享交换机中创建云资源
交换机所有者可以将交换机共享给任意阿里云账户,也可以仅在资源目录内共享。交换机所有者开启共享后,使用者就可在共享交换机中创建云资源。
控制台
一、开启共享
此处仅介绍将交换机共享给任意账户的方式。针对资源目录方式,请参考仅在资源目录内共享资源。
登录交换机所有者的账号,前往资源管理控制台的资源共享-我的共享页面。先在顶部菜单栏左上处,选择共享资源所在的地域,再单击创建共享单元,在打开的页面中:
第一步:输入共享单元名称,然后选中需要共享的交换机。
第二步:系统会默认选择AliyunRSDefaultPermissionVSwitch权限。
第三步:使用者范围选择允许共享给任意账号,添加方式选择手动添加,使用者ID输入交换机使用者的阿里云账号ID,并点击添加。
第四步:检查无误后,在页面底部单击确定。
登录交换机使用者的账号,接受共享邀请:
前往资源管理控制台的资源共享-共享给我页面。
在顶部菜单栏左上处,选择共享资源所在的地域,再单击目标共享单元状态列的接受。
接受后,交换机使用者就可以访问共享的交换机,且后续该共享单元新增的共享资源将默认接受共享邀请。
二、在共享交换机创建云资源
登录交换机使用者的账号:
前往专有网络控制台交换机页面,在顶部状态栏选择共享交换机的地域后,您可以看到共享交换机(被标记为来自共享)。
针对ECS、RDS、SLB实例,您可以在目标共享交换机的操作列,单击添加云产品进行创建。
其他支持在共享交换机下创建的云资源类型,请在创建时选择共享交换机。
API
一、开启共享
方式一:共享给任意账户
使用交换机所有者的身份凭证,调用CreateResourceShare创建共享单元,并确保将
AllowExternalTargets
参数设为True
。使用交换机使用者的身份凭证,先调用ListResourceShareInvitations 查询收到的资源邀请信息,再调用AcceptResourceShareInvitation接受资源共享邀请。
方式二:仅在资源目录内共享
使用交换机所有者的身份凭证,调用EnableSharingWithResourceDirectory启用资源目录组织共享。
继续使用交换机所有者的身份凭证,调用CreateResourceShare创建共享单元,并确保将
AllowExternalTargets
参数设为False
。
二、创建云资源
登录交换机使用者的账号:
调用DescribeVSwitches获取交换机列表。
在交换机列表中,过滤出共享交换机(
ShareType
字段值为Sharing
)。调用云资源的创建接口(例如ECS的RunInstances),基于共享交换机创建云资源。
Terraform
一、开启共享
交换机所有者创建共享单元:
当前Terraform不支持将交换机共享给任意账户,仅支持在资源目录内共享,请您在操作前确保交换机所有者已启用资源目录组织共享。
Resources: alicloud_resource_manager_resource_share、alicloud_resource_manager_shared_resource、alicloud_resource_manager_shared_target
# 指定地域
provider "alicloud" {
region = "cn-hangzhou"
}
# 指定共享单元名称
resource "alicloud_resource_manager_resource_share" "example_unit" {
resource_share_name = "example_unit_name"
}
# 指定共享交换机
resource "alicloud_resource_manager_shared_resource" "example_vsw" {
resource_share_id = alicloud_resource_manager_resource_share.example_unit.id
resource_id = "vsw-bp1omg98fixldnwcxxxxx" # 修改为实际的共享交换机ID
resource_type = "VSwitch" # 资源类型为交换机
}
# 指定共享交换机的使用者
resource "alicloud_resource_manager_shared_target" "example_target" {
resource_share_id = alicloud_resource_manager_resource_share.example_unit.id
target_id = "10xxxxxxxxxxxxxx" # 修改为交换机使用者的实际UID
}
二、在共享交换机创建云资源
以交换机使用者在共享交换机中创建1台ECS为例:
Resources: alicloud_security_group、alicloud_instance
Data Sources: alicloud_vswitches
# 指定地域
provider "alicloud" {
region = "cn-hangzhou"
}
# 指定共享交换机
variable "vsw_id" {
default = "vsw-bp1omg98fixldnwcxxxxx" # 替换为实际的共享交换机ID
}
# 获取目标共享交换机的信息
data "alicloud_vswitches" "example_vsw" {
ids = [var.vsw_id]
}
# 创建安全组
resource "alicloud_security_group" "example_sg" {
security_group_name = "example_sg_name"
vpc_id = data.alicloud_vswitches.example_vsw.vswitches[0].vpc_id
}
# 创建ECS
resource "alicloud_instance" "example_ecs" {
instance_name = "example_ecs_name"
instance_type = "ecs.e-c1m1.large"
security_groups = [alicloud_security_group.example_sg.id]
vswitch_id = var.vsw_id
image_id = "aliyun_3_x64_20G_alibase_20250117.vhd"
system_disk_category = "cloud_essd"
}
管理共享交换机和使用者
交换机所有者可参考如下步骤,来完成:
查看已共享的交换机
查看共享交换机的使用者
共享更多交换机
将交换机共享给更多账号
控制台
前往资源管理控制台的资源共享-我的共享页面。在顶部菜单栏左上处,选择共享资源所在的地域。
在我的共享页面,您可以:
查看已共享的交换机:单击共享的资源页签进行查看。
查看共享交换机的使用者:单击资源使用者页签进行查看。
单击共享单元页签,找到目标共享单元,单击共享单元ID。
您可以点击资源或资源使用者页签,分别查看此共享单元内的共享交换机和使用者。
如果资源和资源使用者页签的共享状态显示为已关联时,表示共享的资源和资源使用者添加成功:
在目标共享单元页面,单击右上方编辑共享单元,您可以在此共享单元内:
增加或删除共享交换机:在第一步,勾选或取消勾选交换机。
增加或删除共享交换机的使用者:在第三步,添加或删除账号UID。
检查无误后,在编辑共享单元页面的第四步,单击确定。
API
交换机所有者查看已被共享的共享交换机及使用者:
调用ListSharedResources查看共享交换机列表。
调用ListSharedTargets查看共享交换机的使用者列表。
交换机所有者在共享单元内管理共享交换机及使用者:
调用ListResourceShareAssociations查看共享单元内的交换机或使用者。
调用AssociateResourceShare在共享单元内增加共享交换机或使用者。
调用DisassociateResourceShare在共享单元内删除共享交换机或使用者。
Terraform
查看共享交换机、共享交换机的使用者
交换机所有者查看共享单元、共享的资源、共享资源的使用者:
Datasources: alicloud_resource_manager_resource_shares、alicloud_resource_manager_shared_resources、alicloud_resource_manager_shared_targets
# 指定地域
provider "alicloud" {
region = "cn-hangzhou"
}
# 共享单元列表
data "alicloud_resource_manager_resource_shares" "example_units" {
resource_share_owner = "Self" # 查看自己共享给别人的共享单元
}
# 输出列表
output "first_resource_manager_resource_share_id" {
value = data.alicloud_resource_manager_resource_shares.example_units.shares
}
# 共享的资源列表
data "alicloud_resource_manager_shared_resources" "example_resources" {
}
# 输出列表
output "first_resource_manager_shared_resource_id" {
value = data.alicloud_resource_manager_shared_resources.example_resources.resources
}
# 共享资源的使用者列表
data "alicloud_resource_manager_shared_targets" "example_targets" {
}
# 输出列表
output "first_resource_manager_shared_target_id" {
value = data.alicloud_resource_manager_shared_targets.example_targets.targets
}
增加或删除共享交换机
交换机所有者可以通过在.tf
文件中增加或删除alicloud_resource_manager_shared_resource,实现增加或删除共享交换机。
增加或删除共享交换机的使用者
交换机所有者可以通过在.tf
文件中增加或删除alicloud_resource_manager_shared_target,实现增加或删除共享交换机的使用者。
更多信息
计费说明
共享 VPC 功能本身不收费。但资源所有者和使用者要为自己创建的云资源(如ECS、RDS等)付费。
支持的地域
区域 | 支持共享VPC的地域 |
亚太-中国 | 华东1(杭州)、华东2(上海)、华北1(青岛)、华北2(北京)、华北3(张家口)、华北5(呼和浩特)、华北6(乌兰察布)、华南1(深圳)、华南2(河源)、华南3(广州)、西南1(成都)、中国香港 |
亚太-其他 | 日本(东京)、韩国(首尔)、新加坡、马来西亚(吉隆坡)、印度尼西亚(雅加达)、菲律宾(马尼拉)、泰国(曼谷) |
欧洲与美洲 | 德国(法兰克福)、英国(伦敦)、美国(硅谷)、美国(弗吉尼亚) |
中东 | 沙特(利雅得) 重要 沙特(利雅得)地域由合作伙伴运营。 |
配额
配额名称 | 描述 | 默认限制 | 提升配额 |
vpc_quota_sharedvpc_share_user_num_per_vpc | 单个VPC支持共享的交换机使用者的数量 | 50个 | |
vpc_quota_sharedvpc_share_user_num_per_vswitch | 单个VPC内的单个交换机支持共享的交换机使用者的数量 | 50个 | |
vpc_quota_sharedvpc_accept_shared_vswitch_num | 单个交换机使用者支持接收的共享交换机的数量 | 30个 |