Verwenden von Geheimnissen aus Azure Key Vault in Azure Pipelines

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

Mit Azure Key Vault können Entwickler sensible Informationen wie API-Schlüssel, Anmeldedaten oder Zertifikate sicher speichern und verwalten. Der Azure Key Vault-Dienst unterstützt zwei Arten von Containern: Tresore und verwaltete HSM-Pools (Hardware Security Module). Tresore können sowohl software- als auch HSM-gestützte Schlüssel, Geheimnisse und Zertifikate speichern, während verwaltete HSM-Pools ausschließlich HSM-gestützte Schlüssel unterstützen.

In diesem Tutorial lernen Sie Folgendes:

  • Erstellen einer Azure Key Vault-Instanz mithilfe der Azure CLI
  • Hinzufügen eines Geheimnisses und Konfigurieren des Zugriffs auf Azure Key Vault
  • Verwenden von Geheimnissen in Ihrer Pipeline

Voraussetzungen

Erstellen eines Repositorys

Wenn Sie bereits ein eigenes Repository haben, fahren Sie mit dem nächsten Schritt fort. Andernfalls folgen Sie den nachstehenden Anweisungen, um Ihr Repository zu initialisieren. Wir werden dieses Azure Repo verwenden, um unsere Pipeline einzurichten.

  1. Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und navigieren Sie dann zu Ihrem Projekt.

  2. Wählen Sie Repos, und wählen Sie dann Initialize, um den Hauptzweig mit einer README zu initialisieren.

    Ein Screenshot zeigt, wie man ein Repository mit einer README-Datei initialisiert.

Erstellen einer Azure Key Vault-Instanz

  1. Melden Sie sich beim Azure-Portal an, und wählen Sie dann in der oberen rechten Ecke die Schaltfläche Cloud Shell aus.

  2. Wenn Ihrem Konto mehrere Azure-Abonnements zugeordnet sind, verwenden Sie den folgenden Befehl, um ein Standardabonnement anzugeben. Sie können az account list verwenden, um eine Liste Ihrer Abonnements zu generieren.

    az account set --subscription <YOUR_SUBSCRIPTION_NAME_OR_ID>
    
  3. Legen Sie Ihre Azure-Standardregion fest. Sie können az account list-locations verwenden, um eine Liste Ihrer verfügbaren Regionen zu generieren.

    az config set defaults.location=<YOUR_REGION>
    
  4. Eine neue Ressourcengruppe erstellen.

    az group create --name <YOUR_RESOURCE_GROUP_NAME>
    
  5. Erstellen eines neuen Azure Key Vault-Schlüsseltresors

    az keyvault create \
      --name <YOUR_KEY_VAULT_NAME> \
      --resource-group <YOUR_RESOURCE_GROUP_NAME>
    
  6. Erstellen Sie einen neuen Geheimnisses in Ihrer Azure Key Vault-Instanz.

    az keyvault secret set \
      --name <YOUR_SECRET_NAME> \
      --value <YOUR_ACTUAL_SECRET> \
      --vault-name <YOUR_KEY_VAULT_NAME>
    

Zugriffsrichtlinien für den Schlüsseltresor einrichten

Um auf unseren Azure Key Vault zuzugreifen, müssen wir einen Dienstprinzipal einrichten, der den Zugriff auf Azure Pipelines ermöglicht. Folgen Sie dieser Anleitung, um einen Dienstprinzipal mit Azure CLI zu erstellen, und fahren Sie dann mit den nächsten Schritten in diesem Abschnitt fort.

  1. Navigieren Sie zu Azure-Portal, und verwenden Sie dann die Suchleiste, um den zuvor erstellten Schlüsseltresor zu finden.

    Screenshot, der darstellt, wie Sie nach Ihrer Azure Key Vault-Instanz suchen

  2. Wählen Sie Zugriffsrichtlinien, und wählen Sie dann Erstellen, um eine neue Richtlinie zu erstellen.

  3. Wählen Sie unter Geheime Berechtigungen, Get und List.

  4. Wählen Sie Weiter, und wählen Sie dann den zuvor erstellten Dienstprinzipal. Ein Service Principal ist ein Objekt, das eine Anwendung oder einen Dienst repräsentiert, der den Zugriff auf Azure-Ressourcen anfordert.

  5. Wählen Sie Weiter, und dann Weiter erneut.

  6. Überprüfen Sie Ihre Richtlinien, und wählen Sie anschließend Erstellen.

Hinweis

Azure Key Vaults, die die rollenbasierte Zugriffssteuerung (Azure RBAC) verwenden, werden nicht unterstützt.

Rollenzuweisung hinzufügen

Im nächsten Schritt erstellen wir eine ARM-Dienstverbindung unter Verwendung des Dienstprinzips. Bevor wir die Verbindung verifizieren können, müssen wir dem Dienstprinzipal Lesezugriff auf der Abonnementebene gewähren:

  1. Navigieren Sie zu Azure-Portal

  2. Wählen Sie in der linken Navigationsleiste Abonnements und suchen Sie dann Ihr Abonnement und wählen Sie es aus.

  3. Wählen Sie Zugriffskontrolle, und wählen Sie dann Hinzufügen>Rollenzuweisung hinzufügen.

    Ein Screenshot zeigt, wie eine neue Rollenzuweisung auf der Abonnementebene hinzugefügt wird.

  4. Wählen Sie Reader unter der Registerkarte Role und dann Next.

  5. Wählen Sie Benutzer-, Gruppen- oder Dienstprinzipal, und wählen Sie dann Mitglieder auswählen.

    Ein Screenshot, der zeigt, wie man Mitglieder zur Rollenzuweisung in Azure hinzufügt.

  6. Verwenden Sie die Suchleiste, um Ihr Dienstprinzipal zu finden, und wählen Sie dann das „+“-Zeichen, um ihn auszuwählen. Klicken Sie dann auf die Schaltfläche Select.

  7. Wählen Sie Überprüfen + Zuweisen, überprüfen Sie Ihre Einstellungen und wählen Sie dann erneut Überprüfen + Zuweisen, um Ihre Auswahl zu bestätigen und die Rollenzuweisung hinzuzufügen.

Erstellen einer Dienstverbindung

  1. Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und navigieren Sie dann zu Ihrem Projekt.

  2. Wählen Sie Projekteinstellungen>Serviceverbindungen, und wählen Sie dann Neue Serviceverbindung, um eine neue Serviceverbindung zu erstellen.

  3. Wählen Sie Azure Resource Manager und dann Weiter aus.

  4. Wählen Sie Dienstprinzipal (manuell) und dann Weiter aus.

  5. Wählen Sie Azure Cloud für Umgebung und Abonnement für die Umfangsebene, dann geben Sie Ihre Abonnement-ID und Ihren Abonnementnamen ein.

  6. Füllen Sie die folgenden Felder mit den Informationen aus, die Sie bei der Erstellung des Service Principal erhalten haben, und wählen Sie anschließend Überprüfen:

    • Dienstprinzipal-ID: Ihre Dienstprinzipal-App-Id.
    • Dienstprinzipalschlüssel: Ihr Dienstprinzipalkennwort.
    • Mandanten-ID: Ihr Dienstprinzipalmandant.
  7. Wenn die Überprüfung erfolgreich war, geben Sie einen Namen und eine Beschreibung (optional) für Ihre Serviceverbindung ein und aktivieren Sie das Kontrollkästchen Zugriffsberechtigung für alle Pipelines gewähren.

  8. Wählen Sie Überprüfen und Speichern aus, wenn Sie fertig sind.

    Ein Screenshot, der zeigt, wie man eine neue Azure Resource Manager-Dienstverbindung mit Hilfe des Dienstprinzips erstellt.

  1. Melden Sie sich bei Ihrer Azure DevOps-Sammlung an, und navigieren Sie dann zu Ihrem Projekt.

  2. Wählen Sie Projekteinstellungen>Dienstverbindungen>Neue Dienstverbindung und dann Azure Resource Manager, um eine neue ARM-Dienstverbindung zu erstellen.

  3. Geben Sie Ihrer Dienstverbindung einen Namen und wählen Sie dann Azure Cloud für Environment und Subscription für den Scope Level.

  4. Geben Sie Ihre Abonnement-ID und Ihren Abonnementnamen ein.

  5. Füllen Sie die folgenden Felder mit den Informationen aus, die Sie bei der Erstellung des Dienstprinzipals erhalten haben, und wählen Sie anschließend Verbindung überprüfen:

    • Dienstprinzipal-Client-ID: Ihr Dienstprinzipal appId.
    • Dienstprinzipalschlüssel: Ihr Dienstprinzipalkennwort.
    • Mandanten-ID: Ihr Dienstprinzipalmandant.
  6. Aktivieren Sie das Kontrollkästchen Allow all pipelines to use this connection, und wählen Sie anschließend Ok .

    Ein Screenshot, der zeigt, wie man eine neue ARM-Dienstverbindung mit Hilfe des Dienstprinzipals in Azure DevOps Server 2019 erstellt.

Erstellen einer neuen Pipeline

  1. Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und navigieren Sie dann zu Ihrem Projekt.

  2. Wählen Sie Pipelines und dann Neue Pipeline aus.

  3. Wählen Sie Klassischen Editor verwenden, um eine klassische Pipeline zu erstellen.

  4. Wählen Sie Azure Repos Git, wählen Sie Ihr Repository und Ihren Standardzweig und wählen Sie dann Weiter.

  5. Wählen Sie die .NET Desktop-Pipelinevorlage aus.

  6. Für dieses Beispiel benötigen wir nur die letzten beiden Aufgaben. Drücken Sie STRG, und wählen Sie dann die ersten fünf Aufgaben aus, klicken Sie mit der rechten Maustaste, und wählen Sie Ausgewählte Aufgabe(n) entfernen aus, um sie zu löschen.

    Ein Screenshot zeigt, wie Sie mehrere Pipeline-Aufgaben löschen können.

  7. Wählen Sie + aus, um eine neue Aufgabe hinzuzufügen. Suchen Sie nach der Aufgabe Command line, wählen Sie sie aus, und wählen Sie dann Add, um sie Ihrer Pipeline hinzuzufügen. Nach dem Hinzufügen konfigurieren Sie ihn wie folgt:

    • Name anzeigen: Datei erstellen
    • Skript: echo $(YOUR_SECRET_NAME) > secret.txt

    Screenshot: Konfigurieren der Befehlszeilenaufgabe

  8. Wählen Sie + aus, um eine neue Aufgabe hinzuzufügen. Suchen Sie nach der Aufgabe Azure Key Vault, wählen Sie sie aus und wählen Sie dann Add*, um sie zu Ihrer Pipeline hinzuzufügen. Nach dem Hinzufügen konfigurieren Sie ihn wie folgt:

    • Name anzeigen: Azure Key Vault
    • Azure-Abonnement: Wählen Sie Ihre zuvor erstellte Service Principal Serviceverbindung aus
    • Schlüsseltresor: Wählen Sie Ihren Schlüsseltresor
    • Geheimnisfilter: Eine durch Kommata getrennte Liste von Geheimnamen oder lassen Sie * stehen, um alle Geheimnisse aus dem ausgewählten Schlüsseltresor herunterzuladen

    Ein Screenshot zeigt, wie die Azure Key Vault-Aufgabe in klassischen Pipelines eingerichtet wird.

  9. Wählen Sie die Aufgabe Dateien kopieren und füllen Sie die erforderlichen Felder wie folgt aus:

    • Name anzeigen: Datei kopieren
    • Inhalt: secret.txt
    • Zielordner: $(build.artifactstagingdirectory)

    Ein Screenshot zeigt, wie die Aufgabe „Dateien kopieren“ in klassischen Pipelines eingerichtet wird.

  10. Wählen Sie die Aufgabe Publish Artifacts und füllen Sie die erforderlichen Felder wie folgt aus:

    • Name anzeigen: Artefakt veröffentlichen
    • Pfad zur Veröffentlichung: $(build.artifactstagingdirectory)
    • Artefaktname: Drop
    • Artefaktveröffentlichungsort: Azure-Pipelines

    Ein Bildschirmfoto zeigt, wie die Aufgabe „Artefakte veröffentlichen“ in klassischen Pipelines eingerichtet wird.

  11. Wählen Sie Speichern und in die Warteschlange stellen, und wählen Sie dann Ausführen, um Ihre Pipeline auszuführen.

  12. Wenn die Pipelineausführung abgeschlossen ist, kehren Sie zur Pipelinezusammenfassung zurück und wählen das veröffentlichte Artefakt aus.

  13. Wählen Sie drop>secret.txt zum Herunterladen des veröffentlichten Artefakts.

    Ein Screenshot zeigt, wie das veröffentlichte Artefakt heruntergeladen werden kann.

  14. Öffnen Sie die Textdatei, die Sie gerade heruntergeladen haben. Die Textdatei sollte das Geheimnis aus Ihrem Azure-Schlüsseltresor enthalten.

  1. Melden Sie sich bei Ihrer Azure DevOps-Sammlung an, und navigieren Sie dann zu Ihrem Projekt.

  2. Wählen Sie Pipelines und dann Builds aus.

  3. Wählen Sie Neu>Neue Build-Pipeline.

  4. Wählen Sie Klassischen Editor verwenden, um eine neue klassische Build-Pipeline zu erstellen.

  5. Wählen Sie Azure Repos Git, wählen Sie Ihr Repository und Ihren Standardzweig und wählen Sie dann Weiter.

  6. Wählen Sie die Pipelinevorlage .Net Desktop und wählen Sie dann Anwenden.

  7. Für dieses Beispiel benötigen wir nur die letzten beiden Aufgaben. Drücken Sie STRG, und wählen Sie dann die ersten fünf Aufgaben aus, klicken Sie mit der rechten Maustaste, und wählen Sie Ausgewählte Aufgabe(n) entfernen aus, um sie zu löschen.

    Ein Screenshot, der zeigt, wie Sie mehrere Pipeline-Aufgaben in klassischen Pipelines in Azure DevOps Server 2019 löschen können.

  8. Wählen Sie + aus, um eine neue Aufgabe hinzuzufügen. Suchen Sie nach der Aufgabe Command line, wählen Sie sie aus, und wählen Sie dann Add, um sie Ihrer Pipeline hinzuzufügen. Nach dem Hinzufügen konfigurieren Sie ihn wie folgt:

    • Name anzeigen: Datei erstellen
    • Skript: echo $(YOUR_SECRET_NAME) > secret.txt

    Ein Screenshot zeigt, wie die Befehlszeilenaufgabe in klassischen Pipelines in Azure DevOps Server 2019 konfiguriert wird.

  9. Wählen Sie + aus, um eine neue Aufgabe hinzuzufügen. Suchen Sie nach der Aufgabe Azure Key Vault, wählen Sie sie aus und wählen Sie dann Add*, um sie zu Ihrer Pipeline hinzuzufügen. Nach dem Hinzufügen konfigurieren Sie ihn wie folgt:

    • Name anzeigen: Azure Key Vault
    • Azure-Abonnement: Wählen Sie Ihre zuvor erstellte Service Principal Serviceverbindung aus
    • Schlüsseltresor: Wählen Sie Ihren Schlüsseltresor
    • Geheimnisfilter: Eine durch Kommata getrennte Liste von Geheimnamen oder lassen Sie * stehen, um alle Geheimnisse aus dem ausgewählten Schlüsseltresor herunterzuladen

    Ein Screenshot zeigt, wie die Azure Key Vault-Aufgabe in einer klassischen Pipeline in Azure DevOps Server 2019 eingerichtet wird.

  10. Wählen Sie die Aufgabe Dateien kopieren und füllen Sie die erforderlichen Felder wie folgt aus:

    • Name anzeigen: Datei kopieren
    • Inhalt: secret.txt
    • Zielordner: $(build.artifactstagingdirectory)

    Ein Screenshot zeigt, wie die Aufgabe „Dateien kopieren“ in klassischen Pipelines in Azure DevOps Server 2019 eingerichtet wird.

  11. Wählen Sie die Aufgabe Publish Artifacts und füllen Sie die erforderlichen Felder wie folgt aus:

    • Name anzeigen: Artefakt veröffentlichen
    • Pfad zur Veröffentlichung: $(build.artifactstagingdirectory)
    • Artefaktname: Drop
    • Artefaktveröffentlichungsort: Azure-Pipelines

    Ein Screenshot zeigt, wie die Aufgabe „Artefakte veröffentlichen“ in klassischen Pipelines in Azure DevOps Server 2019 eingerichtet wird.

  12. Wählen Sie Speichern & Warteschlange, und wählen Sie dann Speichern & Warteschlange, um Ihre Build-Pipeline auszuführen.

  13. Sobald die Pipelineausführung abgeschlossen ist, wählen Sie Artefakte und dann Drop.

  14. Wählen Sie im neu geöffneten Fenster drop>secret.txt, wählen Sie das Ellipsen-Symbol (...), und wählen Sie dann Download, um die Textdatei zu speichern.

  15. Öffnen Sie die Textdatei, die Sie gerade heruntergeladen haben. Sie sollte das Geheimnis Ihres Azure-Schlüsseltresors enthalten.

Warnung

Dieses Tutorial dient nur zu Lernzwecken. Informationen zu bewährten Sicherheitsmethoden und zum sicheren Arbeiten mit Geheimnissen finden Sie unter Verwalten von Geheimnissen in Ihren Server-Apps mit Azure Key Vault.

Bereinigen von Ressourcen

Führen Sie die folgenden Schritte aus, um die von Ihnen erstellten Ressourcen zu löschen:

  1. Wenn Sie eine neue Organisation für Ihr Projekt erstellt haben, lesen Sie , wie Sie Ihre Organisation löschen, andernfalls löschen Sie Ihr Projekt.

  2. Alle Azure-Ressourcen, die in diesem Tutorial erstellt werden, werden unter einer einzigen Ressourcengruppe gehostet. Führen Sie den folgenden Befehl aus, um Ihre Ressourcengruppe und alle darin enthaltenen Ressourcen zu löschen.

    az group delete --name <YOUR_RESOURCE_GROUP_NAME>
    

Häufig gestellte Fragen

F: Ich erhalte die folgende Fehlermeldung: „Der Benutzer oder die Gruppe verfügt nicht über die Berechtigung für die Geheimnisliste.“ Was soll ich tun?

A: Wenn ein Fehler auftritt, der angibt, dass der Benutzer oder die Gruppe nicht über die Berechtigung für die Geheimnisliste für einen Schlüsseltresor verfügt, führen Sie die folgenden Befehle aus, um Ihre Anwendung für den Zugriff auf den Schlüssel oder das Geheimnis im Azure Key Vault zu autorisieren.

$ErrorActionPreference="Stop";
$Credential = Get-Credential;
Connect-AzAccount -SubscriptionId <YOUR_SUBSCRIPTION_ID> -Credential $Credential;
$spn=(Get-AzureRmADServicePrincipal -SPN <YOUR_SERVICE_PRINCIPAL_ID>);
$spnObjectId=$spn.Id;
Set-AzureRmKeyVaultAccessPolicy -VaultName key-vault-tutorial -ObjectId $spnObjectId -PermissionsToSecrets get,list;