Die Pipelines des Buchungsportals der Nordlicht Reisen GmbH kennen inzwischen sechs Werte, die nicht öffentlich sein dürfen: den Verbindungstext der Datenbank, den Schlüssel eines Zahlungsanbieters, ein Signierschlüsselpaar für die Mobile-App, einen Schlüssel für den Mailversand, das Token einer Qualitätsprüfung und den Zugang zu Azure. Alle liegen als Variablen im Klartext in den Pipelines oder als Wiki-Eintrag. Sie sollen für jeden Wert entscheiden, ob er überhaupt ein Geheimnis sein muss, wo er sonst liegt und wie die Pipeline ihn bekommt, ohne dass er in einem Protokoll erscheint.
Die Prüfung nennt das: Azure Key Vault in Pipelines nutzen, geheimnislose Authentifizierung (Workload-Identitätsverbund, OIDC) einsetzen, sichere Dateien verwenden und das Durchsickern von Geheimnissen verhindern.
Vorwissen: Wie ein Key Vault aufgebaut ist, wer darauf zugreifen darf (RBAC statt Zugriffsrichtlinien) und wie eine App ihre Geheimnisse daraus lädt, zeigt K3, Lektion 3.3.2. Wie .NET Geheimnisse aus Protokollen schwärzt und wie Secret Scanning und Push Protection bei GitHub wirken, steht in K3, Lektion 3.3.3; die Anmeldung ohne Geheimnis in Actions und Azure Pipelines in K3, Lektion 3.7.5 und die Maskierung in Protokollen in K3, Lektion 3.7.7. Hier geht es um die Auswahl und den Weg in der Pipeline selbst.
Zuerst: braucht die Pipeline das Geheimnis?
Microsoft schreibt in den Empfehlungen zu Geheimnissen in Azure Pipelines: Geheimnisse bergen eigene Risiken, deshalb am besten gar nicht benutzen. Drei Alternativen nennt die Seite:
- Dienstverbindungen für Azure und andere Dienste (Lektion 5.1).
- Verwaltete Identitäten, mit denen Anwendungen sich ohne ausdrückliche Anmeldeinformation bei Azure anmelden.
- Die Azure-CLI-Aufgabe mit
addSpnToEnvironment, um Angaben zum Dienstprinzipal ohne ausdrückliche Weitergabe von Geheimnissen zu erreichen. Laut Referenz der Aufgabe fügt die Option Dienstprinzipal-ID, Schlüssel oder Verbund-Token und Mandanten-ID in die Umgebung des Skripts ein.
Die Grundregel lautet also: erst die Identität, dann das Geheimnis. Was übrig bleibt, wandert in den Key Vault.