WAF en eigen domein¶
Deze pagina is voor het platformteam. Ze beschrijft hoe je de portal achter een Application Gateway met een Web Application Firewall (WAF) plaatst en onder een eigen domein aanbiedt. Het is een referentieontwerp: de onderstaande instellingen werken voor de portal, maar jouw gatewaymodule, namen en prioriteiten zullen afwijken. De WAF is optioneel en wordt geregeld voordat de deployment start (Prerequisites).
flowchart LR
user[User] -->|HTTPS, custom domain| agw[Application Gateway<br/>WAF policy, HTTPS listener]
agw -->|HTTPS, rewrite headers| app[Portal web app<br/>private endpoint]
agw -.->|probe| h[/.backstage/health/v1/liveness/]
Eigen domein¶
- Entra app registration. Voeg de redirect-URI
https://<portal-domain>/api/auth/microsoft/handler/frametoe aan de app registration van de omgeving. - Terraform. Zet de variabele
domain_namevan de modulebackstagein de omgevingsroot. De module stelt dan de app settingsAPP_CONFIG_app_baseUrlenAPP_CONFIG_backend_baseUrlin, zodat de backend de URL kent die gebruikers gebruiken.
module "backstage" {
source = "../../modules/backstage"
# ...
domain_name = "portal.contoso.example"
}
- DNS en certificaat. De klant levert het DNS-record dat naar de gateway (of web app) wijst en een TLS-certificaat. Zie Prerequisites.
WAF-policy¶
Gebruik per omgeving één WAF-policy, gekoppeld aan de HTTPS-listener van de portal. De Default Rule Set 2.1 (DRS 2.1) van Microsoft werkt het best met de portal als je ook de fine-tuningrichtlijnen van Microsoft ervoor toepast.
| Instelling | Waarde |
|---|---|
| Modus | Prevention |
| Rule set | Microsoft_DefaultRuleSet 2.1 |
| Controle van de request body | Uit in het voorbeeld (maximale bodygrootte 128 KB, limiet voor bestandsupload 100 MB) |
| Log scrubbing | Aan |
Regel-overrides in de voorbeeldpolicy:
| Regelgroep | Regel | Instelling | Reden |
|---|---|---|---|
| SQLI | 942110, 942150, 942260, 942430, 942440 | Uitgeschakeld | Fine-tuningrichtlijnen van Microsoft voor DRS 2.1 |
| LFI | 930120 | Ingeschakeld, actie Log | De portal kan requests genereren die valse positieven veroorzaken |
| PROTOCOL-ENFORCEMENT | 920440 | Ingeschakeld, actie Log | Idem |
Tune eerst in Log-modus
Als je geblokkeerde requests ziet die je niet kunt verklaren, zet de regel dan op Log, zoek het request op in de WAF-logs en tune vanaf daar.
Application Gateway¶
Maak de volgende elementen voor de portal aan. De namen zijn voorbeelden.
| Element | Configuratie |
|---|---|
| Backend pool | FQDN van de web app, <app-service-name>.azurewebsites.net |
| Backend setting | HTTPS op poort 443, hostnaam ingesteld op de FQDN van de web app, request timeout 30 seconden, cookie-based affinity uitgeschakeld |
| HTTPS-listener | Hostnaam <portal-domain>, SNI vereist, certificaat uit Key Vault, de WAF-policy gekoppeld |
| HTTP-listener | Stuurt door naar de HTTPS-listener (permanent, pad en query behouden), zodat een URL zonder protocol werkt |
| Routing rules | Eén voor de HTTPS-listener (backend pool, backend setting, rewrite rule set), één voor de HTTP-listener (redirect) |
| Rewrite rule set | Voegt requestheaders toe: X-Forwarded-Host met {var_host} en X-Original-URL met {var_uri_path} |
| Health probe | HTTPS, host ingesteld op de FQDN van de web app, interval 30 s, timeout 30 s, unhealthy threshold 3, verwacht status 200 |
Endpoint voor de health probe¶
De portal heeft twee health-endpoints.
| Endpoint | Gedrag |
|---|---|
/.backstage/health/v1/liveness |
Geeft 200 terug zolang het proces draait |
/.backstage/health/v1/readiness |
Geeft ook 503 terug voordat de backend klaar is met opstarten, tijdens het afsluiten en zolang de credential van de Microsoft auth provider de validatie niet doorstaat |
De voorbeeldprobe gebruikt liveness. Daarmee blijft de portal bereikbaar terwijl een falende credential wordt hersteld. Gebruik readiness als je wilt dat de gateway een instantie uit de pool haalt tijdens het opstarten, het afsluiten of een credentialfout.
Toegang tot de web app¶
Bepaal of de web app alleen via de gateway bereikbaar is. De module backstage heeft een instelling voor publieke netwerktoegang met drie waarden: none, full (de standaard) en een beperkte waarde bedoeld voor de Azure AI agent service. Zie Architectuur. Als je de gateway als enige ingang gebruikt, beperk dan de directe toegang tot de web app.