From cab6f45510bf3ac302a93de57571f00bf442830b Mon Sep 17 00:00:00 2001 From: Florian Wilde Date: Mon, 12 Oct 2026 17:27:09 +0200 Subject: [PATCH] =?UTF-8?q?feat(deploymentkey):=20gef=C3=BChrte=20Rotation?= =?UTF-8?q?=20des=20Deployment-Keys=20(#031)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- CHANGELOG.md | 1 + docs/anleitung/README.md | 8 + .../bilder/deployment-key-desktop.png | Bin 0 -> 154736 bytes docs/betrieb/sicherheit.md | 8 +- docs/issues/031-deploymentkey-rotation.md | 25 +-- src/app/(app)/deployment-key/page.tsx | 165 ++++++++++++++++++ src/app/(app)/einstellungen/page.tsx | 21 ++- src/components/deploymentkey/Umstellen.tsx | 75 ++++++++ src/lib/protokoll-aktionen.ts | 3 + src/server/actions/deploymentkey.ts | 44 +++++ src/server/actions/verwendungen.ts | 9 +- src/server/queries/uebersicht.ts | 2 +- src/server/services/deploymentkey.ts | 144 +++++++++++++++ src/server/services/soll.ts | 29 +++ src/worker/ablaeufe/deploymentkey.ts | 148 ++++++++++++++++ src/worker/handler.ts | 2 + tests/e2e/deploymentkey.spec.ts | 78 +++++++++ tests/integration/deploymentkey.test.ts | 147 ++++++++++++++++ tests/integration/hilfen/host.ts | 3 +- 19 files changed, 892 insertions(+), 20 deletions(-) create mode 100644 docs/anleitung/bilder/deployment-key-desktop.png create mode 100644 src/app/(app)/deployment-key/page.tsx create mode 100644 src/components/deploymentkey/Umstellen.tsx create mode 100644 src/server/actions/deploymentkey.ts create mode 100644 src/server/services/deploymentkey.ts create mode 100644 src/worker/ablaeufe/deploymentkey.ts create mode 100644 tests/e2e/deploymentkey.spec.ts create mode 100644 tests/integration/deploymentkey.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 87b0e58..beb7be1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ und dieses Projekt folgt [Semantic Versioning](https://semver.org/lang/de/). ## [Unveröffentlicht] ### Hinzugefügt +- Geführte Rotation des Deployment-Keys in fünf Schritten (erzeugen, verteilen, prüfen, umstellen, aufräumen) – kein Host steht dabei ohne funktionierenden Key da; nicht erreichbare Hosts lassen sich bewusst übergehen (#031) ### Geändert diff --git a/docs/anleitung/README.md b/docs/anleitung/README.md index 340b783..f7d2729 100644 --- a/docs/anleitung/README.md +++ b/docs/anleitung/README.md @@ -170,6 +170,14 @@ auswählen (nur Admin). ![Widerruf](bilder/widerruf-desktop.png) +**Deployment-Key rotieren** (Einstellungen → Instanz, nur Admin): fünf Schritte – neuen Key +**erzeugen**, per Dry-Run auf alle Hosts **verteilen** (er steht dann neben dem alten), die Anmeldung +mit dem neuen Key **prüfen**, **umstellen** und zuletzt den alten per Dry-Run **aufräumen**. Scheitert +die Prüfung auf einem Host, lässt er sich bewusst übergehen; sshkv erreicht ihn danach nur noch nach +einem neuen Bootstrap. + +![Deployment-Key rotieren](bilder/deployment-key-desktop.png) + ## 8. Personen, Self-Service und Zuweisungsmatrix - **Personen:** Admins, Mitarbeiter, Dienstleister mit ihren Schlüsseln. Private Keys von Personen diff --git a/docs/anleitung/bilder/deployment-key-desktop.png b/docs/anleitung/bilder/deployment-key-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..80583cc23d7fb70e2b71717cb213c8f19cbdccd1 GIT binary patch literal 154736 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/betrieb/sicherheit.md b/docs/betrieb/sicherheit.md index d00f7e9..4d612ba 100644 --- a/docs/betrieb/sicherheit.md +++ b/docs/betrieb/sicherheit.md @@ -67,8 +67,12 @@ Private Key steht. Bootstrap-Passwörter werden nie gespeichert. 5. **Protokoll auswerten:** Syslog-Kopie (unveränderlich außerhalb von sshkv) mit dem Protokoll vergleichen; `protokoll_kette_pruefen()` zeigt manipulierte Zeilen. -> Eine eingebaute **Rotation des Deployment-Keys** gibt es noch nicht (siehe `docs/issues`). Bis dahin -> ist Schritt 2 Handarbeit. +> **Rotation des Deployment-Keys** (Einstellungen → Instanz → „Deployment-Key rotieren“, nur Admin mit +> frischer Bestätigung): regelmäßig, oder wenn nur der Key abgeflossen sein kann – etwa ein verlorenes +> Backup samt Master-Key. Der neue Key kommt erst neben den alten, wird auf jedem Host geprüft und löst +> den alten dann ab; zuletzt wird der alte aus allen Blöcken entfernt und sein Private Key verworfen. +> Ist sshkv **selbst** kompromittiert, hilft das nicht – der Instanz ist dann nicht mehr zu trauen, +> Schritt 2 bleibt Handarbeit. ## Betriebsregeln diff --git a/docs/issues/031-deploymentkey-rotation.md b/docs/issues/031-deploymentkey-rotation.md index 598d20a..3420ecf 100644 --- a/docs/issues/031-deploymentkey-rotation.md +++ b/docs/issues/031-deploymentkey-rotation.md @@ -1,25 +1,30 @@ # #031 Rotation des Deployment-Keys -**Status:** offen +**Status:** erledigt **Meilenstein:** v1.0.0 **Labels:** sicherheit, backend -**Geschätzt:** 3 h **Tatsächlich:** – +**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 +- [x] Neuen Deployment-Key erzeugen, ohne den alten abzulösen (zweiter Instanz-Key im Übergang) +- [x] Auf jedem eingerichteten Host den neuen Key neben den alten in den verwalteten Block des Anmeldebenutzers schreiben (Dry-Run, Ausrollen) +- [x] Verbindung mit dem neuen Key je Host prüfen +- [x] Erst wenn alle Hosts den neuen Key akzeptieren: alten aus allen Blöcken entfernen, alten Key verwerfen +- [x] Nicht erreichbare Hosts sichtbar machen; Abschluss erst, wenn alle umgestellt sind (oder bewusst übergangen) +- [x] 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 +- [x] Integrationstest: nach der Rotation meldet sich sshkv nur noch mit dem neuen Key an, der alte steht auf keinem Host mehr +- [x] 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. diff --git a/src/app/(app)/deployment-key/page.tsx b/src/app/(app)/deployment-key/page.tsx new file mode 100644 index 0000000..bc57396 --- /dev/null +++ b/src/app/(app)/deployment-key/page.tsx @@ -0,0 +1,165 @@ +import { CheckCheck, KeyRound, ShieldCheck } from "lucide-react"; +import type { Metadata } from "next"; +import Link from "next/link"; +import { AusrollenPanel } from "@/components/ausrollen/AusrollenPanel"; +import { Umstellen } from "@/components/deploymentkey/Umstellen"; +import { Badge } from "@/components/ui/Badge"; +import { Breadcrumb } from "@/components/ui/Breadcrumb"; +import { Karte } from "@/components/ui/Karte"; +import { MonoKopieren } from "@/components/ui/MonoKopieren"; +import { Schrittleiste } from "@/components/ui/Schrittleiste"; +import { Seitenkopf } from "@/components/ui/Seitenkopf"; +import { VorgangsKnopf } from "@/components/vorgang/VorgangsKnopf"; +import { rotationsSchrittAktion } from "@/server/actions/deploymentkey"; +import { bestaetigungFrisch, sitzungErforderlich } from "@/server/auth/sitzungspflicht"; +import { rotationsStand } from "@/server/services/deploymentkey"; + +export const metadata: Metadata = { title: "Deployment-Key rotieren" }; + +const SCHRITTE = ["Erzeugen", "Verteilen", "Prüfen", "Umstellen", "Aufräumen"] as const; + +/** + * Rotation des Instanz-Deployment-Keys (#031). Der neue Key kommt erst neben den alten, + * wird geprueft und erst dann zum Standard; der alte verschwindet zuletzt. + */ +export default async function DeploymentKeySeite() { + const { benutzer } = await sitzungErforderlich("deploymentKeyVerwalten", "/deployment-key"); + const stand = await rotationsStand(); + const fehlgeschlagen = (stand.pruefung ?? []).filter((p) => !p.ok); + const aktuell = + stand.phase === "bereit" + ? 0 + : stand.phase === "aufraeumen" + ? 4 + : !stand.pruefung + ? 1 + : fehlgeschlagen.length + ? 2 + : 3; + + return ( +
+ + } + titel="Deployment-Key rotieren" + untertitel="Ohne Unterbrechung: der neue Key steht erst neben dem alten, wird geprüft und löst ihn dann ab." + /> + + + {!bestaetigungFrisch(benutzer.bestaetigtAm) && ( +

+ Jeder Schritt verlangt eine frische Bestätigung Ihrer Anmeldung.{" "} + + Jetzt bestätigen + +

+ )} + + + {stand.aktuell ? ( + + ) : ( +

Noch kein Deployment-Key – läuft der Worker?

+ )} + {stand.nachfolger && ( +
+

Neuer Key (noch nicht Standard)

+ +
+ )} +
+ + {stand.phase === "bereit" && stand.aktuell && ( + + } + /> + + )} + + {stand.phase === "verteilen" && ( + <> + + + + + } + /> + {stand.pruefung && ( +
    + {stand.pruefung.map((p) => ( +
  • + {p.hostName} + {p.ok ? ( + angemeldet + ) : ( + fehlgeschlagen + )} + {p.fehler && {p.fehler}} +
  • + ))} +
+ )} +
+ {stand.pruefung && ( + + + + )} + + )} + + {stand.phase === "aufraeumen" && stand.vorgaenger && ( + +
+

+ Alter Key: {stand.vorgaenger.fingerprint} +

+ +
+ } + /> +
+
+
+ )} +
+ ); +} diff --git a/src/app/(app)/einstellungen/page.tsx b/src/app/(app)/einstellungen/page.tsx index 75d92cd..d5cb40e 100644 --- a/src/app/(app)/einstellungen/page.tsx +++ b/src/app/(app)/einstellungen/page.tsx @@ -1,5 +1,6 @@ import { Inbox } from "lucide-react"; import type { Metadata } from "next"; +import Link from "next/link"; import type { ReactNode } from "react"; import { BenachrichtigungFormular } from "@/components/einstellungen/BenachrichtigungFormular"; import { Badge } from "@/components/ui/Badge"; @@ -161,11 +162,21 @@ export default async function Einstellungen() { {instanz.deploymentKey ? ( - + <> + + {darf(benutzer.rolle, "deploymentKeyVerwalten") && ( + + Deployment-Key rotieren + + )} + ) : ( noch nicht erzeugt – läuft der Worker? )} diff --git a/src/components/deploymentkey/Umstellen.tsx b/src/components/deploymentkey/Umstellen.tsx new file mode 100644 index 0000000..3cc4351 --- /dev/null +++ b/src/components/deploymentkey/Umstellen.tsx @@ -0,0 +1,75 @@ +"use client"; + +import { Repeat } from "lucide-react"; +import { useRouter } from "next/navigation"; +import { useState, useTransition } from "react"; +import { Button } from "@/components/ui/Button"; +import { umstellenAktion } from "@/server/actions/deploymentkey"; + +/** + * Schritt 4 der Rotation (#031). Hosts, auf denen die Pruefung scheiterte, lassen sich bewusst + * uebergehen – sshkv kommt danach nicht mehr auf sie und sie brauchen einen neuen Bootstrap. + */ +export function Umstellen({ + fehlgeschlagen, +}: { + fehlgeschlagen: readonly { hostId: string; hostName: string }[]; +}) { + const router = useRouter(); + const [uebergehen, setUebergehen] = useState([]); + const [fehler, setFehler] = useState(); + const [laeuft, starten] = useTransition(); + const bereit = fehlgeschlagen.every((h) => uebergehen.includes(h.hostId)); + + return ( +
+ {fehlgeschlagen.length > 0 && ( +
+ + Auf diesen Hosts hat der neue Key nicht funktioniert. Übergangene Hosts erreicht sshkv nach dem + Umstellen nicht mehr – sie brauchen einen neuen Bootstrap. + + {fehlgeschlagen.map((h) => ( + + ))} +
+ )} +
+ + {fehler && ( +

+ {fehler} +

+ )} +
+
+ ); +} diff --git a/src/lib/protokoll-aktionen.ts b/src/lib/protokoll-aktionen.ts index 3cc6a6e..7998b41 100644 --- a/src/lib/protokoll-aktionen.ts +++ b/src/lib/protokoll-aktionen.ts @@ -77,6 +77,9 @@ export const AKTIONEN: Readonly> = { "privatekey.heruntergeladen": a("Private Key heruntergeladen", "schluessel", false), "privatekey.geloescht": a("Private Key gelöscht", "schluessel"), "deploymentkey.erzeugt": a("Deployment-Key erzeugt", "schluessel"), + "deploymentkey.geprueft": a("Neuer Deployment-Key geprüft", "widerruf", false), + "deploymentkey.umgestellt": a("Deployment-Key umgestellt", "widerruf"), + "deploymentkey.abgeschlossen": a("Rotation des Deployment-Keys abgeschlossen", "widerruf"), // Widerruf und Rotation (#023, #024) "schluessel.widerruf.eingeleitet": a("Widerruf eingeleitet", "widerruf"), diff --git a/src/server/actions/deploymentkey.ts b/src/server/actions/deploymentkey.ts new file mode 100644 index 0000000..bf9bf76 --- /dev/null +++ b/src/server/actions/deploymentkey.ts @@ -0,0 +1,44 @@ +"use server"; + +import { revalidatePath } from "next/cache"; +import { z } from "@/lib/validierung"; +import { akteurVon } from "@/server/actions/formular"; +import type { VorgangsAntwort } from "@/server/actions/verwendungen"; +import { BestaetigungFehler, RechteFehler, rechtErforderlich } from "@/server/auth/sitzungspflicht"; +import { DeploymentKeyFehler, rotationsSchrittAnfordern, umstellen } from "@/server/services/deploymentkey"; + +/** Rotation des Deployment-Keys (#031). Nur Admins mit frischer Bestaetigung. */ + +function alsAntwort(fehler: unknown): { fehler: string } { + if ( + fehler instanceof DeploymentKeyFehler || + fehler instanceof RechteFehler || + fehler instanceof BestaetigungFehler + ) { + return { fehler: fehler.message }; + } + throw fehler; +} + +export async function rotationsSchrittAktion( + schritt: "erzeugen" | "pruefen" | "abschliessen", +): Promise { + try { + const { benutzer } = await rechtErforderlich("deploymentKeyVerwalten"); + const geprueft = z.enum(["erzeugen", "pruefen", "abschliessen"]).parse(schritt); + return { vorgangId: await rotationsSchrittAnfordern(geprueft, akteurVon(benutzer)) }; + } catch (fehler) { + return alsAntwort(fehler); + } +} + +export async function umstellenAktion(uebergehen: readonly string[]): Promise<{ fehler?: string }> { + try { + const { benutzer } = await rechtErforderlich("deploymentKeyVerwalten"); + await umstellen(akteurVon(benutzer), z.array(z.string().min(1).max(64)).max(500).parse(uebergehen)); + revalidatePath("/deployment-key"); + return {}; + } catch (fehler) { + return alsAntwort(fehler); + } +} diff --git a/src/server/actions/verwendungen.ts b/src/server/actions/verwendungen.ts index fa10776..8d22983 100644 --- a/src/server/actions/verwendungen.ts +++ b/src/server/actions/verwendungen.ts @@ -14,6 +14,7 @@ import { publicVerwendungEntfernen, trockenlaufStarten, } from "@/server/services/verwendungen"; +import { instanzZiele } from "@/server/services/deploymentkey"; import { vorgangEinreihen } from "@/server/vorgaenge/vorgaenge"; /** Public-Key-Zuweisungen und Ausrollen (#016). Duenn: Recht, Eingabe, Service. */ @@ -78,10 +79,16 @@ export type AusrollAuswahl = | { readonly schluesselId: string } | { readonly hostId: string } /** Ein gemeinsamer Dry-Run fuer mehrere Schluessel (Massenwiderruf, #024). */ - | { readonly schluesselIds: readonly string[] }; + | { readonly schluesselIds: readonly string[] } + /** Alle Hosts mit dem Instanz-Deployment-Key – fuer dessen Rotation (#031). */ + | { readonly deploymentKey: true }; export async function trockenlaufAktion(auswahl: AusrollAuswahl): Promise { try { + if ("deploymentKey" in auswahl) { + const { benutzer } = await rechtErforderlich("deploymentKeyVerwalten"); + return { vorgangId: await trockenlaufStarten({ ziele: await instanzZiele() }, akteurVon(benutzer)) }; + } const { benutzer } = await rechtErforderlich("publicKeyAusrollen"); const id = z.string().min(1).max(64); return { diff --git a/src/server/queries/uebersicht.ts b/src/server/queries/uebersicht.ts index 34f3fc0..56c3329 100644 --- a/src/server/queries/uebersicht.ts +++ b/src/server/queries/uebersicht.ts @@ -49,7 +49,7 @@ export function aktionEinordnen(aktion: string, ergebnis: string): AktionsArt { if (aktion.startsWith("authorized_keys.") || aktion.startsWith("privatekey.ausgerollt")) return "ausgerollt"; if (aktion.includes("widerruf")) return "widerrufen"; - if (aktion.includes("rotation")) return "rotiert"; + if (aktion.includes("rotation") || aktion === "deploymentkey.umgestellt") return "rotiert"; if (aktion === "abgleich") return "abgleich"; if (aktion.startsWith("anmeldung") || aktion.startsWith("bestaetigung")) return "anmeldung"; if ( diff --git a/src/server/services/deploymentkey.ts b/src/server/services/deploymentkey.ts new file mode 100644 index 0000000..a9e08ac --- /dev/null +++ b/src/server/services/deploymentkey.ts @@ -0,0 +1,144 @@ +import { prisma } from "@/lib/db"; +import { protokollieren } from "@/server/services/protokoll"; +import { anmeldebenutzerVon, deploymentNachfolger, type Ziel } from "@/server/services/soll"; +import { vorgangEinreihen } from "@/server/vorgaenge/vorgaenge"; + +/** + * Rotation des Instanz-Deployment-Keys (#031) – geführt in fünf Schritten: + * + * 1. erzeugen: Nachfolger anlegen (DEPLOYMENT, nicht Standard, vorgaengerId = alter). + * 2. verteilen: Dry-Run + Ausrollen auf alle Hosts mit Instanz-Key – der Nachfolger kommt + * **neben** den alten in den Block (soll.ts). + * 3. pruefen: je Host eine Anmeldung mit dem neuen Key. + * 4. umstellen: Nachfolger wird Standard, alter ROTIERT; danach Dry-Run + Ausrollen entfernt den + * alten aus allen Blöcken. + * 5. abschliessen: auf jedem Host nachsehen, dass der alte weg ist, dann seinen Private Key + * verwerfen. + * + * Zu keinem Zeitpunkt steht ein Host ohne funktionierenden Deployment-Key da: umgestellt wird + * erst, wenn der neue Key überall geprüft ist (oder ein Admin einen Host bewusst übergeht – + * der braucht danach einen neuen Bootstrap). + */ +export class DeploymentKeyFehler extends Error { + constructor(nachricht: string) { + super(nachricht); + this.name = "DeploymentKeyFehler"; + } +} + +type Akteur = { readonly id: string; readonly name: string }; + +export type PruefErgebnis = { hostId: string; hostName: string; ok: boolean; fehler?: string }; + +/** Hosts, die den Instanz-Key benutzen (kein eigener, keiner über eine Gruppe). */ +export async function instanzHosts() { + return prisma.host.findMany({ + where: { + archiviertAm: null, + bootstrapAm: { not: null }, + deploymentSchluesselId: null, + gruppen: { none: { hostgruppe: { deploymentSchluesselId: { not: null } } } }, + }, + select: { id: true, name: true, anmeldeart: true }, + orderBy: { name: "asc" }, + }); +} + +export async function instanzZiele(): Promise { + return (await instanzHosts()).map((h) => ({ + hostId: h.id, + zielbenutzer: anmeldebenutzerVon(h), + art: "public", + })); +} + +export async function rotationsStand() { + const aktuell = await prisma.schluessel.findFirst({ + where: { kategorie: "DEPLOYMENT", instanzStandard: true, status: "AKTIV" }, + select: { id: true, fingerprint: true, angelegtAm: true, vorgaengerId: true }, + }); + const nachfolger = await deploymentNachfolger(); + // Nach dem Umstellen: der alte ist ROTIERT, sein Private Key noch nicht verworfen. + const vorgaenger = aktuell?.vorgaengerId + ? await prisma.schluessel.findFirst({ + where: { + id: aktuell.vorgaengerId, + kategorie: "DEPLOYMENT", + status: "ROTIERT", + privatGeloeschtAm: null, + }, + select: { id: true, fingerprint: true }, + }) + : null; + const letztePruefung = await prisma.vorgang.findFirst({ + where: { art: "ROTATION", eingabe: { path: ["schritt"], equals: "pruefen" } }, + orderBy: { angelegtAm: "desc" }, + select: { id: true, status: true, ergebnis: true, beendetAm: true, angelegtAm: true }, + }); + const hosts = await instanzHosts(); + const pruefung = + letztePruefung && nachfolger && letztePruefung.angelegtAm > nachfolger.angelegtAm + ? ((letztePruefung.ergebnis as { hosts?: PruefErgebnis[] } | null)?.hosts ?? null) + : null; + const phase: "bereit" | "verteilen" | "aufraeumen" = nachfolger + ? "verteilen" + : vorgaenger + ? "aufraeumen" + : "bereit"; + return { aktuell, nachfolger, vorgaenger, phase, hosts, pruefung }; +} + +export async function rotationsSchrittAnfordern( + schritt: "erzeugen" | "pruefen" | "abschliessen", + akteur: Akteur, +): Promise { + const stand = await rotationsStand(); + if (schritt === "erzeugen" && stand.phase !== "bereit") { + throw new DeploymentKeyFehler("Es läuft bereits eine Rotation des Deployment-Keys."); + } + if (schritt === "pruefen" && !stand.nachfolger) + throw new DeploymentKeyFehler("Es gibt keinen neuen Deployment-Key zu prüfen."); + if (schritt === "abschliessen" && !stand.vorgaenger) + throw new DeploymentKeyFehler("Es gibt nichts abzuschließen."); + return vorgangEinreihen({ art: "ROTATION", angefordertVonId: akteur.id, eingabe: { schritt } }); +} + +/** + * Schritt 4: Nachfolger wird Standard. Verlangt eine Prüfung nach dem Erzeugen, in der jeder + * Host den neuen Key angenommen hat – oder ausdrücklich übergangen wird. + */ +export async function umstellen(akteur: Akteur, uebergehen: readonly string[] = []): Promise { + const stand = await rotationsStand(); + if (!stand.nachfolger || !stand.aktuell) + throw new DeploymentKeyFehler("Es gibt keinen neuen Deployment-Key."); + if (!stand.pruefung) throw new DeploymentKeyFehler("Erst den neuen Key auf allen Hosts prüfen."); + const geprueft = new Map(stand.pruefung.map((p) => [p.hostId, p])); + const offen = stand.hosts.filter((h) => !geprueft.get(h.id)?.ok && !uebergehen.includes(h.id)); + if (offen.length) { + throw new DeploymentKeyFehler( + `Der neue Key ist noch nicht auf allen Hosts geprüft: ${offen.map((h) => h.name).join(", ")}.`, + ); + } + const alt = stand.aktuell; + const neu = stand.nachfolger; + await prisma.$transaction([ + // Erst den alten abloesen, dann den neuen setzen – der partielle Index erlaubt nur einen Standard. + prisma.schluessel.update({ + where: { id: alt.id }, + data: { instanzStandard: false, status: "ROTIERT" }, + select: { id: true }, + }), + prisma.schluessel.update({ + where: { id: neu.id }, + data: { instanzStandard: true }, + select: { id: true }, + }), + ]); + await protokollieren({ + akteur, + aktion: "deploymentkey.umgestellt", + ergebnis: "ERFOLG", + fingerprint: neu.fingerprint, + details: { alt: alt.fingerprint, uebergangen: [...uebergehen] }, + }); +} diff --git a/src/server/services/soll.ts b/src/server/services/soll.ts index 727904c..0ddff50 100644 --- a/src/server/services/soll.ts +++ b/src/server/services/soll.ts @@ -46,6 +46,23 @@ async function deploymentKeyFuer(host: Pick { const host = await prisma.host.findUniqueOrThrow({ where: { id: hostId }, @@ -77,6 +94,18 @@ export async function sollFuer(hostId: string, zielbenutzer: string): Promise h.ok) ? "ERFOLG" : "FEHLER", + fingerprint: stand.nachfolger.fingerprint, + details: { + ok: hosts.filter((h) => h.ok).length, + fehler: hosts.filter((h) => !h.ok).map((h) => h.hostName), + }, + }); + return { ergebnis: { hosts } }; +} + +/** + * Prueft auf jedem Instanz-Host, dass der alte Key nicht mehr im Block steht, und verwirft + * erst dann seinen Private Key. Nicht erreichbare Hosts verhindern den Abschluss nicht – sie + * melden sich mit dem alten Key ohnehin nicht mehr an, weil sshkv ihn nicht mehr benutzt –, + * werden aber im Ergebnis genannt. + */ +async function abschliessen(angefordertVonId: string | null) { + const stand = await rotationsStand(); + if (!stand.vorgaenger) throw new VorgangsFehler("Es gibt nichts abzuschließen."); + const nochDa: string[] = []; + const nichtErreicht: string[] = []; + for (const kurz of await instanzHosts()) { + const host = await prisma.host.findUniqueOrThrow({ where: { id: kurz.id } }); + try { + const verbindung = await hostVerbinden(host); + try { + const stand2 = await authorizedKeysHolen(verbindung, host, anmeldebenutzerVon(host)); + const zeilen = authorizedKeysLesen(stand2.inhalt).zeilen.filter( + (z): z is SchluesselZeile => z.art === "schluessel", + ); + if (zeilen.some((z) => z.fingerprint === stand.vorgaenger!.fingerprint)) nochDa.push(host.name); + } finally { + verbindung.end(); + } + } catch { + nichtErreicht.push(host.name); + } + } + if (nochDa.length) { + throw new VorgangsFehler( + `Der alte Deployment-Key steht noch auf: ${nochDa.join(", ")}. Bitte zuerst Dry-Run und Ausrollen.`, + ); + } + await privateKeyVerwerfen(stand.vorgaenger.id); + await protokollieren({ + akteur: await akteurVon(angefordertVonId), + aktion: "deploymentkey.abgeschlossen", + ergebnis: "ERFOLG", + fingerprint: stand.vorgaenger.fingerprint, + details: { nichtErreicht }, + }); + return { ergebnis: { nichtErreicht } }; +} + +export const deploymentRotationHandler: Handler = async ({ vorgang }) => { + const schritt = (vorgang.eingabe as { schritt?: unknown } | null)?.schritt; + if (schritt === "erzeugen") return erzeugen(vorgang.angefordertVonId); + if (schritt === "pruefen") return pruefen(vorgang.angefordertVonId); + if (schritt === "abschliessen") return abschliessen(vorgang.angefordertVonId); + throw new VorgangsFehler("Unbekannter Schritt der Rotation."); +}; diff --git a/src/worker/handler.ts b/src/worker/handler.ts index 45bac31..de9fe29 100644 --- a/src/worker/handler.ts +++ b/src/worker/handler.ts @@ -3,6 +3,7 @@ import { abgleichHandler } from "@/worker/ablaeufe/abgleich"; import { benachrichtigungTestHandler } from "@/worker/ablaeufe/benachrichtigung"; import { ausrollenHandler, trockenlaufHandler } from "@/worker/ablaeufe/ausrollen"; import { bootstrapHandler } from "@/worker/ablaeufe/bootstrap"; +import { deploymentRotationHandler } from "@/worker/ablaeufe/deploymentkey"; import { erreichbarkeitHandler, hostKeyAbrufenHandler } from "@/worker/ablaeufe/hostkey"; import { privateKeyAbholenHandler, privateKeyLoeschenHandler } from "@/worker/ablaeufe/privatekey"; import { schluesselErzeugenHandler, schluesselImportierenHandler } from "@/worker/ablaeufe/schluessel"; @@ -24,6 +25,7 @@ export const HANDLER: HandlerTabelle = { PRIVATE_KEY_LOESCHEN: privateKeyLoeschenHandler, VERBINDUNGSTEST: verbindungstestHandler, ABGLEICH: abgleichHandler, + ROTATION: deploymentRotationHandler, ZIELKONTO_ANLEGEN: zielkontoAnlegenHandler, ZIELKONTO_ENTFERNEN: zielkontoEntfernenHandler, BENACHRICHTIGUNG_TEST: benachrichtigungTestHandler, diff --git a/tests/e2e/deploymentkey.spec.ts b/tests/e2e/deploymentkey.spec.ts new file mode 100644 index 0000000..a2bf4e5 --- /dev/null +++ b/tests/e2e/deploymentkey.spec.ts @@ -0,0 +1,78 @@ +import { expect, test, type Page } from "@playwright/test"; +import { anmelden, archivieren, aufZiel, hostEinrichten, PORT, zieleZuruecksetzen } from "./hilfen"; + +/** + * Rotation des Deployment-Keys im Browser (#031), gebauter Stand + Worker: zwei frisch + * eingerichtete Hosts, fuenf Schritte, danach meldet sich sshkv nur noch mit dem neuen Key an. + */ +test.setTimeout(300_000); + +test.beforeAll(() => zieleZuruecksetzen()); + +async function bestaetigen(page: Page) { + await page.goto("/bestaetigen?ziel=%2Fdeployment-key"); + await page.getByRole("link", { name: /erneut anmelden/ }).click(); + await page.locator('button[data-rolle="admin"]').click(); + const claims = JSON.parse(await page.locator("#claims").inputValue()) as Record; + await page.locator("#claims").fill(JSON.stringify({ ...claims, auth_time: Math.floor(Date.now() / 1000) })); + await page.getByRole("button", { name: "Anmelden", exact: true }).click(); + await expect(page.getByRole("heading", { name: "Deployment-Key rotieren" })).toBeVisible(); +} + +test("Deployment-Key rotieren", async ({ page }) => { + const kennung = Date.now().toString(36); + const hostA = `zz-e2e-a-${kennung}`; + const hostB = `zz-e2e-b-${kennung}`; + + await anmelden(page); + await hostEinrichten(page, hostA, PORT.a); + await hostEinrichten(page, hostB, PORT.b); + const vorher = aufZiel("ziel-a", "cat /home/sshkv/.ssh/authorized_keys"); + + await page.goto("/einstellungen"); + await page.getByRole("link", { name: "Deployment-Key rotieren" }).click(); + await bestaetigen(page); + + await page.getByRole("button", { name: "Neuen Deployment-Key erzeugen" }).click(); + await expect(page.getByText("Neuer Key (noch nicht Standard)")).toBeVisible({ timeout: 30_000 }); + + // Schritt 2: verteilen – der neue Key kommt neben den alten. + await page.getByRole("button", { name: "Dry-Run starten" }).click(); + await expect(page.getByRole("button", { name: /Änderung anwenden/ })).toBeVisible({ timeout: 30_000 }); + await page.screenshot({ path: "docs/anleitung/bilder/deployment-key-desktop.png", fullPage: true }); + await page.getByRole("button", { name: /Änderung anwenden/ }).click(); + await expect(page.getByText("Ausgerollt.", { exact: true })).toBeVisible({ timeout: 60_000 }); + expect(aufZiel("ziel-a", "grep -c sshkv-deployment /home/sshkv/.ssh/authorized_keys").trim()).toBe("2"); + + // Schritt 3 und 4: pruefen, umstellen. + await page.getByRole("button", { name: "Neuen Key prüfen" }).click(); + const ergebnis = page.getByRole("list", { name: "Ergebnis der Prüfung" }); + await expect(ergebnis.getByText("angemeldet")).toHaveCount(2, { timeout: 60_000 }); + await page.getByRole("button", { name: "Auf neuen Key umstellen" }).click(); + + // Schritt 5: alten Key entfernen und abschliessen. + await expect(page.getByRole("heading", { name: "5 · Alten Key entfernen" })).toBeVisible({ + timeout: 30_000, + }); + await page.getByRole("button", { name: "Dry-Run starten" }).click(); + await page.getByRole("button", { name: /Änderung anwenden/ }).click({ timeout: 30_000 }); + await expect(page.getByText("Ausgerollt.", { exact: true })).toBeVisible({ timeout: 60_000 }); + await page.getByRole("button", { name: "Rotation abschließen" }).click(); + await expect(page.getByRole("heading", { name: "1 · Neuen Key erzeugen" })).toBeVisible({ + timeout: 60_000, + }); + + const nachher = aufZiel("ziel-a", "cat /home/sshkv/.ssh/authorized_keys"); + expect(nachher.match(/sshkv-deployment/g)).toHaveLength(1); + expect(nachher).not.toBe(vorher); + + // Der Alltag geht weiter: Verbindung pruefen klappt mit dem neuen Key. + await page.goto("/hosts"); + await page.getByRole("link", { name: hostA }).first().click(); + const pruefen = page.getByRole("button", { name: "Verbindung prüfen" }); + await pruefen.click(); + await expect(pruefen.locator("..").getByText("Erledigt.")).toBeVisible({ timeout: 30_000 }); + + await archivieren(page, hostA); + await archivieren(page, hostB); +}); diff --git a/tests/integration/deploymentkey.test.ts b/tests/integration/deploymentkey.test.ts new file mode 100644 index 0000000..6fa12f8 --- /dev/null +++ b/tests/integration/deploymentkey.test.ts @@ -0,0 +1,147 @@ +import { afterAll, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import { prisma } from "@/lib/db"; +import { authorizedKeysLesen } from "@/lib/ssh/authorized-keys"; +import { + DeploymentKeyFehler, + instanzZiele, + rotationsStand, + umstellen, +} from "@/server/services/deploymentkey"; +import { anmeldebenutzerVon } from "@/server/services/soll"; +import { deploymentKeySicherstellen, privateKeyLaden } from "@/worker/geheimnisse"; +import { hostVerbinden } from "@/worker/ssh/host"; +import { authorizedKeysHolen } from "@/worker/ssh/ssh-dateien"; +import { datenbankLeeren } from "../hilfen/db"; +import { warteschlangeStoppen } from "../hilfen/vorgang"; +import { eingerichteterHost, masterKeyAnlegen, vorgangLaufen } from "./hilfen/host"; +import { befehlAlsRoot, zielA, zielB, zielBereit } from "./hilfen/ziele"; + +/** + * Rotation des Deployment-Keys gegen echte Hosts (#031): danach meldet sich sshkv nur noch mit + * dem neuen Key an, der alte steht auf keinem Host mehr, und zu keinem Zeitpunkt war ein Host + * ohne funktionierenden Key. + */ +const AKTEUR = { id: "", name: "Test-Admin" }; +let aufraeumen: () => void; + +beforeAll(async () => { + await Promise.all([zielBereit(zielA), zielBereit(zielB)]); + aufraeumen = masterKeyAnlegen(); +}); +afterAll(async () => { + aufraeumen(); + await warteschlangeStoppen(); +}); + +beforeEach(async () => { + await datenbankLeeren(); + await deploymentKeySicherstellen(); + const reset = "userdel -r sshkv 2>/dev/null; rm -f /etc/sudoers.d/sshkv*; rm -rf /root/.ssh; true"; + await Promise.all([befehlAlsRoot(zielA, reset), befehlAlsRoot(zielB, reset)]); + AKTEUR.id = (await prisma.benutzer.create({ data: { name: "Test-Admin", rolle: "ADMIN" } })).id; +}); + +const schritt = (s: "erzeugen" | "pruefen" | "abschliessen") => + vorgangLaufen("ROTATION", { eingabe: { schritt: s }, angefordertVonId: AKTEUR.id }); + +async function trockenlaufUndAusrollen() { + const trockenlauf = await vorgangLaufen("TROCKENLAUF", { + eingabe: { ziele: await instanzZiele() }, + angefordertVonId: AKTEUR.id, + }); + expect(trockenlauf.status).toBe("ERLEDIGT"); + const ausrollen = await vorgangLaufen("AUSROLLEN", { + eingabe: { trockenlaufId: trockenlauf.id }, + angefordertVonId: AKTEUR.id, + }); + expect(ausrollen.fehler).toBeNull(); +} + +type Host = Awaited>; + +async function fingerprintsAuf(host: Host): Promise { + const verbindung = await hostVerbinden(host); + try { + const datei = await authorizedKeysHolen(verbindung, host, anmeldebenutzerVon(host)); + return authorizedKeysLesen(datei.inhalt).zeilen.flatMap((z) => + z.art === "schluessel" ? [z.fingerprint] : [], + ); + } finally { + verbindung.end(); + } +} + +async function anmeldungKlappt(host: Host, schluesselId: string): Promise { + const privateKey = await privateKeyLaden(schluesselId); + try { + const verbindung = await hostVerbinden(host, { benutzer: anmeldebenutzerVon(host), privateKey }); + verbindung.end(); + return true; + } catch { + return false; + } finally { + privateKey.fill(0); + } +} + +describe("Rotation des Deployment-Keys", () => { + it("tauscht den Key auf allen Hosts ohne Unterbrechung aus", async () => { + const a = await eingerichteterHost(zielA, "ziel-a"); + const b = await eingerichteterHost(zielB, "ziel-b", "ROOT"); + const alt = await prisma.schluessel.findFirstOrThrow({ where: { instanzStandard: true } }); + + expect((await schritt("erzeugen")).status).toBe("ERLEDIGT"); + const neu = (await rotationsStand()).nachfolger!; + expect(neu.vorgaengerId).toBe(alt.id); + // Ein zweites Erzeugen waehrend der Rotation wird abgelehnt. + expect((await schritt("erzeugen")).status).toBe("FEHLGESCHLAGEN"); + + // Vor dem Verteilen scheitert die Pruefung – und ohne erfolgreiche Pruefung kein Umstellen. + await schritt("pruefen"); + expect((await rotationsStand()).pruefung?.every((p) => !p.ok)).toBe(true); + await expect(umstellen(AKTEUR)).rejects.toThrow(DeploymentKeyFehler); + + await trockenlaufUndAusrollen(); + for (const host of [a, b]) { + expect(await fingerprintsAuf(host)).toEqual(expect.arrayContaining([alt.fingerprint, neu.fingerprint])); + } + await schritt("pruefen"); + expect((await rotationsStand()).pruefung?.map((p) => p.ok)).toEqual([true, true]); + + await umstellen(AKTEUR); + const umgestellt = await rotationsStand(); + expect(umgestellt.aktuell?.id).toBe(neu.id); + expect(umgestellt.phase).toBe("aufraeumen"); + // Abschliessen geht erst, wenn der alte Key ueberall entfernt ist. + expect((await schritt("abschliessen")).fehler).toMatch(/steht noch auf/); + + await trockenlaufUndAusrollen(); + for (const host of [a, b]) { + const fingerprints = await fingerprintsAuf(host); + expect(fingerprints).toContain(neu.fingerprint); + expect(fingerprints).not.toContain(alt.fingerprint); + expect(await anmeldungKlappt(host, alt.id)).toBe(false); + expect(await anmeldungKlappt(host, neu.id)).toBe(true); + } + + expect((await schritt("abschliessen")).status).toBe("ERLEDIGT"); + const verworfen = await prisma.schluessel.findUniqueOrThrow({ where: { id: alt.id } }); + expect(verworfen.status).toBe("ROTIERT"); + expect(verworfen.privatGeloeschtAm).not.toBeNull(); + expect((await rotationsStand()).phase).toBe("bereit"); + + // Der Alltag geht mit dem neuen Key weiter. + const abgleich = await vorgangLaufen("ABGLEICH", { hostId: a.id }); + expect(abgleich.status).toBe("ERLEDIGT"); + expect(await prisma.abweichung.count({ where: { hostId: a.id, behobenAm: null } })).toBe(0); + }); + + it("laesst Hosts mit eigenem Deployment-Key aus", async () => { + const a = await eingerichteterHost(zielA, "ziel-a"); + const b = await eingerichteterHost(zielB, "ziel-b"); + const eigener = await prisma.schluessel.findFirstOrThrow({ where: { instanzStandard: true } }); + // b bekommt (formal) einen eigenen Key – derselbe genuegt, es zaehlt die Zuordnung. + await prisma.host.update({ where: { id: b.id }, data: { deploymentSchluesselId: eigener.id } }); + expect((await instanzZiele()).map((z) => z.hostId)).toEqual([a.id]); + }); +}); diff --git a/tests/integration/hilfen/host.ts b/tests/integration/hilfen/host.ts index 9dc3c5c..95b8e02 100644 --- a/tests/integration/hilfen/host.ts +++ b/tests/integration/hilfen/host.ts @@ -29,7 +29,8 @@ export async function vorgangLaufen( | "VERBINDUNGSTEST" | "ZIELKONTO_ANLEGEN" | "ZIELKONTO_ENTFERNEN" - | "ABGLEICH", + | "ABGLEICH" + | "ROTATION", daten: { hostId?: string; eingabe?: object;