如何通过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
相关产品推荐
相关产品推荐

