Festlegen von Geheimnisvariablen

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019

Geheimnisvariablen sind verschlüsselte Variablen, die Sie in Pipelines verwenden können, ohne deren Wert verfügbar zu halten. 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. Geheimnisvariablen werden im Ruhezustand mit einem 2048-Bit-RSA-Schlüssel verschlüsselt und stehen auf dem Agent für Aufgaben und Skripts zur Verfügung.

Es wird empfohlen, die Geheimnisvariablen über die Benutzeroberfläche, in einer Variablengruppe oder in einer Variablengruppe über Azure Key Vault festzulegen. Sie können auch geheime Variablen in einem Skript mit einem Protokollierungsbefehl festlegen, dies wird jedoch nicht empfohlen, da jeder, der auf Ihre Pipeline zugreifen kann, auch das Geheimnis sehen kann.

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 Variablengruppen verwenden, um Geheimnisvariablen über Pipelines hinweg gemeinsam zu nutzen.

Geheimnisvariable auf der Benutzeroberfläche

Sie können Geheimnisvariablen im Pipeline-Editor festlegen, wenn Sie eine einzelne Pipeline bearbeiten. Sie können eine Pipelinevariable verschlüsseln und zu einer Geheimnisvariable machen, indem Sie das Sperrsymbol auswählen.

Für YAML- und klassische Pipelines legen Sie Geheimnisvariablen auf die gleiche Weise fest.

Führen Sie die folgenden Schritte aus, um Geheimnisse über die Weboberfläche festzulegen:

  1. Wechseln Sie zur Seite Pipelines, wählen Sie die entsprechende Pipeline aus und klicken Sie dann auf Bearbeiten.
  2. Suchen Sie die Variablen für diese Pipeline.
  3. Fügen Sie die Variable hinzu oder aktualisieren Sie sie.
  4. Wählen Sie die Option Diesen Wert geheim halten, um die Variable verschlüsselt zu speichern.
  5. Speichern Sie die Pipeline.

Geheimnisvariablen werden im Ruhezustand mit einem 2048-Bit-RSA-Schlüssel verschlüsselt. Geheimnisse sind auf dem Agent für verwendbare Aufgaben und Skripts verfügbar. Achten Sie darauf, wer zum Ändern Ihrer Pipeline berechtigt ist.

Wichtig

Wir versuchen zwar, die in der Azure Pipelines-Ausgabe angezeigten Geheimnisse zu maskieren, Sie müssen aber trotzdem Vorkehrungen treffen. Geben Sie Geheimnisse niemals als Ausgabe zurück. Einige Betriebssysteme protokollieren Befehlszeilenargumente. Geben Sie niemals Geheimnisse über die Befehlszeile weiter. Stattdessen wird empfohlen, Ihre Geheimnisse Umgebungsvariablen zuzuordnen.

Wir maskieren niemals Teilzeichenfolgen von Geheimnissen. Wenn beispielsweise „abc123“ als Geheimnis festgelegt ist, wird „abc“ in den Protokollen nicht maskiert. Dadurch soll vermieden werden, dass Geheimnisse zu detailliert maskiert werden, sodass die Protokolle nicht mehr lesbar sind. Aus diesem Grund sollten Geheimnisse keine strukturierten Daten enthalten. Wenn beispielsweise „{ "foo": "bar" }“ als Geheimnis festgelegt ist, wird „bar“ nicht in den Protokollen maskiert.

Im Gegensatz zu einer normalen Variablen werden sie nicht automatisch zu Umgebungsvariablen für Skripts entschlüsselt. Geheime Variablen müssen explizit zugeordnet werden.

Verwenden einer Geheimnisvariable über die Benutzeroberfläche

Sie müssen Geheimnisvariablen als Umgebungsvariablen zuordnen, um in YAML-Pipelines auf sie zu verweisen. In diesem Beispiel wurden zwei Geheimnisvariablen über der Benutzeroberfläche definiert: SecretOne und SecretTwo. Der Wert von SecretOne ist foo und der Wert von SecretTwo ist bar.

steps:
- powershell: |
      Write-Host "My first secret variable is $env:FOO_ONE"
      $env:FOO_ONE -eq "foo"
  env:
    FOO_ONE: $(SecretOne)
- bash: |
    echo "My second secret variable: $FOO_TWO"
    if [ "$FOO_TWO" = "bar" ]; then
        echo "Strings are equal."
    else
        echo "Strings are not equal."
    fi
  env:
    FOO_TWO: $(SecretTwo) 

Die Pipelineausgaben:

My first secret variable is ***
True
My second secret variable: ***
Strings are equal.

Hinweis

Azure Pipelines bemüht sich, geheime Schlüssel beim Ausgeben von Daten an Pipelineprotokolle zu maskieren, sodass möglicherweise zusätzliche Variablen und Daten in Ausgabe- und Protokollen maskiert werden, die nicht als geheime Schlüssel festgelegt sind.

Ein ausführlicheres Beispiel finden Sie unter Definieren von Variablen.

Festlegen einer Geheimnisvariable in einer Variablengruppe

Sie können einer Variablengruppe Geheimnisse hinzufügen oder Geheimnisse aus einer vorhandenen Azure Key Vault verknüpfen.

Neue Variablengruppen erstellen

  1. Wählen Sie Pipelines>Bibliothek (Library)>Variablengruppe hinzufügen (+ Variable group) aus.

    Screenshot of Add variable group button highlighted with red box.

  2. Geben Sie einen Namen und eine Beschreibung für die Gruppe ein.

  3. Optional: Verschieben Sie den Umschalter, um Geheimnisse aus einem Azure-Schlüsseltresor als Variablen zu verknüpfen. Weitere Informationen finden Sie unter Verwenden von Azure Key Vault-Geheimnissen.

  4. Geben Sie Namen und Wert für jede Variable ein, die in die Gruppe aufgenommen werden soll, und wählen Sie für jede Variable + Hinzufügen (+ Add) aus.

  5. Wählen Sie das Sperrsymbol am Ende der Zeile aus, um ihre Variable zu schützen.

  6. Wählen Sie Speichern (Save) aus, nachdem Sie die gewünschten Erweiterungen hinzugefügt haben.

    Screenshot of saving a variable group.

Variablengruppen befolgen das Modell für Bibliotheksicherheit.

Verknüpfen Sie einen vorhandenen Azure-Schlüsseltresor mit einer Variablengruppe und ordnen Sie der Variablengruppe selektive Tresorgeheimnisse zu.

  1. Aktivieren Sie auf der Seite Variablengruppen (Variable groups) die Option Geheimnisse von einem Azure-Schlüsseltresor als Variablen verknüpfen (Link secrets from an Azure key vault as variables). Sie benötigen einen vorhandenen Schlüsseltresor, der Ihre Geheimnisse enthält. Erstellen eines Schlüsseltresors über das Azure-Portal.

    Screenshot of variable group with Azure key vault integration.

  2. Geben Sie den Endpunkt Ihres Azure-Abonnements und den Namen des Tresors an, der Ihre Geheimnisse enthält.

    Stellen Sie sicher, dass die Azure-Dienstverbindung im Tresor für die Geheimnisse mindestens über die Verwaltungsberechtigungen zum Abrufen und Auflisten verfügt. Aktivieren Sie Azure Pipelines, um diese Berechtigungen festzulegen, indem Sie neben dem Tresornamen Autorisieren (Authorize) auswählen. Sie können die Berechtigungen auch manuell im Azure-Portal festlegen:

    1. Öffnen Sie die Einstellungen für den Tresor und wählen Sie dann Zugriffsrichtlinien (Access policies)>Neu hinzufügen (Add new) aus.
    2. Wählen Sie Prinzipal auswählen (Select principal) und dann den Dienstprinzipal für Ihr Clientkonto aus.
    3. Wählen Sie Geheimnisberechtigungen (Secret permissions) aus, und stellen Sie sicher, dass die Berechtigungen Abrufen und Auflisten über Häkchen verfügen.
    4. Klicken Sie zum Speichern der Änderungen auf OK.
  3. Wählen Sie auf der Seite Variablengruppen (Variable groups) die Option + Hinzufügen (+ Add) aus, um bestimmte Geheimnisse aus Ihrem Tresor für die Zuordnung zu dieser Variablengruppe auszuwählen.

Verwalten von Schlüsseltresorgeheimnissen

Weitere Informationen finden Sie in der folgenden Liste hilfreicher Tipps zum Verwalten von Geheimnissen.

  • Nur die Geheimnisnamen werden der Variablengruppe zugeordnet, nicht die Geheimniswerte. Es wird der neueste aus dem Tresor abgerufene Geheimniswert in der Pipelineausführung verwendet, die mit der Variablengruppe verknüpft ist.

  • Alle Änderungen, die an vorhandenen Geheimnissen im Schlüsseltresor vorgenommen werden, sind automatisch für alle Pipelines verfügbar, in der die Variablengruppe verwendet wird.

  • Wenn neue Geheimnisse zum Tresor hinzugefügt oder daraus gelöscht werden, werden die zugeordneten Variablengruppen nicht automatisch aktualisiert. Die in der Variablengruppe enthaltenen Geheimnisse müssen explizit aktualisiert werden, damit die Pipelines, die die Variablengruppe verwenden, ordnungsgemäß ausgeführt werden.

  • Azure Key Vault unterstützt das Speichern und Verwalten von kryptografischen Schlüsseln und Geheimnissen in Azure. Derzeit unterstützt die Integration von Azure Pipelines-Variablengruppen nur die Zuordnung von Geheimnissen aus dem Azure-Schlüsseltresor. Kryptografische Schlüssel und Zertifikate werden nicht unterstützt.

Verwenden der Azure Key Vault-Aufgabe

Sie können die Azure Key Vault-Aufgabe verwenden, um Geheimnisse in Ihre Pipeline einzuschließen. Mit dieser Aufgabe kann die Pipeline eine Verbindung mit Ihrem Azure Key Vault herstellen und Geheimnisse zur Verwendung als Pipelinevariablen abrufen.

  1. Wählen Sie im Pipeline-Editor Assistenten anzeigen aus, um den Assistentenbereich zu auszuklappen.

  2. Suchen Sie nach vault und wählen Sie die Azure Key Vault-Aufgabe aus.

    Add the Azure Key Vault task.

Die Option Geheimnisse für ganze Aufträge verfügbar machen wird aktuell in Azure DevOps Server 2019 und 2020 nicht unterstützt.

Weitere Informationen zur Azure Key Vault-Aufgabe finden Sie unter Verwenden von Azure Key Vault-Geheimnissen in Azure Pipelines.

Festlegen einer Geheimnisvariable in einem Skript mit Protokollierungsbefehlen

Sie können den task.setvariable-Protokollierungsbefehl verwenden, um Variablen in PowerShell- und Bash-Skripts festzulegen. Dies ist die am wenigsten sichere Möglichkeit, mit Geheimnisvariablen zu arbeiten, sie kann aber für das Debuggen nützlich sein. Es wird empfohlen, die Geheimnisvariablen über die Benutzeroberfläche, in einer Variablengruppe oder in einer Variablengruppe über Azure Key Vault festzulegen.

Um diese Variable als Skript mit einem Protokollierungsbefehl festzulegen, müssen Sie das Flag issecret übergeben.

Wenn issecret auf „true“ festgelegt ist, wird der Wert der Variable als Geheimnis gespeichert und im Protokoll maskiert.

Hinweis

Azure Pipelines bemüht sich, geheime Schlüssel beim Ausgeben von Daten an Pipelineprotokolle zu maskieren, sodass möglicherweise zusätzliche Variablen und Daten in Ausgabe- und Protokollen maskiert werden, die nicht als geheime Schlüssel festgelegt sind.

Legen Sie die Geheimnisvariable mySecretVal fest:

- bash: |
    echo "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"

Ruft die geheime Variable mySecretVal ab.

- bash: |
    echo "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"
- bash: |
    echo $(mySecretVal)

Ausgabe der Geheimnisvariable in Bash.

Screenshot of bash variable output.

Erfahren Sie mehr über das Festlegen und Verwenden von Variablen in Skripts.