@@ -6083,3 +6083,154 @@ function Test-ApplicationGatewayFirewallPolicyComputedDisabledRules
60836083 Clean - ResourceGroup $rgname
60846084 }
60856085}
6086+
6087+ <#
6088+ . SYNOPSIS
6089+ Helper function for testing WAF policy with rate limiting rules and XFF header group-by variables.
6090+ This helper reduces code duplication across multiple test scenarios.
6091+ #>
6092+ function Test-ApplicationGatewayFirewallPolicyWithRateLimitRuleXFFHeaderInternal {
6093+ param (
6094+ [Parameter (Mandatory = $true )]
6095+ [ValidateSet (" ClientAddrXFFHeader" , " GeoLocationXFFHeader" )]
6096+ [string ]$GroupByVariableName
6097+ )
6098+
6099+ # Setup
6100+ $location = Get-ProviderLocation " Microsoft.Network/applicationGateways" " West US 2"
6101+ $rgname = Get-ResourceGroupName
6102+ $wafPolicyName = " wafPolicy1"
6103+
6104+ try {
6105+
6106+ $resourceGroup = New-AzResourceGroup - Name $rgname - Location $location - Tags @ { testtag = " APPGw tag" }
6107+
6108+ # WAF Policy with rate limiting rule custom Rule
6109+ $variable = New-AzApplicationGatewayFirewallMatchVariable - VariableName RequestHeaders - Selector Malicious- Header
6110+ $condition = New-AzApplicationGatewayFirewallCondition - MatchVariable $variable - Operator Any - NegationCondition $False
6111+ $groupbyVar = New-AzApplicationGatewayFirewallCustomRuleGroupByVariable - VariableName $GroupByVariableName
6112+ $groupbyUserSes = New-AzApplicationGatewayFirewallCustomRuleGroupByUserSession - GroupByVariable $groupbyVar
6113+ $customRule = New-AzApplicationGatewayFirewallCustomRule - Name example - Priority 2 - RateLimitDuration OneMin - RateLimitThreshold 10 - RuleType RateLimitRule - MatchCondition $condition - GroupByUserSession $groupbyUserSes - Action Block
6114+
6115+ $policySettings = New-AzApplicationGatewayFirewallPolicySetting - Mode Prevention - State Enabled - MaxFileUploadInMb 70 - MaxRequestBodySizeInKb 70
6116+ $managedRuleSet = New-AzApplicationGatewayFirewallPolicyManagedRuleSet - RuleSetType " OWASP" - RuleSetVersion " 3.2"
6117+ $managedRule = New-AzApplicationGatewayFirewallPolicyManagedRule - ManagedRuleSet $managedRuleSet
6118+ New-AzApplicationGatewayFirewallPolicy - Name $wafPolicyName - ResourceGroupName $rgname - Location $location - ManagedRule $managedRule - PolicySetting $policySettings - CustomRule $customRule
6119+
6120+ $policy = Get-AzApplicationGatewayFirewallPolicy - Name $wafPolicyName - ResourceGroupName $rgname
6121+
6122+ # Check WAF policy
6123+ Assert-AreEqual $policy.CustomRules [0 ].Name $customRule.Name
6124+ Assert-AreEqual $policy.CustomRules [0 ].RuleType $customRule.RuleType
6125+ Assert-AreEqual $policy.CustomRules [0 ].Action $customRule.Action
6126+ Assert-AreEqual $policy.CustomRules [0 ].Priority $customRule.Priority
6127+ Assert-AreEqual $policy.CustomRules [0 ].RateLimitDuration $customRule.RateLimitDuration
6128+ Assert-AreEqual $policy.CustomRules [0 ].RateLimitThreshold $customRule.RateLimitThreshold
6129+ Assert-AreEqual $policy.CustomRules [0 ].State " Enabled"
6130+ Assert-AreEqual $policy.CustomRules [0 ].MatchConditions[0 ].OperatorProperty $customRule.MatchConditions [0 ].OperatorProperty
6131+ Assert-AreEqual $policy.CustomRules [0 ].MatchConditions[0 ].NegationConditon $customRule.MatchConditions [0 ].NegationConditon
6132+ Assert-AreEqual $policy.CustomRules [0 ].MatchConditions[0 ].MatchVariables[0 ].VariableName $customRule.MatchConditions [0 ].MatchVariables[0 ].VariableName
6133+ Assert-AreEqual $policy.CustomRules [0 ].MatchConditions[0 ].MatchVariables[0 ].Selector $customRule.MatchConditions [0 ].MatchVariables[0 ].Selector
6134+ Assert-AreEqual $policy.CustomRules [0 ].GroupByUserSession[0 ].GroupByVariables[0 ].VariableName $customRule.GroupByUserSession [0 ].GroupByVariables[0 ].VariableName
6135+ Assert-AreEqual $policy.PolicySettings.FileUploadLimitInMb $policySettings.FileUploadLimitInMb
6136+ Assert-AreEqual $policy.PolicySettings.MaxRequestBodySizeInKb $policySettings.MaxRequestBodySizeInKb
6137+ Assert-AreEqual $policy.PolicySettings.RequestBodyCheck $policySettings.RequestBodyCheck
6138+ Assert-AreEqual $policy.PolicySettings.Mode $policySettings.Mode
6139+ Assert-AreEqual $policy.PolicySettings.State $policySettings.State
6140+
6141+ $policy.CustomRules [0 ].State = " Disabled"
6142+ Set-AzApplicationGatewayFirewallPolicy - InputObject $policy
6143+ $policy1 = Get-AzApplicationGatewayFirewallPolicy - Name $wafPolicyName - ResourceGroupName $rgname
6144+ Assert-AreEqual $policy1.CustomRules [0 ].State " Disabled"
6145+ }
6146+ finally {
6147+ # Cleanup
6148+ Clean - ResourceGroup $rgname
6149+ }
6150+ }
6151+
6152+ function Test-ApplicationGatewayFirewallPolicyWithRateLimitRuleClientAddrXFFHeader {
6153+ Test-ApplicationGatewayFirewallPolicyWithRateLimitRuleXFFHeaderInternal - GroupByVariableName " ClientAddrXFFHeader"
6154+ }
6155+
6156+ function Test-ApplicationGatewayFirewallPolicyWithRateLimitRuleGeoLocationXFFHeader {
6157+ Test-ApplicationGatewayFirewallPolicyWithRateLimitRuleXFFHeaderInternal - GroupByVariableName " GeoLocationXFFHeader"
6158+ }
6159+
6160+ <#
6161+ . SYNOPSIS
6162+ Helper function for testing WAF policy custom rule removal with XFF header group-by variables.
6163+ This helper reduces code duplication across multiple test scenarios.
6164+ #>
6165+ function Test-ApplicationGatewayFirewallPolicyCustomRuleXFFHeaderRemovalInternal {
6166+ param (
6167+ [Parameter (Mandatory = $true )]
6168+ [ValidateSet (" ClientAddrXFFHeader" , " GeoLocationXFFHeader" )]
6169+ [string ]$GroupByVariableName
6170+ )
6171+
6172+ # Setup
6173+ $location = Get-ProviderLocation " Microsoft.Network/applicationGateways" " West US 2"
6174+ $rgname = Get-ResourceGroupName
6175+ $wafPolicyName = " wafPolicy1"
6176+
6177+ try {
6178+
6179+ $resourceGroup = New-AzResourceGroup - Name $rgname - Location $location - Tags @ { testtag = " APPGw tag" }
6180+
6181+ # WAF Policy with rate limiting rule custom Rule
6182+ $variable = New-AzApplicationGatewayFirewallMatchVariable - VariableName RequestHeaders - Selector Malicious- Header
6183+ $condition = New-AzApplicationGatewayFirewallCondition - MatchVariable $variable - Operator Any - NegationCondition $False
6184+ $groupbyVar = New-AzApplicationGatewayFirewallCustomRuleGroupByVariable - VariableName $GroupByVariableName
6185+ $groupbyUserSes = New-AzApplicationGatewayFirewallCustomRuleGroupByUserSession - GroupByVariable $groupbyVar
6186+ $customRule = New-AzApplicationGatewayFirewallCustomRule - Name example - Priority 2 - RateLimitDuration OneMin - RateLimitThreshold 10 - RuleType RateLimitRule - MatchCondition $condition - GroupByUserSession $groupbyUserSes - Action Block
6187+
6188+ $policySettings = New-AzApplicationGatewayFirewallPolicySetting - Mode Prevention - State Enabled - MaxFileUploadInMb 70 - MaxRequestBodySizeInKb 70
6189+ $managedRuleSet = New-AzApplicationGatewayFirewallPolicyManagedRuleSet - RuleSetType " OWASP" - RuleSetVersion " 3.2"
6190+ $managedRule = New-AzApplicationGatewayFirewallPolicyManagedRule - ManagedRuleSet $managedRuleSet
6191+ New-AzApplicationGatewayFirewallPolicy - Name $wafPolicyName - ResourceGroupName $rgname - Location $location - ManagedRule $managedRule - PolicySetting $policySettings - CustomRule $customRule
6192+
6193+ $policy = Get-AzApplicationGatewayFirewallPolicy - Name $wafPolicyName - ResourceGroupName $rgname
6194+
6195+ # Check WAF policy
6196+ Assert-AreEqual $policy.CustomRules [0 ].Name $customRule.Name
6197+ Assert-AreEqual $policy.CustomRules [0 ].RuleType $customRule.RuleType
6198+ Assert-AreEqual $policy.CustomRules [0 ].Action $customRule.Action
6199+ Assert-AreEqual $policy.CustomRules [0 ].Priority $customRule.Priority
6200+ Assert-AreEqual $policy.CustomRules [0 ].RateLimitDuration $customRule.RateLimitDuration
6201+ Assert-AreEqual $policy.CustomRules [0 ].RateLimitThreshold $customRule.RateLimitThreshold
6202+ Assert-AreEqual $policy.CustomRules [0 ].State " Enabled"
6203+ Assert-AreEqual $policy.CustomRules [0 ].MatchConditions[0 ].OperatorProperty $customRule.MatchConditions [0 ].OperatorProperty
6204+ Assert-AreEqual $policy.CustomRules [0 ].MatchConditions[0 ].NegationConditon $customRule.MatchConditions [0 ].NegationConditon
6205+ Assert-AreEqual $policy.CustomRules [0 ].MatchConditions[0 ].MatchVariables[0 ].VariableName $customRule.MatchConditions [0 ].MatchVariables[0 ].VariableName
6206+ Assert-AreEqual $policy.CustomRules [0 ].MatchConditions[0 ].MatchVariables[0 ].Selector $customRule.MatchConditions [0 ].MatchVariables[0 ].Selector
6207+ Assert-AreEqual $policy.CustomRules [0 ].GroupByUserSession[0 ].GroupByVariables[0 ].VariableName $customRule.GroupByUserSession [0 ].GroupByVariables[0 ].VariableName
6208+ Assert-AreEqual $policy.PolicySettings.FileUploadLimitInMb $policySettings.FileUploadLimitInMb
6209+ Assert-AreEqual $policy.PolicySettings.MaxRequestBodySizeInKb $policySettings.MaxRequestBodySizeInKb
6210+ Assert-AreEqual $policy.PolicySettings.RequestBodyCheck $policySettings.RequestBodyCheck
6211+ Assert-AreEqual $policy.PolicySettings.Mode $policySettings.Mode
6212+ Assert-AreEqual $policy.PolicySettings.State $policySettings.State
6213+
6214+ $policy.CustomRules [0 ].State = " Disabled"
6215+ Set-AzApplicationGatewayFirewallPolicy - InputObject $policy
6216+ $policy1 = Get-AzApplicationGatewayFirewallPolicy - Name $wafPolicyName - ResourceGroupName $rgname
6217+ Assert-AreEqual $policy1.CustomRules [0 ].State " Disabled"
6218+
6219+ # Remove Custom Rule
6220+ Remove-AzApplicationGatewayFirewallCustomRule - Name $customRule.Name - ResourceGroupName $rgname - PolicyName $wafPolicyName
6221+ $policynew = Get-AzApplicationGatewayFirewallPolicy - Name $wafPolicyName - ResourceGroupName $rgname
6222+ Assert-Null $policynew.CustomRules [0 ]
6223+ }
6224+ finally {
6225+ # Cleanup
6226+ Clean - ResourceGroup $rgname
6227+ }
6228+ }
6229+
6230+ function Test-ApplicationGatewayFirewallPolicyCustomRuleClientAddrXFFHeaderRemoval {
6231+ Test-ApplicationGatewayFirewallPolicyCustomRuleXFFHeaderRemovalInternal - GroupByVariableName " ClientAddrXFFHeader"
6232+ }
6233+
6234+ function Test-ApplicationGatewayFirewallPolicyCustomRuleGeoLocationXFFHeaderRemoval {
6235+ Test-ApplicationGatewayFirewallPolicyCustomRuleXFFHeaderRemovalInternal - GroupByVariableName " GeoLocationXFFHeader"
6236+ }
0 commit comments