如何查询使用Azure Metadata Services的资源列表
如何获取所有正在使用Azure Instance Metadata Service (IMDS)的资源清单
你收到的通知核心是IMDS Attestation端点即将切换根证书,若业务硬编码了Baltimore CyberTrust Root CA且未及时调整,会出现认证失败、服务中断问题,可按以下步骤定位所有调用IMDS的资源:
方法1:用Azure Resource Graph先圈定排查范围
IMDS是仅能从Azure计算实例本地访问的服务,公网无法调用,首先可以通过资源图查询拉出所有具备IMDS访问权限的计算类资源,缩小排查边界:
- 打开Azure门户的Resource Graph资源浏览器
- 运行以下Kusto查询:
resources | where type in ( 'microsoft.compute/virtualmachines', 'microsoft.compute/virtualmachinescalesets', 'microsoft.containerservice/managedclusters', 'microsoft.hdinsight/clusters', 'microsoft.servicefabric/clusters', 'microsoft.batch/batchaccounts' ) | project 资源名称=name, 资源类型=type, 资源组=resourceGroup, 区域=location, 订阅ID=subscriptionId
注意:该查询仅返回可能调用IMDS的资源范围,无法直接确认资源是否真的发起过IMDS调用。
方法2:通过Azure Monitor日志定位实际调用的资源
如果你的订阅已经开启Azure Monitor日志收集,IMDS的调用记录会投递到Log Analytics工作区,直接运行以下查询即可拉取指定时间范围内实际调用过IMDS Attestation端点的资源清单,精准度最高:
- 进入你绑定的Log Analytics工作区,打开日志查询界面
- 运行以下Kusto查询,可根据自己的日志留存时间调整查询时间范围,建议至少拉取30天的记录:
AzureDiagnostics | where ResourceProvider == "MICROSOFT.COMPUTE" | where Message contains "metadata.microsoft.com/metadata/attested" | parse Message with * "resourceId=" resourceId ";" * | project 调用时间=TimeGenerated, 资源ID=resourceId, 调用方IP=CallerIpAddress, 请求UA=UserAgent | distinct 资源ID
查询返回的资源ID就是近段时间实际发起过IMDS Attestation接口调用的资源。
方法3:实例内部排查补漏
如果没有开启全量日志收集,针对方法1圈定的资源,可以直接进入实例内部排查实际调用进程:
- 针对独立虚拟机、虚拟机规模集节点:远程连接实例后,通过网络监控工具(如
netstat、tcpdump)排查发往IMDS固定服务IP169.254.169.254的进程,重点确认是否有调用/metadata/attested路径的请求,同时检查对应进程的证书信任库,排查是否存在硬编码Baltimore根证书的情况 - 针对AKS集群:可通过DaemonSet在所有节点下发轻量网络监控脚本,统一排查节点、Pod层面发往169.254.169.254的请求,同时检查工作负载中自定义应用的证书配置
- 针对HDInsight、Service Fabric等带计算节点的PaaS服务:先确认平台侧已完成根证书适配,再排查你自行部署在服务上的自定义应用即可
注意:IMDS是本地链路服务,IP地址169.254.169.254是不可路由的,不存在公网资源、本地IDC资源、其他云资源调用该服务的可能,无需排查Azure以外的资产。排查到硬编码Baltimore根证书的应用,需要尽快将信任根更新为DigiCert全局根G2证书,避免证书切换后出现服务故障。
内容的提问来源于stack exchange,提问作者itye1970
相关产品推荐
相关产品推荐

