# Secret Rotation Runbook

> Version: 2026-02-17

## Ziel

Standardisiertes Vorgehen für Rotation von Sicherheits- und Integrations-Secrets ohne Downtime.

## Scope

- `PAYLOAD_SECRET`
- `CRON_SECRET`
- `CSRF_SECRET`
- SMTP/OAuth/Redis Secrets (`SMTP_PASS`, `GOOGLE_CLIENT_SECRET`, `META_APP_SECRET`, `REDIS_PASSWORD`)

## Vorbedingungen

1. Wartungsfenster/Change-Freigabe vorhanden.
2. Backup und Rollback-Plan sind dokumentiert.
3. Neue Secret-Werte sind bereits im Secret-Manager hinterlegt.

## Rotation Ablauf

1. Neue Secrets generieren und im Secret-Manager speichern.
2. Alle betroffenen Deployments aktualisieren:
   - CMS/App
   - Queue Worker
   - externe Cron-Jobs
3. Metadaten mitpflegen:
   - `<SECRET>_ROTATED_AT=<ISO timestamp>`
   - optional `<SECRET>_EXPIRES_AT=<ISO timestamp>`
4. Deployment durchführen.
5. Verifikation:
   - Login/API funktionieren
   - Cron-Endpunkte authentifizieren korrekt
   - SMTP/OAuth/Redis Health ist grün
   - Monitoring `external.secrets` zeigt keinen kritischen Zustand
6. Alte Secrets im Secret-Manager deaktivieren/entfernen.

## Post-Rotation Checks

```bash
pnpm -s typecheck
pnpm -s test:security
```

Optional:

```bash
./scripts/security/history-scan.sh
```

## Notfall / Rollback

1. Vorherigen Secret-Stand reaktivieren.
2. Services neu starten.
3. Fehlerursache analysieren (Format, propagierte Umgebungsvariablen, Cache/Stale Worker).
