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.
Beispielcode herunterladen
Wenn Sie bereits ein eigenes Repository haben, fahren Sie mit dem nächsten Schritt fort. Importieren Sie andernfalls das folgende Beispiel-Repository in Ihr Azure Repo.
Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und navigieren Sie dann zu Ihrem Projekt.
Wählen Sie "Neu verfassen" und dann "Importieren" aus. Geben Sie die folgende Repository-URL ein, und wählen Sie dann "Importieren" aus.
https://github.com/MicrosoftDocs/pipelines-dotnet-core
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>
Authentifizierung einrichten
Erstellen einer benutzerseitig zugewiesenen verwalteten Identität
Melden Sie sich bei der Azure-Portal an, und suchen Sie dann in der Suchleiste nach dem Dienst für verwaltete Identitäten.
Wählen Sie "Erstellen" aus, und füllen Sie die erforderlichen Felder wie folgt aus:
- Abonnement: Wählen Sie Ihr Abonnement im Dropdownmenü aus.
- Ressourcengruppe: Wählen Sie eine vorhandene Ressourcengruppe aus, oder erstellen Sie eine neue.
- Region: Wählen Sie im Dropdownmenü eine Region aus.
- Name: Geben Sie einen Namen für Ihre vom Benutzer zugewiesene verwaltete Identität ein.
Wenn Sie fertig sind, wählen Sie Überprüfen + Erstellen aus.
Nachdem die Bereitstellung abgeschlossen ist, wählen Sie "Zur Ressource wechseln" aus, und kopieren Sie dann die Werte für Abonnement - und Client-ID , die in anstehenden Schritten verwendet werden sollen.
Navigieren Sie zu "Einstellungseigenschaften>", und kopieren Sie den Mandanten-ID-Wert Ihrer verwalteten Identität zur späteren Verwendung.
Zugriffsrichtlinien für den Schlüsseltresor einrichten
Navigieren Sie zu Azure-Portal, und verwenden Sie die Suchleiste, um den zuvor erstellten Schlüsseltresor zu finden.
Wählen Sie Access-Richtlinien und dann " Erstellen" aus, um eine neue Richtlinie hinzuzufügen.
Aktivieren Sie unter "Geheime Berechtigungen" die Kontrollkästchen "Abrufen" und "Auflisten".
Wählen Sie "Weiter" aus, und fügen Sie dann die Client-ID der zuvor erstellten verwalteten Identität in die Suchleiste ein. Wählen Sie Verwaltete Identität aus.
Wählen Sie "Weiter" und dann "Weiter" aus.
Überprüfen Sie Ihre neuen Richtlinien, und wählen Sie dann " Erstellen" aus, wenn Sie fertig sind.
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 für den Identitätstyp im Dropdownmenü verwaltete Identität aus.
Füllen Sie für Schritt 1: Details zur verwalteten Identität die Felder wie folgt aus:
Abonnement für verwaltete Identität: Wählen Sie das Abonnement aus, das Ihre verwaltete Identität enthält.
Ressourcengruppe für verwaltete Identität: Wählen Sie die Ressourcengruppe aus, die Ihre verwaltete Identität hosten soll.
Verwaltete Identität: Wählen Sie Ihre verwaltete Identität aus dem Dropdownmenü aus.
Füllen Sie für Schritt 2: Azure Scope die Felder wie folgt aus:
Bereichsebene für die Dienstverbindung: Abonnement auswählen.
Abonnement für Dienstverbindung: Wählen Sie das Abonnement aus, auf das Ihre verwaltete Identität zugreift.
Ressourcengruppe für Dienstverbindung: (Optional) Geben Sie an, dass der Zugriff auf verwaltete Identitäten auf eine Ressourcengruppe beschränkt werden soll.
Für Schritt 3: Dienstverbindungsdetails:
Dienstverbindungsname: Geben Sie einen Namen für Ihre Dienstverbindung an.
Dienstverwaltungsreferenz: (Optional) Kontextinformationen aus einer ITSM-Datenbank.
Beschreibung: (Optional) Fügen Sie eine Beschreibung hinzu.
Aktivieren Sie in "Sicherheit" das Kontrollkästchen "Zugriffsberechtigung für alle Pipelines erteilen", damit alle Pipelines diese Dienstverbindung verwenden können. Wenn Sie diese Option nicht auswählen, müssen Sie manuell Zugriff auf jede Pipeline gewähren, die diese Dienstverbindung verwendet.
Wählen Sie Speichern aus, um die Dienstverbindung zu überprüfen und zu erstellen.
Zugreifen auf Schlüsseltresorschlüssel aus Ihrer 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 Azure Repos Git (YAML), und wählen Sie dann Ihr Repository.
Wählen Sie die Vorlage Startpipeline aus.
Die Standardpipeline enthält ein Skript, das Echo-Befehle ausführt. Diese werden nicht benötigt, sie können also gelöscht werden.
Fügen Sie die Aufgabe AzureKeyVault hinzu und ersetzen Sie die Platzhalter durch den Namen der zuvor erstellten Dienstverbindung und den Namen Ihres Schlüsseltresors. Ihre YAML-Datei sollte etwa so aussehen wie der folgende Ausschnitt:
trigger: - main pool: vmImage: ubuntu-latest steps: - task: AzureKeyVault@2 displayName: Azure Key Vault inputs: azureSubscription: 'SERVICE_CONNECTION_NAME' KeyVaultName: 'KEY_VAULT_NAME' SecretsFilter: '*' RunAsPreJob: false
Fügen wir die folgenden Aufgaben hinzu, um unser Geheimnis zu kopieren und zu veröffentlichen. Dieses Beispiel dient nur zu Demonstrationszwecken und sollte nicht in einer Produktionsumgebung eingesetzt werden.
trigger: - main pool: vmImage: ubuntu-latest steps: - task: AzureKeyVault@2 displayName: Azure Key Vault inputs: azureSubscription: 'SERVICE_CONNECTION_NAME' KeyVaultName: 'KEY_VAULT_NAME' SecretsFilter: '*' RunAsPreJob: false - task: CmdLine@2 displayName: Create file inputs: script: 'echo $(SECRET_NAME) > secret.txt' - task: CopyFiles@2 displayName: Copy file inputs: Contents: secret.txt targetFolder: '$(Build.ArtifactStagingDirectory)' - task: PublishBuildArtifacts@1 displayName: Publish Artifact inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)' ArtifactName: 'drop' publishLocation: 'Container'
Wählen Sie Speichern und ausführen, und wählen Sie es dann noch einmal, um Ihre Änderungen zu bestätigen und die Pipeline zu starten. Möglicherweise werden Sie aufgefordert, der Pipeline den Zugriff auf Azure-Ressourcen zu gewähren. Wählen Sie bei entsprechender Aufforderung Zulassen aus. Sie müssen Ihre Pipeline nur einmal genehmigen.
Wählen Sie die CmdLine-Aufgabe aus, um die Protokolle anzuzeigen.
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, um sie herunterzuladen.
Öffnen Sie die Textdatei, die Sie gerade heruntergeladen haben. Die Textdatei sollte das Geheimnis aus Ihrem Azure-Schlüsseltresor 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.
az account set --subscription <YOUR_SUBSCRIPTION_ID>
az login
$spnObjectId = az ad sp show --id <YOUR_SERVICE_PRINCIPAL_ID>
az keyvault set-policy --name <YOUR_KEY_VAULT_NAME> --object-id $spnObjectId --secret-permissions get list