docs(issues): defer token rotation to platform acceptance (#0015, #0027 W4)

sorb's call: rotate everything once at acceptance rather than piecemeal now.
That is the lower-risk order — the mirror credential is still unidentifiable and
the mirrors feed the Flux source, so four separate revocations would mean four
separate ways to break it silently. The inventory and the ordering stay valid, so
the later rotation is execution rather than analysis.

Recorded what the deferral accepts rather than leaving it implicit: the exposed
WireGuard key and PATs stay valid, five never-used tokens remain (one with
manage_runner and k8s), and 'acceptance' is not a dated milestone — which is
exactly how security work rots. The existing due date stays as a review anchor,
not a rotation deadline.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Thore Cimbal
2026-08-15 12:00:00 +00:00
co-authored by Claude Opus 4.8
parent 463fb570d5
commit 5df37eaf9d
3 changed files with 46 additions and 2 deletions
+1 -1
View File
@@ -13,7 +13,7 @@ Verteilung: M1 6 · M2 18 · M4 2 · M5 4
| [0008](docs/issues/0008-cfgmon-03-prometheus-remote-write-und-loki.md) | waiting | M1 | medium | CFGMON-03: Prometheus-Remote-Write und Loki öffentlich ohne Auth — Weg A, nachgelagerte Prüfung | | [0008](docs/issues/0008-cfgmon-03-prometheus-remote-write-und-loki.md) | waiting | M1 | medium | CFGMON-03: Prometheus-Remote-Write und Loki öffentlich ohne Auth — Weg A, nachgelagerte Prüfung |
| [0009](docs/issues/0009-cfgmon-04-grafana-admin-credentials-aus-env.md) | open | M2 | low | CFGMON-04: Grafana-Admin-Credentials aus .env gelten nicht für die HTTP-API | | [0009](docs/issues/0009-cfgmon-04-grafana-admin-credentials-aus-env.md) | open | M2 | low | CFGMON-04: Grafana-Admin-Credentials aus .env gelten nicht für die HTTP-API |
| [0014](docs/issues/0014-cfgmon-14-root-zugang-ueber-die-docker-gruppe.md) | open | M2 | low | CFGMON-14: Root-Zugang über die docker-Gruppe umgeht sudo und hinterlässt keine Spur | | [0014](docs/issues/0014-cfgmon-14-root-zugang-ueber-die-docker-gruppe.md) | open | M2 | low | CFGMON-14: Root-Zugang über die docker-Gruppe umgeht sudo und hinterlässt keine Spur |
| [0015](docs/issues/0015-cfgmon-15-token-hygiene-einmal-tokens-der.md) | in-progress | M2 | medium | CFGMON-15: Token-Hygiene — Einmal-Tokens der LABNET-02-Nacht widerrufen | | [0015](docs/issues/0015-cfgmon-15-token-hygiene-einmal-tokens-der.md) | waiting | M2 | medium | CFGMON-15: Token-Hygiene — Einmal-Tokens der LABNET-02-Nacht widerrufen |
| [0018](docs/issues/0018-doc-01-wiki-rollout-abschliessen-ci-freigaben.md) | open | M2 | low | DOC-01: Wiki-Rollout abschließen — CI-Freigaben, Zeitplan, Dokploy-Stack, wiki.lab | | [0018](docs/issues/0018-doc-01-wiki-rollout-abschliessen-ci-freigaben.md) | open | M2 | low | DOC-01: Wiki-Rollout abschließen — CI-Freigaben, Zeitplan, Dokploy-Stack, wiki.lab |
| [0019](docs/issues/0019-doc-02-veralteten-wiki-branch-im-gitops-repo.md) | open | M2 | low | DOC-02: Veralteten `wiki`-Branch im gitops-Repo entfernen? | | [0019](docs/issues/0019-doc-02-veralteten-wiki-branch-im-gitops-repo.md) | open | M2 | low | DOC-02: Veralteten `wiki`-Branch im gitops-Repo entfernen? |
| [0021](docs/issues/0021-overmind-03-windows-build-vm-verschwindet-ci.md) | waiting | M2 | medium | OVERMIND-03: Windows-Build-VM verschwindet — CI kann sie nur starten, nicht anlegen | | [0021](docs/issues/0021-overmind-03-windows-build-vm-verschwindet-ci.md) | waiting | M2 | medium | OVERMIND-03: Windows-Build-VM verschwindet — CI kann sie nur starten, nicht anlegen |
@@ -1,11 +1,12 @@
--- ---
type: issue type: issue
id: "0015" id: "0015"
status: in-progress status: waiting
created: 2026-08-01 created: 2026-08-01
milestone: M2 milestone: M2
priority: medium priority: medium
due: 2026-08-31 due: 2026-08-31
wartegrund: "Entscheidung sorb 2026-08-15: Rotation erfolgt gebuendelt EINMAL bei der Abnahme der Plattform, nicht stueckweise vorher. Die Bestandsaufnahme (24 PATs, 6 Mirrors) liegt vor, die Reihenfolge steht — es fehlt nur der Ausloeser."
host: cfgmon host: cfgmon
area: security area: security
gitlab_iid: "15" gitlab_iid: "15"
@@ -106,3 +107,35 @@ genauso aus.
- **W4 Punkt 4** (Repo-Zuhause für `lab.conf`, systemd-Drop-in, Root-CA) ist **nachweislich - **W4 Punkt 4** (Repo-Zuhause für `lab.conf`, systemd-Drop-in, Root-CA) ist **nachweislich
offen**: `gitops:host-config/` existiert als Muster, enthält aber nur `maintenance-notify`. offen**: `gitops:host-config/` existiert als Muster, enthält aber nur `maintenance-notify`.
Die Schließung von #16 war für diesen Punkt also verfrüht. Die Schließung von #16 war für diesen Punkt also verfrüht.
## Entscheidung 2026-08-15 — gebündelte Rotation bei der Abnahme
sorb: **Alle Tokens werden einmal gemeinsam rotiert, wenn die Plattform abgenommen ist**
nicht jetzt stückweise.
Das ist die risikoärmere Reihenfolge: Ein Widerruf mitten im Betrieb kann still einen der
sechs Push-Mirrors brechen (das Mirror-Credential ist nach wie vor nicht rekonstruierbar,
s.o.), und die Mirrors beliefern unter anderem die **Flux-Quelle**. Einmal koordiniert
rotieren, mit allen Beteiligten am Tisch, ist sauberer als vier Einzeleingriffe mit je
eigener Bruchstelle.
**Die Vorarbeit bleibt gültig und macht die spätere Rotation kurz:** Bestand der 24 PATs
(inkl. der fünf nie benutzten und der Dubletten), Zustand aller sechs Mirrors, und die
festgelegte Reihenfolge — erst dediziertes Mirror-Credential setzen, dann widerrufen, dann
Mirror-Status prüfen. Beim Abnahmetermin ist das abzuarbeiten, nicht neu zu erarbeiten.
⚠️ **Was mit der Vertagung bewusst in Kauf genommen wird** (gehört benannt, nicht
stillschweigend):
- Die in der LABNET-02-Nacht exponierten Werte — **WireGuard-Private-Key** und die beiden
git.lab-PATs — bleiben bis zur Abnahme gültig. Nach der Secrets-Regel („anzeigen =
Exposure = Rotation") ist das eine **bewusste Ausnahme**, kein Versehen.
- Fünf aktive, nie benutzte Tokens bleiben bestehen, darunter id=18 (`oskar light`) mit
`manage_runner` + `k8s` — der breiteste Scope im Bestand.
- **„Abnahme" ist kein datierter Meilenstein.** Genau so bleibt Sicherheitsarbeit liegen:
vertagt auf ein Ereignis ohne Datum. Das `due` dieses Issues (2026-08-31) bleibt deshalb
stehen — nicht als Rotationsfrist, sondern als **Wiedervorlage**: Ist die Abnahme dann
nicht in Sicht, wird die Vertagung neu bewertet statt weiterzulaufen.
Wenn die Vertagung dauerhaft gelten soll, gehört sie nach dem Framework in einen ADR
(bewusste Ausnahme von der Secrets-Regel) — bislang steht sie nur hier.
@@ -272,3 +272,14 @@ und knüpft ihn an Auflagen.
**Damit bleibt von den acht Widersprüchen nur W4 offen**, und zwar als konkrete Aufgabe statt **Damit bleibt von den acht Widersprüchen nur W4 offen**, und zwar als konkrete Aufgabe statt
als Klärungsfrage: Host-Config ins Repo (Punkt 4) + WG-Key rotieren (Punkt 5, neben #0015). als Klärungsfrage: Host-Config ins Repo (Punkt 4) + WG-Key rotieren (Punkt 5, neben #0015).
## Update 2026-08-15 (3) — W4 Punkt 5 vertagt
sorb hat entschieden: **Die Rotation läuft gebündelt einmal bei der Abnahme der Plattform**,
nicht stückweise jetzt (Begründung und in Kauf genommene Folgen: #0015). Damit ist W4 Punkt 5
**terminiert, aber nicht erledigt** — der exponierte WireGuard-Private-Key gehört ausdrücklich
dazu.
**Restlicher Stand von W4:** Punkt 4 (Repo-Zuhause für `lab.conf`, systemd-Drop-in, Root-CA)
bleibt die einzige unerledigte *Arbeit* aus den acht Widersprüchen — `gitops:host-config/`
existiert als Muster, enthält aber nur `maintenance-notify`.