WAF-uitzonderingen: configuratie, limieten en validatie¶
Deze pagina is voor het platformteam. Ze beschrijft hoe de Application Gateway-addon van de shared services managed rule exceptions in een WAF policy configureert, welke limieten gelden en welke controles bij het plannen draaien. Voor het aanvraagproces en de review, zie Application Gateway en WAF policy review.
Referentieontwerp, jouw deployment kan afwijken
Deze pagina beschrijft de appgw-addon van de code van de shared services. Of de Application Gateway-module van je hub
hetzelfde exceptions-blok ondersteunt, is in de bronnen niet gedocumenteerd. Controleer het schema van je gateway voordat je een
voorbeeld kopieert.
Exclusions en exceptions¶
Een WAF policy in prevention mode blokkeert requests die overeenkomen met zijn managed rules (bijvoorbeeld de OWASP-regelset). De module biedt twee manieren om een legitiem request dat wordt geblokkeerd af te handelen:
| Exclusion | Exception | |
|---|---|---|
| Key in het policybestand | managed_rules.<name>.exclusions |
exceptions (hoogste niveau van de policy) |
| Matcht op | Een requestattribuut (match_variable, selector, selector_match_operator) |
RemoteAddr, RequestHeader of RequestURI, met een lijst met waarden |
| Scope | Regelsets en regelgroepen met de uit te sluiten regels (excluded_rule_sets) |
Eén managed rule set, optioneel beperkt tot regelgroepen en regel-ID's |
| Gedeployd door | De azurerm provider |
Een azapi-update na de policy, omdat de azurerm provider exceptions niet ondersteunt |
Geef de voorkeur aan de smalste optie: één regel-ID, voor één waarde. Schakel geen hele regelset uit vanwege één request.
Structuur van het policybestand¶
Policybestanden zijn JSON, in de map die is ingesteld met waf_json_file_relative_path (standaard waf-definitions/) en gematcht met
waf_json_file_pattern (standaard *.json). Elk bestand heeft één object web_application_firewall_policy met een optionele name,
custom_rules, policy_settings, managed_rules en exceptions. Zonder name heet de policy
wafp-shared-hub-<environment>-<location_short>-001. Als je de naam van een bestaande policy wijzigt, wordt die vervangen.
Een exception (geanonimiseerd voorbeeld):
"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]
}
]
}
]
}
]
| Veld | Betekenis |
|---|---|
match_variable |
RemoteAddr, RequestHeader of RequestURI |
value_match_operator |
Contains, EndsWith, Equals, IPMatch of StartsWith |
values |
De waarden om op te matchen. Minstens één. |
selector, selector_match_operator |
Alleen voor RequestHeader, en dan zijn beide verplicht. De selector is de headernaam. De operator is Contains, EndsWith, Equals of StartsWith. |
exception_managed_rule_sets |
Precies één entry per exception: type, version en rule_groups |
rule_groups |
Lijst met rule_group_name en rules (regel-ID's). Het voorbeeld in de repository voor een RemoteAddr-exception gebruikt een lege lijst, die de validatie behandelt als de scope van de hele regelset. |
Een IPMatch-waarde moet een enkel IPv4-adres zijn. CIDR-ranges en IPv6 worden geweigerd.
Limieten¶
De controles dwingen de Azure-limieten af die op het moment van schrijven gelden:
| Limiet | Waarde |
|---|---|
| Exceptions per WAF policy | 60 |
| Exceptions in totaal over de WAF policies van één Application Gateway | 60 |
Waarden voor RemoteAddr-exceptions |
600 |
Waarden voor RequestURI-exceptions |
10 |
Waarden voor RequestHeader-exceptions |
10 |
Het totaal telt de exceptions van alle policybestanden in de map, niet alleen van één. Deze limieten zijn constanten in de module: controleer ze tegen de actuele Azure-limieten wanneer je upgradet.
Validatie bij het plannen¶
Alle controles zijn Terraform preconditions op de exception-resource. Een probleem stopt het plan, en dat is belangrijk: een falende
apply, nadat de managed rules zijn gewijzigd, zou de policy zonder exceptions achterlaten. Om dezelfde reden wordt bij elke
wijziging van managed_rules van een policy zijn exceptions automatisch opnieuw toegepast (een replace trigger), omdat Azure de
exceptions verwijdert wanneer de managed rules worden bijgewerkt.
| Controle | Faalt wanneer |
|---|---|
| Match variable | Niet RemoteAddr, RequestHeader of RequestURI |
| Value match operator | Niet een van de toegestane operators |
| IP-waarden | Een IPMatch-waarde is geen enkel IPv4-adres |
| Selector | Een RequestHeader-exception mist selector of selector_match_operator, of een andere match variable stelt ze in |
| Waarden | Een exception heeft geen waarden |
| Aantal regelsets | Een exception heeft niet precies één exception_managed_rule_sets-entry |
| Regelset | De type en version zijn niet een van de managed rule sets die in dezelfde policy zijn geconfigureerd |
| Regelgroep | rule_group_name bestaat niet in die regelset |
| Regel-ID | Een regel-ID bestaat niet in die regelgroep |
| Limieten | Een van de bovenstaande limieten wordt overschreden |
De controles op regelset, groep en regel gebruiken de catalogus van beschikbare WAF-regelsets van de subscription (het Azure-resourcetype
Microsoft.Network/applicationGatewayAvailableWafRuleSets), gelezen tijdens het plannen. De identity die het plan draait heeft leestoegang
daartoe nodig. De foutmeldingen noemen de geldige waarden, zodat je de juiste groep of het juiste regel-ID kunt kopiëren.
Een exception toevoegen¶
- Verzamel het bewijs uit het WAF-log van het geblokkeerde request: het regel-ID, de regelgroep, de URI en het argument of de header (Application Gateway-logs).
- Haal de goedkeuring van security op en leg de onderbouwing en een voorbeeldrequest vast in het wijzigingsrecord.
- Voeg de exception toe aan het policybestand. Kies de smalste match: een headerwaarde of een enkel adres is beter dan een URI die veel requests matcht.
- Plan. Los elke preconditionmelding op.
- Review (WAF policy review) en apply.
- Test het request opnieuw en houd een lijst bij van alle exceptions met hun onderbouwing voor periodieke review.