Freigeben über


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 mit der Schaltfläche „Variablengruppe hinzufügen“ im roten Feld hervorgehoben.

  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: Speichern einer Variablengruppe.

Variablengruppen befolgen das Modell für Bibliotheksicherheit.

Sie können eine Variablengruppe erstellen, die mit einem vorhandenen Azure-Schlüsseltresor verknüpft ist, und der Variablengruppe ausgewählte Key Vault-Geheimnisse zuordnen. Der Variablengruppe werden nur die Geheimnisnamen zugeordnet, nicht die Geheimniswerte. Pipelineausführungen, die mit der Variablengruppe verknüpft sind, rufen die neuesten Geheimniswerte aus dem Tresor ab.

Alle Änderungen für vorhandene Geheimnissen im Schlüsseltresor sind automatisch für alle Pipelines verfügbar, die diese Variablengruppe verwenden. Wenn dem Schlüsseltresor jedoch Geheimnisse hinzugefügt werden oder wenn Geheimnisse aus dem Schlüsseltresor gelöscht werden, werden die zugeordneten Variablengruppen nicht automatisch aktualisiert. Sie müssen die Geheimnisse explizit aktualisieren, damit sie in die Variablengruppe aufgenommen werden.

Auch wenn Key Vault das Speichern und Verwalten kryptografischer Schlüssel und Zertifikate auf Azure unterstützt, unterstützt die Azure Pipelines-Variablengruppenintegration nur die Zuordnung von Schlüsseltresorgeheimnissen. Kryptografische Schlüssel und Zertifikate werden nicht unterstützt.

Hinweis

Schlüsseltresore, die die rollenbasierte Azure-Zugriffssteuerung (Azure RBAC) verwenden, werden nicht unterstützt.

Voraussetzungen

  • Ein Azure-Schlüsseltresor, der Ihre Geheimnisse enthält. Sie können einen Schlüsseltresor über das Azure-Portal erstellen.
  • Eine Azure Dienstverbindung für Ihr Projekt.

Erstellen der Variablengruppe

  1. Wählen Sie im Azure DevOps-Projekt Pipelines>Bibliothek>+ Variablengruppe aus.
  2. Geben Sie auf der Seite Variablengruppen einen Namen und optional eine Beschreibung für die Variablengruppe ein.
  3. Aktivieren Sie die Umschaltfläche Geheimnisse von einem Azure Key Vault als Variablen verknüpfen.
  4. Wählen Sie den Azure-Abonnementendpunkt und den Schlüsseltresornamen aus.
  5. Aktivieren Sie Azure DevOps, um auf den Schlüsseltresor zuzugreifen, indem Sie neben dem Schlüsseltresornamen Autorisieren auswählen.
  6. Wählen Sie auf dem Bildschirm Geheimnisse auswählen bestimmte Geheimnisse aus Ihrem Schlüsseltresor aus, um sie dieser Variablengruppe zuzuordnen. Wählen Sie anschließend OK aus.
  7. Wählen Sie Speichern aus, um die geheime Variablengruppe zu speichern.

Screenshot der Variablengruppe mit Azure Key Vault-Integration.

Hinweis

Ihre Azure-Dienstverbindung muss mindestens über Berechtigungen für Abrufen und Auflisten für den Schlüsseltresor verfügen. Sie können diese Berechtigungen in den vorherigen Schritten gewähren. Sie können diese Berechtigungen auch über das Azure-Portal gewähren, indem Sie die folgenden Schritte ausführen:

  1. Öffnen Sie Einstellungen für den Schlüsseltresor, und wählen Sie dann Zugriffskonfiguration>Zu den Zugriffsrichtlinien aus.
  2. Wenn Ihr Azure Pipelines-Projekt auf der Seite Zugriffsrichtlinien nicht unter Anwendungen mit mindestens den Berechtigungen für Abrufen und Auflisten aufgeführt wird, wählen Sie Erstellen aus.
  3. Wählen Sie unter Geheimnisberechtigungen die Optionen Abrufen und Auflisten und dann Weiter aus.
  4. Wählen Sie den Dienstprinzipal und dann Weiter aus.
  5. Wählen Sie erneut Weiter aus, überprüfen Sie die Einstellungen, und wählen Sie dann Erstellen aus.

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.

    Hinzufügen der Azure Key Vault-Aufgabe.

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: Ausgabe der Bash-Variable.

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