Azure Resource Graph查询Key Vault白名单IP重复问题求助
解决Key Vault白名单IP单条记录展示的KQL查询写法
要实现每个Key Vault对应一行、完整展示所有白名单IP的需求,无需使用mv-expand或join,直接利用KQL的数组处理函数strcat_array即可完成。
正确查询写法
Search-AzGraph -Query "resources | where type == 'microsoft.keyvault/vaults' | where properties.publicNetworkAccess == 'Enabled' | extend ipRules = properties.networkAcls.ipRules | project kvName = name, kvRule = case( array_length(ipRules) == 0, '', strcat_array(ipRules.value, ', ') )"
原问题分析
- 初始查询用
mv-expand拆分ipRules数组,导致每个IP对应一行,自然出现重复Vault名称和多行记录。 - 扩展属性后的查询仍依赖
mv-expand拆分数组,无法实现单行展示。 - 使用
join的思路错误:join不支持动态类型作为关联键,且完全没必要用关联操作处理单表内的数组字段。
查询逻辑说明
- 过滤资源:筛选类型为Key Vault且公网访问已启用的资源。
- 提取IP规则数组:直接获取
properties.networkAcls.ipRules动态数组。 - 拼接IP字符串:
- 用
array_length判断数组是否为空,为空则返回空字符串。 - 用
strcat_array将数组中每个元素的value字段(即IP地址)拼接成逗号分隔的字符串。
- 用
- 投影字段:输出Vault名称和拼接后的IP规则字符串。
内容的提问来源于stack exchange,提问作者user2954003
相关产品推荐
相关产品推荐

