Schützen von Geheimnissen in Azure Pipelines

Dieser Artikel enthält bewährte Methoden zum Schützen von Geheimnissen in Azure Pipelines. Als Geheimnis wird alles bezeichnet, für das Sie den Zugriff streng kontrollieren möchten, z. B. API-Schlüssel, Kennwörter, Zertifikate oder kryptografische Schlüssel.

Azure Pipelines generiert keine geheimen Werte. Möglicherweise müssen Sie einer Pipeline jedoch ein Geheimnis hinzufügen, um vertrauliche Daten wie einen API-Schlüssel zu speichern. Weitere Informationen zum Festlegen geheimer Variablen finden Sie unter Festlegen geheimer Variablen.

Verwenden Sie Geheimnisse nicht, wenn eine andere Methode verfügbar ist.

Die beste Methode, ein Geheimnis zu schützen, besteht darin, erst gar kein Geheimnis zu haben. Überprüfen Sie, ob Ihre Pipeline eine andere Methode als die Verwendung eines Geheimnisses zum Ausführen einer Aufgabe verwenden kann.

Verwenden von Geheimnisvariablen

Vertrauliche Werte sollten niemals als Nur-Text in einer Azure Pipelines YML-Datei gespeichert werden.

Geheime Variablen können für private Informationen wie Kennwörter, IDs und andere personenbezogene Daten verwendet werden, die Sie nicht in einer Pipeline verfügbar machen möchten. Die empfohlene Methode zum Festlegen geheimer Variablen ist mit Azure Key Vault. Sie können Geheimnisvariablen auch in der Benutzeroberfläche oder in einer Variablengruppe festlegen. Es wird davon abgeraten, einen Protokollierungsbefehl zum Festlegen einer Geheimnisvariablen zu verwenden. Wenn Sie ein Geheimnis mit einem Protokollierungsbefehl festlegen, können alle Personen, die Zugriff auf Ihre Pipeline haben, auch das Geheimnis sehen.

Geheimnisvariablen sind verschlüsselt und können in Pipelines verwendet werden, ohne deren Wert verfügbar zu halten. Obwohl ihre Werte nicht verfügbar gemacht werden, geben Sie niemals Geheimnisse als Ausgabe zurück und übergeben keine Geheimnisse in der Befehlszeile. Stattdessen wird empfohlen, Ihre Geheimnisse Umgebungsvariablen zuzuordnen.

Wenn Sie ein Geheimnis erstellen, befolgen Sie Richtlinien zur Variablenbenennung, und stellen Sie sicher, dass Ihr geheimer Name vertrauliche Informationen nicht offenlegt.

Einschränken des Zugriffs auf geheime Variablen

Um den Zugriff auf Geheimnisse in Azure DevOps einzuschränken, können Sie:

  • Ihre Geheimnisse in Azure Key Vault speichern. Mit Azure Key Vault können Sie dann das rollenbasierte Zugriffssteuerungsmodell von Azure verwenden, um den Zugriff auf ein Geheimnis oder eine Gruppe von Geheimnissen zu beschränken.
  • Geheime Variablen in der Benutzeroberfläche für eine Pipeline festlegen. Geheimnisvariablen, die in der Benutzeroberfläche der Pipelineeinstellungen für eine Pipeline festgelegt sind, sind auf die Pipeline ausgerichtet, in der sie festgelegt sind. Sie können also Geheimnisse haben, die nur für Benutzer mit Zugriff auf diese Pipeline sichtbar sind.
  • Geheimnisse in einer Variablengruppe festlegen. Variablengruppen befolgen das Modell für Bibliotheksicherheit. Sie können steuern, wer in einer Bibliothek neue Elemente definieren kann und wer ein vorhandenes Element verwenden kann.

Schreiben Sie Geheimnisse nicht in Protokolle

Azure Pipelines versucht, Geheimnisse nach Möglichkeit aus Protokollen zu bereinigen. Diese Filterung erfolgt nach bestem Bemühen und kann nicht jede Art und Weise abfangen, in der Geheimnisse aufgedeckt werden können. Geheimnisse sollten nicht an der Konsole ausgegeben, in Befehlszeilenparametern verwendet oder in Dateien protokolliert werden. Beispielsweise müssen einige Azure CLI-Befehle Ausgabeinformationen bereitstellen, die Sie schützen müssen. Wenn Sie Azure CLI aus Ihrer Pipeline aufrufen, verwenden Sie das Ausgabeformat „Keine“, und wenn Sie ein Geheimnis aus einem Azure CLI-Aufruf abrufen müssen, verwenden Sie kein Ausgabeformat, und rufen Sie Sicherheitsinformationen für eine geheime Variable ab.

Verwenden Sie strukturierte Daten nicht als Geheimnisse

Bei strukturierten Daten können bei der Bearbeitung des Geheimnisses innerhalb von Protokollen Fehler auftreten. Der Grund dafür ist, dass die Bearbeitung weitgehend davon abhängig ist, dass eine exakte Übereinstimmung für den spezifischen geheimen Wert gefunden wird. Verwenden Sie z. B. kein BLOB mit JSON, XML oder YAML (oder Ähnliches), um einen geheimen Wert zu kapseln, einschließlich Steuerzeichen wie Wagenrücklaufzeichen (\r) und Zeilenfeed (\n), da dadurch die Wahrscheinlichkeit erheblich reduziert wird, dass die Geheimnisse ordnungsgemäß unkenntlich gemacht werden. Erstelle stattdessen einzelne Geheimnisse für jeden vertraulichen Wert.

Überprüfe, wie Geheimnisse verarbeitet werden

Du solltest überprüfen, ob Geheimnisse wie erwartet verwendet werden. Sie können dies tun, indem Sie den Quellcode des Repositorys, das die Pipeline hostet, und alle Aufgaben, die in der Pipeline verwendet werden, überprüfen. Stelle z. B. sicher, dass vertrauliche Informationen nicht an unbeabsichtigte Hosts gesendet werden oder explizit in der Protokollausgabe ausgegeben werden.

Zeigen Sie die Ausführungsprotokolle für Ihre Pipeline nach dem Testen gültiger/ungültiger Eingaben an, und überprüfen Sie, ob geheime Schlüssel ordnungsgemäß unkenntlich gemacht wurden oder nicht angezeigt werden. Es ist nicht immer offensichtlich, wie ein Befehl oder ein Tool, das Sie aufrufen, Fehler ausgibt, und Geheimnisse werden später in Fehlerprotokollen angezeigt. Azure Pipelines versucht, Geheimnisse nach Möglichkeit aus Protokollen zu bereinigen. Diese Filterung erfolgt nach bestem Bemühen und kann nicht jede Art und Weise abfangen, in der Geheimnisse aufgedeckt werden können. Daher empfiehlt es sich, die Pipelineprotokolle nach dem Testen gültiger und ungültiger Eingaben manuell zu überprüfen.

Überwachen und Drehen von Geheimnissen

Überprüfen Sie in regelmäßigen Abständen die von Ihren Pipelines verwendeten registrierten Geheimnisse, um zu bestätigen, dass sie noch erforderlich sind, und entfernen Sie diejenigen, die nicht mehr benötigt werden.

Drehen Sie Geheimnisse in regelmäßigen Abständen, um das Zeitfenster zu verringern, in dem ein kompromittiertes Geheimnis gültig ist.

Arten von Geheimnissen, die von Pipelines verwendet werden, können Folgendes umfassen:

Nächste Schritte