Freigeben über


Schützen geheimer Schlüssel in Azure-Pipelines

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

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 zum Schutz eines geheimen Schlüssels besteht nicht darin, ein Geheimnis an erster Stelle zu haben. Überprüfen Sie, ob Ihre Pipeline eine andere Methode als die Verwendung eines Geheimnisses zum Ausführen einer Aufgabe verwenden kann.

  • Verwaltete Identitäten verwenden:

    • Erwägen Sie die Verwendung verwalteter Identitäten, anstatt geheime Schlüssel direkt zu behandeln.
    • Verwaltete Identitäten ermöglichen Es Ihren Anwendungen und Diensten, die Sicherheit mit Azure-Diensten zu authentifizieren, ohne dass explizite Anmeldeinformationen erforderlich sind.
    • Sie können verwaltete Identitäten verwenden, um auf andere Azure-Dienste zuzugreifen.
  • Azure CLI-Aufgabe:

    • Wenn Sie die Azure CLI-Aufgabe verwenden, sollten Sie in Ihrer Pipeline die addSpnToEnvironment Einstellung verwenden, um auf Dienstprinzipaldetails im Skript zuzugreifen, ohne geheime Schlüssel explizit zu übergeben.

Weitere Informationen finden Sie unter Verwenden von Dienstprinzipalen und verwalteten Identitäten

Verwenden von Geheimnisvariablen

Speichern Sie vertrauliche Werte niemals als Nur-Text in einer Azure-Pipelines -.yml-Datei .

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. Es wird empfohlen, geheime Variablen mit Azure Key Vault festzulegen. Sie können Geheimnisvariablen auch in der Benutzeroberfläche oder in einer Variablengruppe festlegen. Es wird nicht empfohlen, einen Protokollierungsbefehl zum Festlegen einer geheimen Variablen zu verwenden. Wenn Sie einen geheimen Schlüssel mit einem Protokollierungsbefehl festlegen, kann jeder, der auf Ihre Pipeline zugreifen kann, auch den geheimen Schlüssel 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 einen geheimen Schlüssel 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 geheime Schlüssel in Azure DevOps einzuschränken, befolgen Sie die folgenden bewährten Methoden:

  • 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. Geheime Variablen, die in der Benutzeroberfläche der Pipelineeinstellungen für eine Pipeline festgelegt sind, sind auf die Pipeline begrenzt, 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, geheime Schlüssel nach Möglichkeit aus Protokollen zu beräuben, aber es ist nicht narrensicher. Geheimnisse sollten nicht an der Konsole ausgegeben, in Befehlszeilenparametern verwendet oder in Dateien protokolliert werden. Seien Sie vorsichtig, wenn Sie Azure CLI-Befehle verwenden, die vertrauliche Informationen ausgeben. Verwenden Sie das None output format, und wenn Sie einen geheimen Schlüssel aus einem Azure CLI-Aufruf abrufen müssen. Use none output format and retrieve security information to a secret variable

Verwenden Sie strukturierte Daten nicht als Geheimnisse

Vermeiden Sie strukturierte Datenformate wie JSON, XML oder YAML, um geheime Werte zu kapseln, einschließlich Steuerzeichen wie Wagenrücklauf, \rund Zeilenvorschub\n. Erstelle stattdessen einzelne Geheimnisse für jeden vertraulichen Wert. Dieser Ansatz sorgt für eine bessere Redaction-Genauigkeit und minimiert das Risiko, vertrauliche Daten versehentlich verfügbar zu halten.

Überprüfe, wie Geheimnisse verarbeitet werden

Um zu überprüfen, wie geheime Schlüssel in Azure-Pipelines verwendet werden, befolgen Sie die folgenden bewährten Methoden:

  • Überprüfen Sie den Quellcode: Überprüfen Sie den Quellcode des Repositorys, das die Pipeline hostet. Um sicherzustellen, dass geheime Schlüssel ordnungsgemäß verarbeitet werden, überprüfen Sie alle aufgaben, die in der Pipeline verwendet werden. Stellen Sie beispielsweise sicher, dass geheime Schlüssel nicht versehentlich an unbeabsichtigte Hosts gesendet oder explizit in die Protokollausgabe gedruckt werden.
  • Überprüfen Sie Die Ausführungsprotokolle: Zeigen Sie nach dem Testen gültiger und ungültiger Eingaben die Ausführungsprotokolle für Ihre Pipeline an. Stellen Sie sicher, dass geheime Schlüssel ordnungsgemäß gerotet und nicht verfügbar gemacht werden. Manchmal können Fehler in Befehlen oder Tools versehentlich geheime Schlüssel in Fehlerprotokolle verlecken. Während Azure Pipelines versucht, geheime Schlüssel aus Protokollen zu berbern, ist die manuelle Überprüfung immer noch unerlässlich.

Überwachen und Drehen von Geheimnissen

Um geheime Schlüssel zu überwachen und zu drehen, befolgen Sie die folgenden bewährten Methoden:

  • Überprüfen Sie registrierte geheime Schlüssel: Bewerten Sie in regelmäßigen Abständen die in Ihren Pipelines registrierten Geheimnisse. Vergewissern Sie sich, dass sie noch erforderlich sind, und entfernen Sie alle, die nicht mehr benötigt werden, was dazu beiträgt, unübersichtliche und potenzielle Sicherheitsrisiken zu reduzieren.
  • Drehen Sie geheime Schlüssel: Drehen Sie geheime Schlüssel regelmäßig, um das Zeitfenster zu minimieren, in dem ein kompromittierter geheimer Schlüssel ausgenutzt werden kann. Indem Sie geheime Schlüssel regelmäßig ändern, verbessern Sie die Sicherheit.
  • Auswählen der richtigen Authentifizierungsmethode
    • Verwendete Geheimschlüsseltypen:
      • Persönliche Zugriffstoken (PATs): Diese Token werden für die Authentifizierung verwendet. Befolgen Sie bewährte Methoden für die Sicherheit, wenn Sie die richtige Authentifizierungsmethode auswählen. Sie können PATs mithilfe der REST-API verwalten.
      • Geheime Variablen: Verwenden Sie geheime Variablen, um vertrauliche Informationen wie API-Schlüssel, Kennwörter oder andere Anmeldeinformationen in Ihrer Pipeline sicher zu speichern.
      • Azure Key Vault-Geheimnisse: Verwenden Sie Azure Key Vault, um geheime Schlüssel sicher zu speichern und zu verwalten.
      • Dienstverbindungen: Diese Dienstverbindungen ermöglichen Ihrer Pipeline das Herstellen einer Verbindung mit externen Diensten (z. B. Azure, GitHub, Docker Hub). Stellen Sie eine ordnungsgemäße Konfiguration und sichere Behandlung von geheimen Dienstverbindungsschlüsseln sicher.

Verwenden von YAML-Vorlagen

Anstatt Inlineskripts direkt in Ihre Pipeline-YAML einzuleiten, verwenden Sie Vorlagen. Dieser Ansatz verbessert die Sicherheit, indem vertrauliche Informationen von der Hauptpipeline entfernt abstrahiert werden.

Um diesen Ansatz zu implementieren, erstellen Sie eine separate YAML-Datei für Ihr Skript, und speichern Sie dieses Skript dann in einem separaten, sicheren Repository. Anschließend können Sie auf die Vorlage verweisen und eine geheime Variable in Ihrem YAML als Parameter übergeben. Die sichere Variable sollte aus Azure Key Vault, einer Variablengruppe oder der Pipeline-UI stammen. Weitere Informationen zur Verwendung von Vorlagen finden Sie in der Vorlagenverwendungsreferenz.

Einschränken geheimer Schlüssel mit Verzweigungsrichtlinien und Variablengruppenberechtigungen

Um sicherzustellen, dass geheime Schlüssel an die main Verzweigung gebunden sind und nicht auf zufällige Verzweigungen zugegriffen werden kann, können Sie eine Kombination aus Variablengruppenberechtigungen, bedingter Auftragseinfügung und Verzweigungsrichtlinien verwenden.

Mit Verzweigungsrichtlinien können Sie Buildüberprüfungsrichtlinien erzwingen, die nur Builds aus der Hauptzweigung zulassen. Anschließend können Sie mithilfe von Variablengruppenberechtigungen sicherstellen, dass nur autorisierte Pipelines Zugriff auf die geheimen Schlüssel haben, die in Ihrer Variablengruppe gespeichert sind. Zuletzt können Sie eine Bedingung in Ihrer Pipeline verwenden, um sicherzustellen, dass auf die Variablegruppe nur durch einen Push an die main Verzweigung verwiesen werden kann.

jobs:
- job: ExampleJob
  condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
  pool:
    vmImage: 'ubuntu-latest'
  steps:
  - script: echo "This runs only for the main branch"
    displayName: 'Conditional Step'
  variables:
  - group: your-variable-group-name

Nächste Schritte