Files
sshkeyvault/docs/issues/031-deploymentkey-rotation.md
T
florian.wildeandClaude Opus 5.5 cab6f45510 feat(deploymentkey): geführte Rotation des Deployment-Keys (#031)
Bisher ließ sich der Instanz-Key nur von Hand auf jedem Host tauschen.
Die Rotation läuft jetzt in fünf Schritten: Nachfolger erzeugen, per
Dry-Run neben den alten verteilen, Anmeldung je Host prüfen, umstellen,
alten Key aus allen Blöcken entfernen und seinen Private Key verwerfen.

Der Nachfolger steht während der Rotation in Block und Pflichtliste,
damit kein Host ohne funktionierenden Key dasteht. Umgestellt wird nur
nach erfolgreicher Prüfung oder bewusstem Übergehen eines Hosts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 17:27:09 +02:00

2.1 KiB
Raw Blame History

#031 Rotation des Deployment-Keys

Status: erledigt Meilenstein: v1.0.0 Labels: sicherheit, backend Geschätzt: 3 h Tatsächlich: 1 h 10 min

Ziel

Den Deployment-Key der Instanz geführt tauschen – regelmäßig oder im Notfall (sshkv kompromittiert, siehe docs/betrieb/sicherheit.md).

Aufgaben

  • Neuen Deployment-Key erzeugen, ohne den alten abzulösen (zweiter Instanz-Key im Übergang)
  • Auf jedem eingerichteten Host den neuen Key neben den alten in den verwalteten Block des Anmeldebenutzers schreiben (Dry-Run, Ausrollen)
  • Verbindung mit dem neuen Key je Host prüfen
  • Erst wenn alle Hosts den neuen Key akzeptieren: alten aus allen Blöcken entfernen, alten Key verwerfen
  • Nicht erreichbare Hosts sichtbar machen; Abschluss erst, wenn alle umgestellt sind (oder bewusst übergangen)
  • Nur Admin mit frischer Bestätigung, alles protokolliert

Akzeptanzkriterien

  • Integrationstest: nach der Rotation meldet sich sshkv nur noch mit dem neuen Key an, der alte steht auf keinem Host mehr
  • Aussperrschutz: zu keinem Zeitpunkt steht ein Host ohne funktionierenden Deployment-Key da

Abhängigkeiten

#016, #021

Notizen / Entscheidungen

  • Der Nachfolger ist ein eigener Schlüssel (kategorie DEPLOYMENT, vorgaengerId = alter, noch nicht instanzStandard). sollFuer() nimmt ihn für alle Hosts mit dem Instanz-Key zusätzlich in Block und Pflichtliste – der normale Dry-Run verteilt ihn also, und der Aussperrschutz schützt beide.
  • Hosts mit eigenem oder Gruppen-Deployment-Key nehmen nicht teil.
  • Umstellen ist eine Transaktion (alter ROTIERT, neuer Standard) und verlangt eine Prüfung nach dem Erzeugen, in der jeder Host den neuen Key angenommen hat – oder bewusst übergangen wird (protokolliert).
  • Abschließen prüft je Host, dass der alte Fingerprint aus dem Block verschwunden ist; erst dann wird sein Private Key verworfen. Unerreichbare Hosts blockieren den Abschluss nicht (sshkv benutzt den alten Key ohnehin nicht mehr), werden aber im Ergebnis genannt.
  • Tests: Integrationstest gegen beide Testziele (DIENSTBENUTZER und ROOT, alte Anmeldung scheitert danach), E2E im Browser.