如何从Azure经典VM分离经典NSG?无法分离需删VM吗?
从Azure经典VM分离经典NSG & 删除NSG解决方案
这个问题我之前帮不少用户处理过,经典模式下的NSG和VM关联确实比ARM模式麻烦很多——Portal里甚至找不到直接的分离按钮,只能靠PowerShell或者经典CLI来操作,而且完全不需要删除VM就能搞定NSG的删除问题,别慌!
一、分离经典NSG与VM的操作步骤
经典NSG其实是绑定在VM的**网络接口(NIC)**上的,不是直接关联VM本身,所以我们要操作的核心是NIC:
方法1:使用Azure经典PowerShell模块
先确保你安装了Azure经典PowerShell模块(不是Az模块哦),然后按以下步骤执行:
- 登录经典Azure账户:
Add-AzureAccount - 切换到你的目标订阅:
Select-AzureSubscription -SubscriptionName "你的订阅名称" - 获取VM的NIC信息:
如果VM有多个NIC,调整索引数字(比如$vm = Get-AzureVM -ServiceName "你的云服务名称" -Name "VM名称" $nic = $vm.NetworkInterfaces[0][1])选对应的那个接口。 - 移除NIC上的NSG关联:
Set-AzureNetworkInterfaceConfig -NetworkInterface $nic -NetworkSecurityGroupName "" - 把更改同步到VM:
执行完这步,NSG就和VM彻底解绑了。Update-AzureVM -ServiceName "你的云服务名称" -Name "VM名称" -VM $vm
方法2:使用Azure经典CLI
如果你习惯用命令行,切换到经典模式操作:
- 登录Azure并切换到经典模式:
azure login azure config mode asm - 获取VM的NIC ID(或者名称,通常是
VM名称-NIC-0格式):
(没有grep的话直接看输出找azure vm show "云服务名称" "VM名称" --json | grep -o '"id": "[^"]*"'networkInterfaces里的id字段即可) - 解除NIC与NSG的关联:
azure network nic set "NIC名称/ID" --network-security-group ""
二、删除经典NSG的注意事项
如果删除NSG时提示“仍与资源关联”,大概率是漏了解绑子网这类关联资源,先检查所有绑定关系:
# PowerShell查看NSG的所有关联资源 Get-AzureNetworkSecurityGroup -Name "NSG名称" | Select-Object -ExpandProperty AssociatedSubnets, AssociatedEndpoints
或者用CLI:
# CLI查看NSG的所有关联资源 azure network nsg show "NSG名称" --json | jq '.associatedSubnets, .associatedEndpoints'
把所有关联的子网、端点都解绑后,就可以正常删除NSG了:
# PowerShell删除NSG Remove-AzureNetworkSecurityGroup -Name "NSG名称"
# CLI删除NSG azure network nsg delete "NSG名称"
内容的提问来源于stack exchange,提问作者nicolamarangoni
相关产品推荐
相关产品推荐

