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

Azure应用网关WAF自定义规则PowerShell更新问题求助

Azure Application Gateway WAF自定义规则更新问题解决

问题背景

已实现Azure Application Gateway WAF自定义规则创建自动化,但更新现有自定义规则时会自动删除所有其他规则。Azure PowerShell暂无单独更新自定义规则的命令,官方已确认此情况。尝试通过.Add和.Remove操作修改规则时遇到以下错误:

错误1:添加IP时提示集合为固定大小

执行以下命令尝试向IPRestrict规则添加恶意IP时报错:

PS C:\Users\japuthiyakath> $policy = Get-AzApplicationGatewayFirewallPolicy -Name $policyName -ResourceGroupName $policyRG
PS C:\Users\japuthiyakath> (($policy.CustomRules | Where-Object {$_.Name -match "IPRestrict"}).MatchConditions.MatchValues).Add('2.3.6.9')

报错信息:

MethodInvocationException: Exception calling "Add" with "1" argument(s): "Collection was of a fixed size."

原因:通过Get-AzApplicationGatewayFirewallPolicy获取的MatchValues是固定大小的只读集合,无法直接调用.Add方法修改。

解决方法:将固定大小集合转换为可修改的ArrayList,添加IP后重新赋值回规则:

# 获取WAF策略对象
$policy = Get-AzApplicationGatewayFirewallPolicy -Name $policyName -ResourceGroupName $policyRG
# 定位目标自定义规则
$targetRule = $policy.CustomRules | Where-Object {$_.Name -match "IPRestrict"}
# 将MatchValues转为可修改的ArrayList
$matchValues = [System.Collections.ArrayList]$targetRule.MatchConditions.MatchValues
# 添加新IP(用Out-Null屏蔽Add操作的返回值)
$matchValues.Add('2.3.6.9') | Out-Null
# 将修改后的集合赋值回规则
$targetRule.MatchConditions.MatchValues = $matchValues
# 保存更新后的策略
Set-AzApplicationGatewayFirewallPolicy -InputObject $policy

错误2:无法通过.Remove移除指定规则

执行以下命令尝试移除IPRestrict规则时,无报错但规则未被移除:

PS C:\Users\japuthiyakath> ($policy.CustomRules | Where-Object {$_.Name -match "IPRestrict"}).Remove

而使用.RemoveAt(0)虽有效,但无法确定目标规则的索引位置。

原因:$policy.CustomRules同样是固定大小集合,直接对筛选后的规则调用.Remove不生效,需通过索引操作或重新构建规则集合。

解决方法1:通过索引移除并替换规则

# 获取WAF策略对象
$policy = Get-AzApplicationGatewayFirewallPolicy -Name $policyName -ResourceGroupName $policyRG
# 找到目标规则的索引
$ruleIndex = ($policy.CustomRules | Where-Object {$_.Name -match "IPRestrict"}).Index
# 移除指定索引的规则
$policy.CustomRules.RemoveAt($ruleIndex)
# 创建修改后的新规则(根据实际需求调整参数)
$newRule = New-AzApplicationGatewayFirewallCustomRule `
  -Name "IPRestrict" `
  -Priority 100 `
  -RuleType MatchRule `
  -MatchCondition (New-AzApplicationGatewayFirewallMatchCondition `
    -MatchValue "2.3.6.9","原有IP地址..." `
    -Operator IPMatch `
    -MatchVariable RemoteAddr) `
  -Action Block
# 将新规则添加到策略中
$policy.CustomRules.Add($newRule) | Out-Null
# 保存更新后的策略
Set-AzApplicationGatewayFirewallPolicy -InputObject $policy

解决方法2:重新构建规则集合
直接生成排除目标规则的新集合,再添加修改后的规则:

# 获取WAF策略对象
$policy = Get-AzApplicationGatewayFirewallPolicy -Name $policyName -ResourceGroupName $policyRG
# 生成排除目标规则的新集合
$updatedRules = $policy.CustomRules | Where-Object {$_.Name -notmatch "IPRestrict"}
# 创建修改后的新规则
$newRule = New-AzApplicationGatewayFirewallCustomRule `
  -Name "IPRestrict" `
  -Priority 100 `
  -RuleType MatchRule `
  -MatchCondition (New-AzApplicationGatewayFirewallMatchCondition `
    -MatchValue "2.3.6.9","原有IP地址..." `
    -Operator IPMatch `
    -MatchVariable RemoteAddr) `
  -Action Block
# 将新规则加入集合并赋值回策略
$policy.CustomRules = $updatedRules + $newRule
# 保存更新后的策略
Set-AzApplicationGatewayFirewallPolicy -InputObject $policy

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 10:37:32