Credential-Management fĂĽr DevOps-Teams
Seite 3: Ein beispielhaftes Set-up mit password-store
Die Installation von password-store ist recht einfach. Unter Linux ist die Software meist schon in den offiziellen Paketquellen enthalten. Eine Installation erfolgt zum Beispiel mit apt-get install pass und unter macOS gibt es ein Homebrew-Paket.
Der password-store nutzt GnuPG, um Passwörter verschlüsselt abzulegen. Vor der Verwendung von pass benötigt der Nutzer daher ein Schlüsselpaar, bestehend aus einem öffentlichen und einem privaten Schlüssel, das man durch das Kommandozeilenprogramm gpg beziehungsweise gpg2 generieren kann. Der private Schlüssel muss unbedingt geheim bleiben und sollte nur vom Nutzer selbst einsehbar sein, da er zum Entschlüsseln von Daten genutzt wird, die mit seinem öffentlichen Schlüssel verschlüsselt wurden. Der öffentliche Schlüssel hingegen erlaubt es einem Kommunikationspartner, Daten zu verschlüsseln, die anschließend nur der Besitzer des passenden privaten Schlüssels entschlüsseln kann. Daher kann der öffentliche Schlüssel mit Kommunikationspartnern geteilt oder direkt auf einen öffentlichen Schlüsselserver hochgeladen werden, der es jedem ermöglicht nach öffentlichen Schlüsseln anderer zu suchen.
Credentials im password-store lassen sich für eine Gruppe von Empfängern verschlüsseln. Die öffentlichen Schlüssel dieser Empfänger sind daher von einem Schlüsselserver zu importieren und zu beglaubigen (signieren).
password-store legt verschlüsselte Daten als Dateien ab, die sich in Verzeichnissen strukturieren lassen. Die Dateien lassen sich dann mit Git versionieren und verteilen. Einen password-store kann man dabei in einem eigenen Git-Repository verwalten. Mit der Erweiterung password-store-for-teams lassen sich mehrere solcher password-stores parallel nutzen. Eine derartige Aufteilung ist praktisch, wenn man zum Beispiel persönliche Passwörter von denen des Teams getrennt verwalten möchte.
Im dargestellten Team password-store lassen sich Shared Secrets verwalten.
EinfĂĽgen von Credentials ist auf der Kommandozeile recht einfach. Mit einem pass insert
[Verzeichnis/Name] kann man neue Credentials in einen password-store hinzufügen. Der Kreis der Mitglieder, die ein solches Shared Secret entschlüsseln können, lässt sich dabei pro Verzeichnis einschränken. Das wird durch die Datei .gpg-id realisiert, die in jedem Verzeichnis angelegt werden kann und für alle darunterliegenden Verzeichnisse wirkt. Sie enthält die Fingerabdrücke der Schlüssel, die zur Verschlüsselung verwendet werden sollen. Mit einem make list-keys im Verzeichnis des password-store lassen sich Fingerabdruck und Besitzer der definierten Schlüssel ausgeben.
Es empfiehlt sich, Änderungen an .gpg-id-Dateien einem Git-Review-Prozess zu unterziehen. So kann organisatorisch sichergestellt werden, dass sich niemand in eingeschränkte Credential-Gruppen einschleicht. Dadurch lässt sich eine abgestufte Zugangsberechtigung realisieren.
Entschlüsseln lässt sich ein abgelegtes Shared Secret von allen Mitgliedern des Teams mit dem Befehl pass [Verzeichnis/Name]. Ist der eigene GnuPG-Schlüssel mit einer Passphrase geschützt, muss der Benutzer diese Phrase auf einem der in GnuPG üblichen Wege eingeben.
Die Aufnahme eines neuen Teammitglieds ist in der asymmetrischen Welt von password-store ein anspruchsvoller Prozess. Der SchlĂĽssel des neuen Mitglieds ist im Team aufzunehmen und zu beglaubigen, und alle Credentials mĂĽssen neu verschlĂĽsselt abgelegt werden, sodass das neue Mitglied die Credentials in Zukunft auch entschlĂĽsseln kann. Dieser Prozess erfolgt in drei Schritten:
- Die SchlĂĽssel-ID (Fingerabdruck) des neuen Teammitglieds in der Datei .gpg-id aufnehmen.
- Den entsprechenden Schlüssel von einem Schlüsselserver beziehen. Dieser Prozessschritt geschieht durch den Befehl make import-and-sign. Der öffentliche Schlüssel wird anhand der Fingerabdrücke in der .gpg-id-Datei von einem Schlüsselserver importiert. Der Schlüssel lässt sich nach dem Import zur Beglaubigung signieren.
- Der Befehl make reencrypt verschlĂĽsselt alle Team-Credentials fĂĽr das neue Mitglied neu. Hierbei ist jedoch zu beachten, dass das durchfĂĽhrende Mitglied nur die Dateien neu verschlĂĽsseln kann, die es auch entschlĂĽsseln kann. Gibt es also Verzeichnisse, deren Dateien nur ein Teil des Teams entschlĂĽsseln kann, ist das NeuverschlĂĽsseln auch von einem dieser Mitglieder durchzufĂĽhren.
Zwar funktionieren die einzelnen Prozessschritte wie beschrieben, jedoch ist die Benutzung ĂĽber die Kommandozeile mĂĽhsam.
Die verschiedensten Integrationen sind eine der Stärken von password-store. So lassen sich nicht nur Web-, sondern auch SSH- oder Git-Credentials verwalten, für Mac-Nutzer ist eine Integration in das Produktivitätswerkzeug Alfred vorhanden.
Ausblick auf gopass
gopass ist ein verbesserter password-store, der die für die Nutzung im Team notwendigen Erweiterungen enthält und eine deutlich bessere Nutzbarkeit bietet. Vor allem beim Hinzufügen und Entfernen von Teammitgliedern erleichtert gopass die Schlüsselverwaltung. Die Aufteilung in mehrere separate Stores lässt sich besser konfigurieren, das Speicherformat ist dasselbe wie im password-store und gopass ist auch auf der Kommandozeile kompatibel.
Obwohl es ein junges Produkt ist, hat es gopass bereits in den Thoughtworks Radar geschafft. gopass steht unter der MIT-Lizenz.