WAF-Ausnahmen: Konfiguration, Limits und Validierung¶
Diese Seite richtet sich an das Plattform-Team. Sie beschreibt, wie das Application-Gateway-Addon der Shared Services Managed-Rule- Ausnahmen in einer WAF-Policy konfiguriert, welche Limits gelten und welche Prüfungen beim plan laufen. Zum Anfrageprozess und zum Review siehe Application Gateway und WAF-Policy-Review.
Referenzdesign, dein Deployment kann abweichen
Diese Seite beschreibt das appgw-Addon des Shared-Services-Codes. Ob das Application-Gateway-Modul deines hubs
denselben exceptions-Block unterstützt, ist in den Quellen nicht dokumentiert. Prüfe das Schema deines Gateways, bevor du ein
Beispiel kopierst.
Ausschlüsse und Ausnahmen¶
Eine WAF-Policy im Prevention-Modus blockiert Anfragen, die zu ihren Managed Rules passen (zum Beispiel dem OWASP-Regelsatz). Das Modul bietet zwei Wege, mit einer legitimen Anfrage umzugehen, die blockiert wird:
| Ausschluss (Exclusion) | Ausnahme (Exception) | |
|---|---|---|
| Key in der Policy-Datei | managed_rules.<name>.exclusions |
exceptions (oberste Ebene der Policy) |
| Matcht auf | Ein Anfrageattribut (match_variable, selector, selector_match_operator) |
RemoteAddr, RequestHeader oder RequestURI, mit einer Liste von Werten |
| Scope | Regelsätze und Rule Groups mit den auszuschließenden Regeln (excluded_rule_sets) |
Ein Managed Rule Set, optional beschränkt auf Rule Groups und Rule IDs |
| Deployt von | Dem azurerm-Provider |
Einem azapi-Update nach der Policy, weil der azurerm-Provider keine Ausnahmen unterstützt |
Bevorzuge die engste Option: eine Rule ID, für einen Wert. Deaktiviere keinen Regelsatz wegen einer einzelnen Anfrage.
Aufbau der Policy-Datei¶
Policy-Dateien sind JSON, im Ordner, den waf_json_file_relative_path festlegt (Standard waf-definitions/), und werden mit
waf_json_file_pattern (Standard *.json) gefunden. Jede Datei hat ein Objekt web_application_firewall_policy mit optionalen Feldern name,
custom_rules, policy_settings, managed_rules und exceptions. Ohne name heißt die Policy
wafp-shared-hub-<environment>-<location_short>-001. Eine Namensänderung einer bestehenden Policy ersetzt sie.
Eine Ausnahme (anonymisiertes Beispiel):
"exceptions": [
{
"match_variable": "RequestHeader",
"selector": "X-Trusted-Partner",
"selector_match_operator": "Equals",
"value_match_operator": "Equals",
"values": ["true"],
"exception_managed_rule_sets": [
{
"type": "OWASP",
"version": "3.2",
"rule_groups": [
{
"rule_group_name": "REQUEST-942-APPLICATION-ATTACK-SQLI",
"rules": [942100, 942110]
}
]
}
]
}
]
| Feld | Bedeutung |
|---|---|
match_variable |
RemoteAddr, RequestHeader oder RequestURI |
value_match_operator |
Contains, EndsWith, Equals, IPMatch oder StartsWith |
values |
Die Werte, auf die gematcht wird. Mindestens einer. |
selector, selector_match_operator |
Nur für RequestHeader, und dann sind beide Pflicht. Der Selector ist der Header-Name. Der Operator ist Contains, EndsWith, Equals oder StartsWith. |
exception_managed_rule_sets |
Genau ein Eintrag pro Ausnahme: type, version und rule_groups |
rule_groups |
Liste aus rule_group_name und rules (Rule IDs). Das Repository-Beispiel für eine RemoteAddr-Ausnahme nutzt eine leere Liste, die die Validierung als Scope des gesamten Regelsatzes behandelt. |
Ein IPMatch-Wert muss eine einzelne IPv4-Adresse sein. CIDR-Bereiche und IPv6 werden abgelehnt.
Limits¶
Die Prüfungen erzwingen die Azure-Limits, die zum Zeitpunkt des Schreibens gelten:
| Limit | Wert |
|---|---|
| Ausnahmen pro WAF-Policy | 60 |
| Ausnahmen insgesamt über die WAF-Policies eines Application Gateways | 60 |
Werte für RemoteAddr-Ausnahmen |
600 |
Werte für RequestURI-Ausnahmen |
10 |
Werte für RequestHeader-Ausnahmen |
10 |
Die Gesamtzahl zählt die Ausnahmen aller Policy-Dateien im Ordner, nicht nur einer. Diese Limits sind Konstanten im Modul: Prüfe sie bei einem Upgrade gegen die aktuellen Azure-Limits.
Validierung beim plan¶
Alle Prüfungen sind Terraform-Preconditions auf der Ausnahme-Ressource. Ein Problem stoppt den plan, und das ist wichtig: Ein Fehler
beim apply, nachdem sich die Managed Rules geändert haben, würde die Policy ohne Ausnahmen zurücklassen. Aus demselben Grund wendet jede
Änderung an managed_rules einer Policy ihre Ausnahmen automatisch erneut an (ein Replace-Trigger), weil Azure die
Ausnahmen entfernt, wenn die Managed Rules aktualisiert werden.
| Prüfung | Schlägt fehl, wenn |
|---|---|
| Match-Variable | Nicht RemoteAddr, RequestHeader oder RequestURI |
| Value-Match-Operator | Keiner der erlaubten Operatoren |
| IP-Werte | Ein IPMatch-Wert ist keine einzelne IPv4-Adresse |
| Selector | Einer RequestHeader-Ausnahme fehlt selector oder selector_match_operator, oder eine andere Match-Variable setzt sie |
| Werte | Eine Ausnahme hat keine Werte |
| Anzahl der Rule Sets | Eine Ausnahme hat nicht genau einen exception_managed_rule_sets-Eintrag |
| Rule Set | type und version gehören zu keinem der Managed Rule Sets, die in derselben Policy konfiguriert sind |
| Rule Group | rule_group_name existiert in diesem Rule Set nicht |
| Rule ID | Eine Rule ID existiert in dieser Rule Group nicht |
| Limits | Eines der obigen Limits wird überschritten |
Die Prüfungen für Rule Set, Group und Rule nutzen den Katalog der verfügbaren WAF-Regelsätze der subscription (der Azure-Ressourcentyp
Microsoft.Network/applicationGatewayAvailableWafRuleSets), der beim plan gelesen wird. Die Identität, die den plan ausführt, braucht Lesezugriff
darauf. Die Fehlermeldungen listen die gültigen Werte auf, sodass du die richtige Group oder Rule ID kopieren kannst.
Eine Ausnahme hinzufügen¶
- Sammle die Belege aus dem WAF-Log der blockierten Anfrage: die Rule ID, die Rule Group, die URI und das Argument oder den Header (Application-Gateway-Logs).
- Hol dir die Freigabe von Security und halte die Begründung und eine Beispielanfrage im Change Record fest.
- Füge die Ausnahme in die Policy-Datei ein. Wähle den engsten Match: Ein Header-Wert oder eine einzelne Adresse ist besser als eine URI, die auf viele Anfragen passt.
- Führe den plan aus. Behebe jede Precondition-Meldung.
- Review (WAF-Policy-Review) und apply.
- Teste die Anfrage erneut und führe eine Liste aller Ausnahmen mit ihrer Begründung für die regelmäßige Überprüfung.