You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Azure CLI查询指定虚拟机关联的NSG名称

Azure CLI 查询虚拟机关联NSG名称操作方法

说明:Azure NSG的绑定对象为虚拟机网卡或虚拟网络子网,不会直接关联到虚拟机资源,因此az vm show命令无法直接返回NSG信息。


前置准备

你已提前确认以下参数:

  • 目标虚拟机所属订阅ID
  • 目标虚拟机所属资源组名称
  • 目标虚拟机名称

操作步骤(Bash环境示例,PowerShell修改变量定义规则即可复用)

1. 配置基础参数并切换目标订阅

# 替换为实际参数值
SUBSCRIPTION_ID="替换为你的订阅ID"
RESOURCE_GROUP="替换为资源组名称"
VM_NAME="替换为目标虚拟机名称"
# 切换到目标订阅,避免跨订阅查询异常
az account set --subscription $SUBSCRIPTION_ID

2. 获取虚拟机主网卡的资源ID

NIC_ID=$(az vm show \
  --resource-group $RESOURCE_GROUP \
  --name $VM_NAME \
  --query "networkProfile.networkInterfaces[0].id" \
  --output tsv)

3. 优先查询网卡直接绑定的NSG(网卡绑定的NSG优先级高于子网绑定)

NSG_NAME=$(az network nic show \
  --ids $NIC_ID \
  --query "networkSecurityGroup.id" \
  --output tsv | awk -F '/' '{print $NF}')
# 若返回值非空则已获取到NSG名称,可跳过下一步
echo $NSG_NAME

4. 网卡未绑定NSG时,查询网卡所属子网绑定的NSG

# 获取网卡所属子网ID
SUBNET_ID=$(az network nic show \
  --ids $NIC_ID \
  --query "ipConfigurations[0].subnet.id" \
  --output tsv)
# 提取子网所属虚拟网络名称、子网名称
VNET_NAME=$(echo $SUBNET_ID | awk -F '/' '{print $(NF-4)}')
SUBNET_NAME=$(echo $SUBNET_ID | awk -F '/' '{print $NF}')
# 查询子网绑定的NSG名称
NSG_NAME=$(az network vnet subnet show \
  --resource-group $RESOURCE_GROUP \
  --vnet-name $VNET_NAME \
  --name $SUBNET_NAME \
  --query "networkSecurityGroup.id" \
  --output tsv | awk -F '/' '{print $NF}')
echo $NSG_NAME

后续操作

获取到$NSG_NAME后,即可直接调用你已掌握的az network nsg rule update命令修改指定NSG规则。
注意:若上述两个查询步骤返回的NSG_NAME均为空,说明该虚拟机所在网络环境未绑定任何NSG,无对应规则可修改。

内容的提问来源于stack exchange,提问作者Eduardo Z Lorenzo Jr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:24:03