Azure资源图查询以查找具有公共IP的所有VM

时间:2019-06-25 16:33:11

标签: azure resources

尝试获取附加了公共IP的所有订阅中所有虚拟机的列表。

从历史上看,我不得不运行两个单独的查询:

az graph query -q "where type =~ 'microsoft.network/publicipaddresses' | project tenantId, subscriptionId, properties.ipAddress, name, id, properties.dnsSettings.fqdn, properties.ipConfiguration.id" --output tsv --first 5000 > ips.csv

az graph query -q "where type =~ 'microsoft.network/networkInterfaces' | project name, id, properties.virtualMachine.id, properties.ipConfigurations[0].properties.publicIPAddress.id, properties.networkSecurityGroup.id" --output tsv --first 5000 > networks.csv

但是,这使我得到的结果永远需要在Excel中进行格式化,包括修剪,vlookups等。

真的在这里挣扎。我是Resource Graph的新手,并且正在使用资源管理器。我可以获得虚拟机列表,可以获取网卡列表,可以获取公共IP列表,但是在将它们放在一起时遇到了麻烦:(

1 个答案:

答案 0 :(得分:0)

假设您只使用ARM(Azure资源管理器)VM,可以使用下面的Azure资源图查询来获取所有VM及其所有公共IP和私有IP,前提是该计算机至少具有一个公共IP。不同于Microsoft文档here中当前提供的一种,无论是由于存在多个vmNics还是每个vmNic具有多个IP配置,下面的一种都可用于多个IP。

输出示例:

enter image description here

ARG查询:

Resources
    | where type =~ 'microsoft.compute/virtualmachines'
    | project vmId = tolower(tostring(id)), vmName = name
    | join (Resources
        | where type =~ 'microsoft.network/networkinterfaces'
        | mv-expand ipconfig=properties.ipConfigurations
        | project vmId = tolower(tostring(properties.virtualMachine.id)), privateIp = ipconfig.properties.privateIPAddress, publicIpId = tostring(ipconfig.properties.publicIPAddress.id)
        | join kind=leftouter (Resources
            | where type =~ 'microsoft.network/publicipaddresses'
            | project publicIpId = id, publicIp = properties.ipAddress
        ) on publicIpId
        | project-away publicIpId, publicIpId1
        | summarize privateIps = make_list(privateIp), publicIps = make_list(publicIp) by vmId
    ) on vmId
    | project-away vmId1
    | sort by vmName asc
| where array_length(publicIps)>0

通过上面的查询到Azure资源图资源管理器的直接链接是here

有关如何逐步构建与此查询非常相似的详细信息,请参见here。如果您要查找“经典” Azure ASM(Azure服务管理器)VM,则在同一篇文章here中将介绍针对它们的ARG查询。