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.
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.
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-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;
} 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 — 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
}
} 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 — 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: '',
};
} 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.
# 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.