You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PowerShell查询Azure WAF日志返回BadRequest错误如何解决?

错误原因
  • Kusto查询语法不兼容:你最终使用的WAF日志查询末尾带了render timechart语句,该语句仅用于Azure门户日志查询的可视化渲染,Invoke-AzOperationalInsightsQuery命令调用Log Analytics API时不支持该语法,这是触发BadRequest的最常见原因。
  • 权限配置错误:你为服务主体授予的AuditLog.Read.All是Azure AD日志的读取权限,和Log Analytics工作区数据读取无关;即使分配了Contributor角色,也可能因工作区的权限隔离策略,缺少专门的日志读取权限。
  • 基础配置错误:存在工作区ID填写错误、应用网关未开启WAF日志投递到目标工作区、服务主体登录的租户/订阅和工作区所属租户/订阅不匹配三类可能。
  • 查询的表不存在:如果目标工作区没有接入WAF日志,AzureDiagnostics表下不存在对应的ApplicationGatewayFirewallLog分类,也可能触发请求错误。
解决方法
  1. 修正Kusto查询语句,删除render timechart部分,同时建议主动指定查询时间范围,避免默认时间范围超限:
$TenantId = '<tenant id>'
$AzureADCred = Get-Credential -UserName <服务主体客户端ID> -Message "Enter secret value"
Connect-AzAccount -ServicePrincipal -Credential $AzureADCred -TenantId $TenantId

# 切换到工作区所属订阅,避免上下文不匹配
Set-AzContext -SubscriptionId "<工作区所属订阅ID>"

$WorkspaceID = '<workspace id>'
$UserPrincipalName = 'user@domain.com'

# 修正后的WAF拦截日志查询语句
$query = 'AzureDiagnostics | where ResourceProvider == "MICROSOFT.NETWORK" and Category == "ApplicationGatewayFirewallLog" | where TimeGenerated > ago(7d) | summarize count() by ruleId_s, bin(TimeGenerated, 1m) | where count_ > 10'

$result = Invoke-AzOperationalInsightsQuery -WorkspaceId $WorkspaceID -Query $query
# 打印查询结果验证
$result.Results

Disconnect-AzAccount
  1. 为服务主体分配目标Log Analytics工作区的Log Analytics Reader角色,该角色是读取工作区日志的最小权限角色,比通用的Contributor角色更适配当前场景。
  2. 先进入Azure门户的目标Log Analytics工作区,在「日志」模块中直接运行上述修正后的查询,确认查询本身可以正常返回结果,排除表不存在、日志未投递、语法错误等问题。

内容的提问来源于stack exchange,提问作者StackExchangeGuy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 10:54:03