如何从Azure Service Bus队列消息获取生产者/消费者信息以识别未知服务?
识别Azure中未知的队列消息发送源
1. 开启队列诊断日志
不管用的是Azure Storage Queue还是Service Bus Queue,先把诊断日志打开:
- Azure Storage Queue:找到对应存储账户的「诊断设置」,勾选
QueueRead、QueueWrite、QueueDelete日志类别,将日志输出到Log Analytics工作区。 - Azure Service Bus:进入Service Bus命名空间的「诊断设置」,勾选「OperationalLogs」和「MessagingLogs」,同样输出到Log Analytics。
这些日志会包含客户端IP、身份验证信息(如Azure AD主体、SAS令牌签名者),是定位来源的核心数据。
2. 用Log Analytics查询日志
日志同步到Log Analytics后,用Kusto语句筛选发送消息的操作:
Storage Queue 查询语句
StorageQueueLogs | where OperationName == "PutMessage" | project TimeGenerated, ClientIpAddress, Identity, AccountName, QueueName, RequestId | sort by TimeGenerated desc
Service Bus 查询语句
ServiceBusMessagingLogs | where OperationName == "SendMessage" or OperationName == "SendBatchMessages" | project TimeGenerated, ClientIpAddress, Identity, NamespaceName, QueueName, RequestId | sort by TimeGenerated desc
从结果里提取ClientIpAddress,在Azure Portal搜索「IP地址查找」,输入IP就能查到对应的Azure资源(比如VM、AKS节点、App Service),甚至外部IP归属。
如果日志里有Identity字段(如Azure AD应用ID),直接去Azure AD搜索该ID,找到对应的服务主体,就能关联到使用该身份发送消息的服务。
3. 排查队列访问权限
检查队列的权限配置,锁定拥有发送权限的实体:
- Storage Queue:查看存储账户的「访问控制(IAM)」,以及共享访问签名(SAS)的使用记录,排除已知K8s服务使用的身份,剩余的就是可疑对象。
- Service Bus:查询命名空间的「访问控制(IAM)」和「共享访问策略」,同样排除已知项,锁定未知的有权限实体。
4. 关联Azure资源流量日志
如果未知来源是Azure内部资源,开启对应资源的流量日志:
- AKS集群:进入AKS的「监视」-「日志」,查询容器出站流量,寻找向队列端点发起请求的记录。
- VM/App Service:开启VM的「网络流量日志」或App Service的「Web服务器日志」,排查向队列发送请求的条目。
5. 使用Azure Monitor预建工作簿
在Azure Monitor中搜索对应队列服务的预建工作簿,里面包含消息发送统计和来源分析,能快速定位异常发送源。
内容的提问来源于stack exchange,提问作者Francisco Perez Lefiman
相关产品推荐
相关产品推荐

