Azure NSG是否需与受保护子网挂载的NIC同资源组?跨资源组挂NIC报错如何解决
可行性结论
跨资源组将NIC挂载到其他资源组的VNet子网是可行的,你当前操作失败存在两处核心问题,分别是命令参数缺失和权限不足。
直接报错原因:CLI命令参数错误
你执行的az network nic create命令未指定VNet所属的资源组,Azure默认会到NIC所在的资源组A下查找名为VN-B的VNet,自然找不到对应资源,这就是本次报错的直接诱因。
你需要补充--vnet-resource-group参数指定VNet所在的资源组B,修正后的命令如下:
az network nic create --resource-group A --name bastion-nic --vnet-name VN-B --vnet-resource-group B --subnet SubnetB
你收到的报错中文翻译如下:
(无效的资源引用)资源 /subscriptions/40ef-b75f-c05a034bf2ff/resourceGroups/A/providers/Microsoft.Network/virtualNetworks/VN-B/subnets/SubnetB 被资源 /subscriptions/b75f-c05a034bf2ff/resourceGroups/A/providers/Microsoft.Network/networkInterfaces/bastion-nic 引用,但未找到该资源。请确认被引用的资源存在,且两个资源位于同一区域。
错误码:InvalidResourceReference
深层问题:权限不足
就算修正命令参数,你当前的权限配置依然会操作失败:你在资源组B仅拥有Reader角色,仅具备资源读取权限,没有将NIC加入到该资源组下子网的权限。你需要申请资源组B的以下权限之一:
- 内置*网络参与者(Network Contributor)*角色
- 包含
Microsoft.Network/virtualNetworks/subnets/join/action操作权限的自定义角色
如果需要给该NIC单独绑定资源组B下的NSG,还需要补充--network-security-group [NSG名称] --nsg-resource-group B参数,同时也需要对应NSG的关联操作权限。
额外检查项
确认NIC要创建的区域和资源组B下的VN-B的区域一致,跨区域挂载VNet是不支持的。
内容的提问来源于stack exchange,提问作者Fred

