Person austragen¶
Ungeprüft
Diese Anleitung ist noch nicht durchgespielt worden; Befehle, Bezeichnungen und erwartete Ausgaben können abweichen.
Was noch zu prüfen ist, steht in todo/doku.md.
Ziel¶
Die Person kommt nicht mehr an Repo, Hosts, Webspaces, Vaultwarden und die Admin-Oberfläche von Authentik, und die Secrets und Tokens, die sie kannte, sind getauscht.
Voraussetzungen¶
- dein Rechner ist eingerichtet (Arbeitsrechner einrichten), du kommst auf beide Hosts und kannst die Secrets entschlüsseln
- Zugang zu den Web-Oberflächen von Codeberg (Organisation
garagelab), Vaultwarden, Authentik, hosting.de, deSEC, Mailjet, Webling und Discourse (als Admin); wo du keinen hast, bitte in Signal jemanden darum - von der Person: der Name ihres Eintrags in
syslet/.sops.yaml(admin_<name>) und der Kommentar am Ende ihres SSH-Schlüssels (<name>@garagelabaus Arbeitsrechner einrichten, Schritt 6) - gelesen: Secrets im Repo und Secret anlegen oder ändern
Schritte¶
1. Stand holen und plan prüfen¶
Wie in Änderung ausrollen, Schritte 1 bis 3, für syslet/werner, syslet/containerhost und desec.
Erwartet: Die Hosts zeigen No changes detected. All units are up to date., DNS zeigt keine Änderungen.
2. Zugang zum Repo entziehen¶
Entferne die Person in den Einstellungen der Organisation garagelab auf Codeberg aus dem Team, über das sie Zugriff auf garagelab/infra hat, oder in den Einstellungen des Repos unter „Collaborators“, falls sie dort einzeln eingetragen ist.
Erwartet: Sie steht weder im Team noch unter „Collaborators“.
3. SSH-Schlüssel auf beiden Hosts entfernen¶
Prüf zuerst, dass genau eine Zeile zum Kommentar passt:
| Bash | |
|---|---|
Erwartet: jeweils 1.
Bei einer anderen Zahl hör hier auf und sieh dir die Datei an; sonst löschst du womöglich den Zugang einer anderen Person.
| Bash | |
|---|---|
sed legt vorher eine Kopie als authorized_keys.bak an.
Wiederhol die grep-Befehle von oben.
Erwartet: jeweils 0, und ssh werner.garage-lab.de hostname funktioniert für dich weiterhin.
Entferne denselben Schlüssel außerdem in der Web-Oberfläche von hosting.de bei den SSH-Zugängen der beiden Webspaces, für die Webseite und das Wiki (siehe hosting.de).
4. Zugang zu Vaultwarden entziehen¶
Entferne die Person in Vaultwarden aus der Organisation des Vereins.
Erwartet: Sie steht nicht mehr in der Liste der Mitglieder der Organisation.
5. Admin-Konto in Authentik deaktivieren¶
Öffne in der Admin-Oberfläche von Authentik unter Directory → Users das persönliche Admin-Konto der Person und deaktiviere es.
Erwartet: In der Liste steht bei dem Konto, dass es inaktiv ist.
6. age-Schlüssel entfernen und Datenschlüssel erneuern¶
Lösch in syslet/.sops.yaml die Zeile - &admin_<name> age1… unter keys: und in beiden creation_rules die Zeile - *admin_<name>.
| Bash | |
|---|---|
Erwartet: drei entfernte Zeilen, keine neuen.
| Bash | |
|---|---|
updatekeys nimmt die Person aus den Empfängern, rotate verschlüsselt jede Datei mit einem neuen Datenschlüssel.
Erwartet: git status zeigt syslet/.sops.yaml und alle creds-*.enc.yaml beider Hosts als geändert.
7. Tokens aus der .envrc tauschen¶
Die Person kennt die Tokens für deSEC und für Terraform aus ihrer .envrc (Arbeitsrechner einrichten, Schritt 9).
deSEC: Leg in der Web-Oberfläche von deSEC unter Tokens ein neues Token mit denselben Einstellungen wie das bisherige an.
Ersetz es im Vaultwarden und in deiner .envrc und führ direnv allow aus.
Erwartet: kein 401 oder 403, keine Änderungen.
Lösch danach das alte Token bei deSEC.
Terraform: Tausch das Token von terraform-mgmt nach Terraform für Authentik einrichten, Schritte 1 bis 3.
8. Secrets tauschen¶
Tausch jedes Secret aus der Tabelle so:
- neuen Wert dort erzeugen, wo er herkommt (Spalte „Neuer Wert“); den alten dort noch nicht löschen
- neuen Wert mit
sops editeintragen wie in Secret anlegen oder ändern, Schritte 2 bis 4 - erst nach dem Ausrollen in Schritt 9 den alten Wert an der Quelle löschen
| Datei | Schlüssel | Neuer Wert |
|---|---|---|
creds-mailjet (beide Hosts) |
username, password |
neuer API-Schlüssel in der Web-Oberfläche von Mailjet: API Key als username, Secret Key als password |
creds-caddy (beide Hosts) |
desectoken |
neues Token in der Web-Oberfläche von deSEC; ersetz danach die ID des alten Tokens unter desec: tokenPolicies in der Zonendatei des Hosts durch die ID des neuen (siehe Unsere Zonen) |
creds-attraccess, creds-hedgedoc-server, creds-membertool-server |
sessionsecret |
openssl rand -hex 32; alle, die angemeldet sind, werden abgemeldet |
creds-discourse-server, creds-engelsystem-server, creds-hedgedoc-server, creds-membertool-server, creds-nextcloud-aio-nextcloud |
oidcclientsecret |
in der Admin-Oberfläche von Authentik unter Applications → Providers beim Provider der App ein neues Client-Secret setzen; bis zum Ausrollen klappt der Login bei der App nicht |
creds-membertool-server |
weblingapikey |
neuer API-Schlüssel in Webling |
creds-membertool-server |
authentikapitoken |
neues Token in der Admin-Oberfläche von Authentik unter Directory → Tokens and App passwords, für denselben Benutzer wie das bisherige |
creds-redirect-updater |
discoursetoken |
neuer API-Key in der Admin-Oberfläche von Discourse unter API, für denselben Benutzer wie der bisherige |
creds-vaultwarden-server |
admintoken |
openssl rand -hex 32; den neuen Wert zusätzlich im Vaultwarden ablegen |
creds-grafana (containerhost) |
adminpassword |
openssl rand -hex 32; Grafana übernimmt den Wert nur beim ersten Start, setz ihn deshalb nach dem Ausrollen zusätzlich mit podman exec grafana grafana cli admin reset-admin-password '<neues Passwort>' auf containerhost |
creds-engelsystem-server |
adminpassword |
neues Passwort; ändere es zusätzlich in Engelsystem beim Admin-Konto |
Die Secrets für das Backup (creds-backup, creds-resticserver) tauschst du hier nicht; dafür gibt es noch keine Anleitung.
Ändert sich ein desectoken, gehört auch die geänderte Zonendatei in desec/ dazu.
9. Ausrollen¶
Zuerst DNS, falls sich in Schritt 8 eine Zonendatei geändert hat, dann beide Hosts:
Erwartet: Bei DNS ändern sich nur die Token-Policies.
Erwartet: Unter Secret changes: stehen alle Secrets des Hosts, in der Summary alle Container, die Secrets nutzen, mit secret updated, restarted; bei der Frage Continue? (yes/no) tippe yes.
Die Apps sind dabei kurz nicht erreichbar; such dir dafür eine ruhige Zeit aus.
Dasselbe in syslet/containerhost.
Danach die alten Werte an den Quellen löschen (Schritt 8) und das Passwort in Grafana setzen.
Erwartet: No changes. Your infrastructure matches the configuration., obwohl sich die Client-Secrets geändert haben.
10. Committen und pushen¶
| Bash | |
|---|---|
Erwartet: am Ende von git push eine Zeile main -> main.
11. Den anderen Bescheid geben¶
Sag allen anderen Admins in Signal, dass sie git pull ausführen und die neuen Tokens für deSEC und Terraform aus dem Vaultwarden in ihre .envrc übernehmen müssen.
Prüfen¶
cue cmd planzeigt insyslet/wernerundsyslet/containerhostwiederNo changes detected. All units are up to date., indeseckeine Änderungen.grep -c admin_<name> syslet/.sops.yamlgibt0aus.- Der Login per Authentik funktioniert bei Discourse, Engelsystem, HedgeDoc, Membertool und Nextcloud.
- Mails kommen an, etwa eine Einladung aus Vaultwarden.
Wenn etwas schiefgeht¶
- Du hast in Schritt 3 die falsche Zeile gelöscht: Auf dem Host liegt die alte Datei als
/root/.ssh/authorized_keys.bak; kopier sie mitcpzurück, solange deine eigene Verbindung noch offen ist. sops updatekeysodersops rotatemeldetFailed to get the data key: Du kannst die Dateien selbst nicht entschlüsseln; prüfe mitsops -d werner/creds-mailjet.enc.yaml, ob dein eigener Schlüssel funktioniert.- Eine App meldet beim Login
invalid_client: Das Client-Secret in Authentik und im Secret stimmen nicht überein; vergleiche sie wie in App per OIDC anbinden. - Caddy bekommt für einen Namen kein Zertifikat mehr: Die ID in der Token-Policy passt nicht zum neuen Token; vergleiche sie mit der ID in der Web-Oberfläche von deSEC.
- Ein Container kommt nach dem apply nicht wieder hoch: Container-Status und Logs ansehen