Zum Inhalt

WAF und Custom Domain

Diese Seite richtet sich an das Plattform-Team. Sie beschreibt, wie du das Portal hinter ein Application Gateway mit Web Application Firewall (WAF) stellst und unter einer Custom Domain bereitstellst. Sie ist ein Referenzdesign: Die folgenden Einstellungen funktionieren für das Portal, aber dein Gateway-module, deine Namen und Prioritäten werden abweichen. Die WAF ist optional und wird vor Beginn des Deployments geklärt (Voraussetzungen).

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/]

Custom Domain

  1. Entra-App-Registration. Füge die Redirect-URI https://<portal-domain>/api/auth/microsoft/handler/frame zur App-Registration der Umgebung hinzu.
  2. Terraform. Setze die Variable domain_name des modules backstage im Umgebungs-root. Das module setzt dann die App-Einstellungen APP_CONFIG_app_baseUrl und APP_CONFIG_backend_baseUrl, sodass das Backend die URL kennt, die Benutzer verwenden.
module "backstage" {
  source      = "../../modules/backstage"
  # ...
  domain_name = "portal.contoso.example"
}
  1. DNS und Zertifikat. Der Kunde stellt den DNS-Eintrag bereit, der auf das Gateway (oder die Web App) zeigt, sowie ein TLS-Zertifikat. Siehe Voraussetzungen.

WAF-Policy

Verwende pro Umgebung eine WAF-Policy, die an den HTTPS-Listener des Portals gebunden ist. Das Default Rule Set 2.1 (DRS 2.1) von Microsoft funktioniert mit dem Portal am besten, wenn du zusätzlich die Fine-Tuning-Hinweise von Microsoft dafür anwendest.

Einstellung Wert
Modus Prevention
Rule Set Microsoft_DefaultRuleSet 2.1
Prüfung des Request Body Im Beispiel aus (maximale Body-Größe 128 KB, Limit für Datei-Uploads 100 MB)
Log Scrubbing An

Rule-Overrides in der Beispiel-Policy:

Rule-Gruppe Regel Einstellung Grund
SQLI 942110, 942150, 942260, 942430, 942440 Deaktiviert Fine-Tuning-Hinweise von Microsoft für DRS 2.1
LFI 930120 Aktiviert, Aktion Log Das Portal kann Requests erzeugen, die False Positives auslösen
PROTOCOL-ENFORCEMENT 920440 Aktiviert, Aktion Log Dasselbe

Zuerst im Log-Modus abstimmen

Siehst du blockierte Requests, die du dir nicht erklären kannst, stelle die Regel auf Log, finde den Request in den WAF-Logs und stimme von dort aus ab.

Application Gateway

Erstelle die folgenden Elemente für das Portal. Die Namen sind Beispiele.

Element Konfiguration
Backend Pool FQDN der Web App, <app-service-name>.azurewebsites.net
Backend-Einstellung HTTPS auf Port 443, Host-Name auf den FQDN der Web App gesetzt, Request-Timeout 30 Sekunden, Cookie-basierte Affinität deaktiviert
HTTPS-Listener Host-Name <portal-domain>, SNI erforderlich, Zertifikat aus dem Key Vault, WAF-Policy angebunden
HTTP-Listener Leitet auf den HTTPS-Listener um (permanent, Pfad und Query beibehalten), sodass eine ohne Protokoll eingefügte URL funktioniert
Routing-Regeln Eine für den HTTPS-Listener (Backend Pool, Backend-Einstellung, Rewrite Rule Set), eine für den HTTP-Listener (Redirect)
Rewrite Rule Set Fügt die Request-Header X-Forwarded-Host mit {var_host} und X-Original-URL mit {var_uri_path} hinzu
Health Probe HTTPS, Host auf den FQDN der Web App gesetzt, Intervall 30 s, Timeout 30 s, Unhealthy-Schwelle 3, erwartet Status 200

Endpoint der Health Probe

Das Portal hat zwei Health-Endpoints.

Endpoint Verhalten
/.backstage/health/v1/liveness Liefert 200, solange der Prozess läuft
/.backstage/health/v1/readiness Liefert zusätzlich 503, bevor das Backend den Start abgeschlossen hat, während es herunterfährt und solange die Credential des Microsoft-Auth-Providers die Validierung nicht besteht

Die Beispiel-Probe verwendet liveness. Damit bleibt das Portal erreichbar, während eine fehlerhafte Credential behoben wird. Verwende readiness, wenn das Gateway eine Instanz beim Start, beim Herunterfahren oder bei einem Credential-Fehler aus dem Pool nehmen soll.

Zugriff auf die Web App

Entscheide, ob die Web App nur über das Gateway erreichbar ist. Das module backstage hat eine Einstellung für den öffentlichen Netzwerkzugriff mit drei Werten: none, full (der Standard) und ein eingeschränkter Wert für den Azure AI Agent Service. Siehe Architektur. Wenn du das Gateway als einzigen Eingang verwendest, beschränke den direkten Zugriff auf die Web App.