docs: Gate 2 for #0051 — the mandatory intermediate step is where the benefit is

Authentik's documentation is explicit that upgrades follow the sequence of major
releases and must not skip, so the path is 2026.2.3 to 2026.5.6 to 2026.8.0.
Both releases state they introduce no new requirements, and their one breaking
change each was checked against our state rather than assumed: the deprecated
Postgres connection options are not set, the removed WebAuthn option is not set,
and there are no outposts to keep in step.

Scanning all three images changes the shape of the plan. The intermediate
version carries the entire critical gain — five instead of twenty-seven — and
385 of the 456 high findings. The second step adds high findings only. That is
what makes splitting the two steps defensible rather than timid, and 2026.8.0 is
three days old, which is a poor age for the login path of the whole platform.

The rollback is a database restore, not a downgrade; the documentation says so
outright. The backup is nightly and was actually replayed during #0030, so the
fallback is proven rather than assumed — but sessions since the backup are lost
with it, and that belongs in the plan rather than in the surprise.
This commit is contained in:
Thore Cimbal
2026-08-21 12:00:00 +00:00
parent 27c3579743
commit 80ee448e20
+104
View File
@@ -178,3 +178,107 @@ brächte, eine ersparte Änderung. Gehört in das Runbook (Abnahmekriterium 4).
Zwischen 2026.2 und 2026.8 liegt eine volle Fassungsreihe mit eigenen
Datenbank-Migrationen; Authentik-Upgrades überspringen Fassungsreihen nicht
folgenlos. Das ist zu belegen, nicht anzunehmen.
## Gate 2 — Architecture: der Authentik-Sprung
### Recherche-Ergebnis: gestuft ist Pflicht, Handarbeit fällt keine an
Die Anleitung ist ausdrücklich:
> *„**Upgrade sequence**: Upgrades must follow the sequence of major releases;
> do not skip directly from an older major version to the most recent version."*
> *„Always upgrade to the latest **minor** version … before upgrading to the next
> major version."*
Der Weg ist also **2026.2.3 → 2026.5.6 → 2026.8.0**, nicht verhandelbar.
**Beide Fassungen sagen zugleich:** *„This release does not introduce any new
requirements."* Ihre je eine Bruchstelle wurde gegen unseren Stand geprüft und
trifft uns **nicht**:
| Bruchstelle | Fassung | Bei uns |
|---|---|---|
| `AUTHENTIK_POSTGRESQL__CONN_OPTIONS` abgekündigt | 2026.5 | **nicht gesetzt** — weder im Cluster noch im Repo |
| Option *„Prevent duplicate devices"* der WebAuthn-Stufe entfällt | 2026.8 | **nicht gesetzt**; unsere Blueprints referenzieren die Stufe nur |
| Outposts müssen zur Server-Fassung passen | 2026.8 | **0 Outposts** im Cluster |
### Wo der Gewinn sitzt — und das ändert die Reihenfolge
Alle drei Images gescannt, das laufende aus den Metriken:
| Fassung | CRITICAL | HIGH |
|---|---|---|
| 2026.2.3 (läuft) | 27 | 477 |
| **2026.5.6** | **5** | **92** |
| 2026.8.0 | 5 | 21 |
⚠️ **Die Pflicht-Zwischenstufe trägt den gesamten CRITICAL-Gewinn** (22) und
385 der 456 HIGH. Stufe 2 liefert nur noch 71 HIGH. Die Zwischenstufe ist also
kein Hindernis auf dem Weg zum Ziel, sondern **der Großteil des Ziels**.
Das ist die Grundlage dafür, die beiden Stufen **trennen** zu dürfen: Wenn
Stufe 2 warten muss, ist trotzdem alles Kritische erledigt.
### Randbedingungen
- ⚠️ **Sprengweite: der Anmeldeweg der gesamten Plattform.** MAS bezieht seine
Identitäten von Authentik; fällt Authentik aus, kommt auch in Matrix niemand
mehr hinein. Das ist kein Dienst unter vielen.
- ⚠️ **Der Rückweg ist eine Datenbank-Wiederherstellung, kein Downgrade.** Die
Anleitung sagt es wörtlich: *„Make sure to back up your database in case you
need to revert an upgrade"* und *„If you see this entry, revert to your
database backup."* Sind die Migrationen einmal gelaufen, hilft ein
Zurücksetzen der Fassung allein nicht.
- **Die Sicherung ist belegt**, nicht vermutet: nächtlich um 01:15 (drei Erfolge
in Folge, zuletzt 166,82 MB) und **im Restore geprobt**#0030, 325.149
zurückgespielte Zeilen.
- **Ausgerollt wird über Flux**, die Chart-Fassung steht in `gitops`. Der Rückweg
ist damit ein `git revert` **plus** Anstoßen der Quelle — die Lehre aus
#0088, Slice 1: ein Revert allein wirkt nicht.
- ⚠️ **2026.8.0 ist drei Tage alt** (erschienen 2026-08-18). Die neueste Fassung
des Anmeldewegs am dritten Tag zu fahren, ist eine Entscheidung und keine
Selbstverständlichkeit.
### Der Plan
**Stufe 0 — unmittelbar davor.** Sicherung von Hand auslösen, nicht auf die
nächtliche vertrauen: Zwischen 01:15 und dem Eingriff liegen Stunden, in denen
Anmeldungen und Sitzungen entstanden sind. Erfolg am Protokoll belegen.
**Stufe 1 — 2026.2.3 → 2026.5.6.** Ein Commit in `gitops`
(`spec.chart.spec.version`), Flux rollt aus. Danach in dieser Reihenfolge prüfen:
1. Migrationen im Worker-Protokoll gelaufen, **ohne** `migration inconsistency`.
2. `server` und `worker` bereit, beide auf `2026.5.6`.
3. `https://auth.axion1337.chat/-/health/ready/` antwortet 200.
4. **Eine echte Anmeldung durch die ganze Kette** — Element → MAS → Authentik.
Nicht der Health-Endpunkt, sondern der Weg, den ein Nutzer geht.
5. Blueprints vom Worker angewandt (Flows und Provider unverändert vorhanden).
6. Nach dem nächsten Scan-Durchlauf: `trivy_vuln_info` für das Authentik-Image
von 27 auf **5** CRITICAL gefallen — der Nachweis am Dashboard, nicht am Tag.
**Stufe 2 — 2026.5.6 → 2026.8.0.** Gleiche Schritte, gleiche Prüfpunkte.
⚠️ **Empfehlung zur Trennung:** Stufe 1 jetzt, Stufe 2 nach einer Ruhezeit oder
sobald 2026.8 eine Nachfolgefassung hat. Begründung ist gemessen, nicht
vorsichtshalber: Stufe 1 bringt **alle 22 CRITICAL**, Stufe 2 nur noch HIGH —
und der Anmeldeweg der Plattform ist der falsche Ort für eine drei Tage alte
Fassung. Sollte 2026.8 aus anderen Gründen dringend sein, ist das eine
Entscheidung mit bekanntem Preis, keine Überraschung.
**Rückweg je Stufe:** `git revert` der Fassungsänderung **plus** Anstoßen der
GitRepository-Quelle; wenn die Migrationen bereits liefen, zusätzlich die
Datenbank aus der Sicherung von Stufe 0 zurückspielen (Stufe 3 in
`notfallhandbuch/notfall.sh`). ⚠️ **In diesem Fall gehen Anmeldungen und
Sitzungen seit der Sicherung verloren** — nicht die Konten, aber die Sitzungen;
alle Nutzer müssen sich neu anmelden.
### Nicht Teil dieses Sprungs
- **`postgres:17.9-bookworm`** — Authentiks eigene Datenbank, mit 22 CRITICAL
der zweitgrößte Posten im Bestand, davon nur 3 behebbar. Ein Datenbank-Update
ist ein eigenes Risiko mit eigenem Rückweg und gehört nicht in denselben
Eingriff wie das Anwendungs-Update.
- Die übrigen 18 laufenden Images aus Haufen A.
> **STOP — Freigabe für Gate 2.**