Ga naar inhoud

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

  1. 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).
  2. Haal de goedkeuring van security op en leg de onderbouwing en een voorbeeldrequest vast in het wijzigingsrecord.
  3. 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.
  4. Plan. Los elke preconditionmelding op.
  5. Review (WAF policy review) en apply.
  6. Test het request opnieuw en houd een lijst bij van alle exceptions met hun onderbouwing voor periodieke review.