Reporting API für AWS CloudFront konfigurieren

Reporting-Endpoints per CloudFront Function oder Response Headers Policy setzen — CSP-Violations und andere Browser-Reports empfangen und analysieren.

AWS CloudFront · Schritt für Schritt

Reporting API auf AWS CloudFront

Die Reporting API ermöglicht es, CSP-Violations, Deprecation-Warnings und andere Browser-Reports an einen eigenen Endpoint zu senden. So erkennen Sie Angriffe und Fehlkonfigurationen in Echtzeit — ohne auf Nutzerbeschwerden warten zu müssen. Reporting ist mit 4 von 166 Punkten ein Faktor im Wolf-Agents Web Security Check.

Für CloudFront gibt es zwei Optionen: Den Reporting-Endpoints-Header als Custom Header in der Response Headers Policy (statisch, einfach) oder per CloudFront Function (dynamisch, z.B. wenn Sie bereits CSP-Nonces per Function setzen). Nutzen Sie die Function-Variante, wenn Sie Reporting mit CSP-Nonce-Generierung in einer einzigen Function kombinieren möchten.

Wichtig: Browser senden Reports als Cross-Origin POST. Ihr Reporting-Endpoint muss CORS-Header setzen und auf derselben Domain liegen oder Access-Control-Allow-Origin korrekt konfigurieren. Für AWS empfiehlt sich ein API Gateway mit Lambda als Report-Empfänger.

1 Schritt 1 von 4

Reporting-Endpoints per CloudFront Function

Die CloudFront Function setzt sowohl den neuen Reporting-Endpoints-Header (Chromium 96+) als auch den älteren Report-To-Header als Fallback für Safari und Firefox. Kombinieren Sie dies mit der CSP-Nonce-Function aus dem CSP-Kapitel, um beide Header in einer einzigen Function zu setzen.

cloudfront-function-reporting.js CloudFront Function
// CloudFront Function — Reporting-Endpoints
// Event: Viewer Response
function handler(event) {
  var response = event.response;
  var headers = response.headers;

  // Reporting-Endpoints (neue API — Chromium 96+)
  headers['reporting-endpoints'] = {
    value: 'csp-endpoint="https://ihre-domain.de/api/csp-report", '
      + 'default="https://ihre-domain.de/api/reports"'
  };

  // Report-To (ältere API, Fallback für Safari/Firefox)
  headers['report-to'] = {
    value: JSON.stringify({
      group: "csp-endpoint",
      max_age: 86400,
      endpoints: [{ url: "https://ihre-domain.de/api/csp-report" }]
    })
  };

  return response;
}
2 Schritt 2 von 4

Alternative: Custom Header in der Response Headers Policy

Wenn Sie keine CloudFront Function verwenden, setzen Sie den Reporting-Endpoints-Header als Custom Header per Terraform. Diese Methode ist einfacher, aber statisch — der Header ist für alle Routen identisch. Für die meisten Setups ist das ausreichend, da Reporting-Endpoints sich selten zwischen Routen unterscheiden.

terraform/reporting.tf Terraform
# terraform/reporting.tf — Reporting als Custom Header
resource "aws_cloudfront_response_headers_policy" "reporting" {
  name = "reporting-headers-policy"

  custom_headers_config {
    items {
      header   = "Reporting-Endpoints"
      value    = "csp-endpoint=\"https://ihre-domain.de/api/csp-report\", default=\"https://ihre-domain.de/api/reports\""
      override = true
    }
  }
}

# Distribution mit Reporting Policy
resource "aws_cloudfront_distribution" "main" {
  default_cache_behavior {
    response_headers_policy_id = aws_cloudfront_response_headers_policy.reporting.id
  }
}
3 Schritt 3 von 4

Report-Empfänger als Lambda-Endpoint

Erstellen Sie einen Lambda-Endpoint hinter API Gateway, der CSP-Reports empfängt. Der Browser sendet Reports als POST mit JSON-Body. Antworten Sie mit Status 204 (No Content) und setzen Sie CORS-Header. Reports können in CloudWatch geloggt oder in DynamoDB gespeichert werden.

lambda/csp-report-handler.mjs Lambda
// lambda/csp-report-handler.mjs — Report-Empfänger
export const handler = async (event) => {
  const body = JSON.parse(event.body);

  // Report in CloudWatch loggen
  console.log('CSP-Report:', JSON.stringify(body));

  // Optional: In DynamoDB speichern
  // await dynamodb.put({ TableName: 'csp-reports', Item: body });

  return {
    statusCode: 204,
    headers: {
      'Access-Control-Allow-Origin': 'https://ihre-domain.de',
    },
    body: '',
  };
}
4 Schritt 4 von 4

Verifizierung

Prüfen Sie die Reporting-Header per curl. Um Reports zu testen, lösen Sie eine absichtliche CSP-Violation in den Browser DevTools aus — etwa durch Einfügen eines Inline-Scripts auf einer Seite mit strikter CSP. Prüfen Sie anschließend in CloudWatch, ob der Report korrekt empfangen wurde. Der Wolf-Agents Web Security Check prüft Reporting-Endpoints automatisch.

Terminal Verifizieren
# Reporting-Endpoints prüfen
curl -sI https://ihre-domain.de | grep -i reporting-endpoints

# Erwartete Ausgabe:
reporting-endpoints: csp-endpoint="https://ihre-domain.de/api/csp-report", default="https://ihre-domain.de/api/reports"

# Report-To prüfen (Fallback)
curl -sI https://ihre-domain.de | grep -i report-to

# Test-Report manuell senden
curl -X POST https://ihre-domain.de/api/csp-report \
  -H "Content-Type: application/csp-report" \
  -d '{"csp-report":{"document-uri":"https://test.de"}}'

Häufige Fehler

Reporting-Endpoint nicht erreichbar

Browser senden Reports nur, wenn der Endpoint erreichbar ist und CORS korrekt konfiguriert ist. Stellen Sie sicher, dass der API-Gateway-Endpoint Access-Control-Allow-Origin für Ihre Domain setzt.

Report-To JSON ungültig

Der Report-To-Header erfordert valides JSON. Ein Syntaxfehler führt dazu, dass der Browser den gesamten Header ignoriert. Nutzen Sie JSON.stringify() in der CloudFront Function statt manueller JSON-Strings.

Reporting in Policy UND Function doppelt gesetzt

Wenn Sie die Header in der Response Headers Policy UND in der CloudFront Function setzen, werden sie doppelt gesendet. Browser verwenden Reporting-Endpoints bevorzugt — setzen Sie den Header nur an einer Stelle.

Report-Volume überlastet Lambda

Hochfrequentierte Seiten können tausende Reports pro Stunde generieren. Implementieren Sie API Gateway Throttling (z.B. 100 Requests/Sekunde) und Deduplizierung im Lambda, um Kosten und Last zu kontrollieren.

Compliance-Relevanz

PCI DSS 4.0 (Requirement 6.4.3) fordert aktives CSP-Monitoring — die Reporting API ist die technische Umsetzung dieser Anforderung und liefert automatische Berichte über Policy-Verletzungen. NIS2 fordert Incident-Detection-Fähigkeiten — CSP-Violation-Reports erkennen XSS-Angriffe in Echtzeit, bevor sie Schaden anrichten. SOC 2 bewertet kontinuierliches Security-Monitoring positiv. BSI IT-Grundschutz empfiehlt die Überwachung von Sicherheitsrichtlinien. Der Wolf-Agents Web Security Check prüft Reporting-Endpoints und report-uri/report-to auf korrekte Konfiguration.

Wie steht Ihre Domain bei Reporting API?

Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.