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
Ein Azure DevOps-organization und ein Projekt. Erstellen Sie ein organization oder ein Projekt, falls noch nicht geschehen.
Ein Azure-Abonnement. Erstellen Sie kostenlos ein Azure-Konto, wenn Sie noch keines besitzen.
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.
Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und navigieren Sie dann zu Ihrem Projekt.
Wählen Sie Repos, und wählen Sie dann Initialize, um den Hauptzweig mit einer README zu initialisieren.
Erstellen einer Azure Key Vault-Instanz
Melden Sie sich beim Azure-Portal an, und wählen Sie dann in der oberen rechten Ecke die Schaltfläche Cloud Shell aus.
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>
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>
Eine neue Ressourcengruppe erstellen.
az group create --name <YOUR_RESOURCE_GROUP_NAME>
Erstellen eines neuen Azure Key Vault-Schlüsseltresors
az keyvault create \ --name <YOUR_KEY_VAULT_NAME> \ --resource-group <YOUR_RESOURCE_GROUP_NAME>
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.
Navigieren Sie zu Azure-Portal, und verwenden Sie dann die Suchleiste, um den zuvor erstellten Schlüsseltresor zu finden.
Wählen Sie Zugriffsrichtlinien, und wählen Sie dann Erstellen, um eine neue Richtlinie zu erstellen.
Wählen Sie unter Geheime Berechtigungen, Get und List.
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.
Wählen Sie Weiter, und dann Weiter erneut.
Überprüfen Sie Ihre Richtlinien, und wählen Sie anschließend Erstellen.
Hinzufügen der Rollenzuweisung
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:
Navigieren Sie zu Azure-Portal
Wählen Sie in der linken Navigationsleiste Abonnements und suchen Sie dann Ihr Abonnement und wählen Sie es aus.
Wählen Sie Zugriffskontrolle, und wählen Sie dann Hinzufügen>Rollenzuweisung hinzufügen.
Wählen Sie Reader unter der Registerkarte Role und dann Next.
Wählen Sie Benutzer-, Gruppen- oder Dienstprinzipal, und wählen Sie dann Mitglieder auswählen.
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.
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
Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und navigieren Sie dann zu Ihrem Projekt.
Wählen Sie Projekteinstellungen>Serviceverbindungen, und wählen Sie dann Neue Serviceverbindung, um eine neue Serviceverbindung zu erstellen.
Wählen Sie Azure Resource Manager und dann Weiter aus.
Wählen Sie Dienstprinzipal (manuell) und dann Weiter aus.
Wählen Sie Azure Cloud für Umgebung und Abonnement für die Umfangsebene, dann geben Sie Ihre Abonnement-ID und Ihren Abonnementnamen ein.
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.
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.
Wählen Sie Überprüfen und Speichern aus, wenn Sie fertig sind.
Melden Sie sich bei Ihrer Azure DevOps-Sammlung an, und navigieren Sie dann zu Ihrem Projekt.
Wählen Sie Projekteinstellungen>Dienstverbindungen>Neue Dienstverbindung und dann Azure Resource Manager, um eine neue ARM-Dienstverbindung zu erstellen.
Geben Sie Ihrer Dienstverbindung einen Namen und wählen Sie dann Azure Cloud für Environment und Subscription für den Scope Level.
Geben Sie Ihre Abonnement-ID und Ihren Abonnementnamen ein.
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.
Aktivieren Sie das Kontrollkästchen Allow all pipelines to use this connection, und wählen Sie anschließend Ok .
Erstellen einer neuen Pipeline
Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und navigieren Sie dann zu Ihrem Projekt.
Wählen Sie Pipelines und dann Neue Pipeline aus.
Wählen Sie Klassischen Editor verwenden, um eine klassische Pipeline zu erstellen.
Wählen Sie Azure Repos Git, wählen Sie Ihr Repository und Ihren Standardzweig und wählen Sie dann Weiter.
Wählen Sie die .NET Desktop-Pipelinevorlage aus.
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.
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
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
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)
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
Wählen Sie Speichern und in die Warteschlange stellen, und wählen Sie dann Ausführen, um Ihre Pipeline auszuführen.
Wenn die Pipelineausführung abgeschlossen ist, kehren Sie zur Pipelinezusammenfassung zurück und wählen das veröffentlichte Artefakt aus.
Wählen Sie drop>secret.txt zum Herunterladen des veröffentlichten Artefakts.
Öffnen Sie die Textdatei, die Sie gerade heruntergeladen haben. Die Textdatei sollte das Geheimnis aus Ihrem Azure-Schlüsseltresor enthalten.
Melden Sie sich bei Ihrer Azure DevOps-Sammlung an, und navigieren Sie dann zu Ihrem Projekt.
Wählen Sie Pipelines und dann Builds aus.
Wählen Sie Neu>Neue Build-Pipeline.
Wählen Sie Klassischen Editor verwenden, um eine neue klassische Build-Pipeline zu erstellen.
Wählen Sie Azure Repos Git, wählen Sie Ihr Repository und Ihren Standardzweig und wählen Sie dann Weiter.
Wählen Sie die Pipelinevorlage .Net Desktop und wählen Sie dann Anwenden.
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.
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
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
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)
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
Wählen Sie Speichern & Warteschlange, und wählen Sie dann Speichern & Warteschlange, um Ihre Build-Pipeline auszuführen.
Sobald die Pipelineausführung abgeschlossen ist, wählen Sie Artefakte und dann Drop.
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.
Ö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:
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.
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;