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*innen Geheimnisse wie API-Schlüssel, Anmeldeinformationen oder Zertifikate sicher speichern und verwalten. Der Azure Key Vault-Dienst unterstützt zwei Arten von Containern: Tresore und verwaltete Pools mit HSMs (Hardwaresicherheitsmodulen). Tresore unterstützen das Speichern von Software und von mit HSM gesicherten Schlüsseln, Geheimnissen und Zertifikaten, während verwaltete HSM-Pools nur HSM-gesicherte 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 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.

  1. 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>
    
  2. 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>
    

    Mit diesem Befehl wird beispielsweise die Region westus2 ausgewählt:

    az config set defaults.location=westus2
    
  3. Erstellen Sie eine neue Ressourcengruppe. Eine Ressourcengruppe ist ein Container, der verwandte Ressourcen für eine Azure-Lösung enthält.

    az group create --name <your-resource-group>
    
  4. Erstellen Sie einen neuen Schlüsseltresor.

    az keyvault create \
      --name <your-key-vault> \
      --resource-group <your-resource-group>
    
  5. Erstellen Sie einen neuen Geheimnisses in Ihrer Azure Key Vault-Instanz.

    az keyvault secret set \
      --name "Password" \
      --value "mysecretpassword" \
      --vault-name <your-key-vault-name>
    

Erstellen eines Projekts

  1. Melden Sie sich bei Ihrer Azure DevOps-Organisation an.

  2. Sollten in Ihrer Organisation noch keine Projekte vorhanden sein, wählen Sie Erstellen Sie als ersten Schritt ein Projekt. aus. Wählen Sie andernfalls in der oberen rechten Ecke Neues Projekt aus.

Erstellen eines Repositorys

Wir verwenden YAML, um unsere Pipeline zu erstellen, aber zuerst müssen wir ein neues Repository erstellen.

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

  2. Wählen Sie Repositorys und dann Initialisieren aus, um ein neues Repository mit einer Infodatei zu initialisieren.

    Screenshot: Initialisieren eines Repositorys

Erstellen einer neuen Pipeline

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

  2. Wählen Sie Azure Repos Git (YAML) aus.

    Screenshot: Auswählen der Azure Repos-Quellcodeverwaltung

  3. Wählen Sie das Repository aus, das Sie im vorherigen Schritt erstellt haben.

  4. Wählen Sie die Vorlage Startpipeline aus.

  5. Die Standardpipeline enthält einige Skripts, die Echobefehle ausführen. Diese werden nicht benötigt, sie können also gelöscht werden. Die neue YAML-Datei sollte wie folgt aussehen:

    trigger:
    - main
    
    pool:
        vmImage: 'ubuntu-latest'
    
    steps:
    
  6. Wählen Sie Assistent anzeigen aus, um den Assistentenbereich zu erweitern. Dieser Bereich bietet eine bequeme und durchsuchbare Liste der Pipelineaufgaben.

    Screenshot, der darstellt, wie der Assistentenbereich für die Aufgabe angezeigt wird

  7. Suchen Sie nach Tresor, und wählen Sie die Aufgabe Azure Key Vault aus.

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

  8. Wählen Sie das Azure-Abonnement und dann Autorisieren aus. Wählen Sie im Dropdownmenü Ihren Schlüsseltresor und dann Hinzufügen aus, um die Aufgabe Ihrer YAML-Pipeline hinzuzufügen.

    Screenshot: Konfigurieren der Azure Key Vault-Aufgabe

    Hinweis

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

  9. Ihre YAML-Datei sollte folgendermaßen aussehen:

    trigger:
    - main
    
    pool:
      vmImage: ubuntu-latest
    
    steps:
    - task: AzureKeyVault@2
      inputs:
        azureSubscription: 'Your-Azure-Subscription'
        KeyVaultName: 'Your-Key-Vault-Name'
        SecretsFilter: '*'
        RunAsPreJob: false
    
    - task: CmdLine@2
      inputs:
        script: 'echo $(Your-Secret-Name) > secret.txt'
    
    - task: CopyFiles@2
      inputs:
        Contents: secret.txt
        targetFolder: '$(Build.ArtifactStagingDirectory)'
    
    - task: PublishBuildArtifacts@1
      inputs:
        PathtoPublish: '$(Build.ArtifactStagingDirectory)'
        ArtifactName: 'drop'
        publishLocation: 'Container'
    

Speichern oder schieben Sie Ihre Pipeline noch nicht in die Warteschlange. Zuerst müssen wir unserer Pipeline die richtigen Berechtigungen für den Zugriff auf Azure Key Vault erteilen. Lassen Sie die Registerkarte Ihres Browsers geöffnet. Wir fahren mit den verbleibenden Schritte fort, sobald wir die Schlüsseltresorberechtigungen eingerichtet haben.

Einrichten von Azure Key Vault-Zugriffsrichtlinien

Um auf unsere Azure-Key Vault-Instanz zugreifen zu können, müssen wir zunächst einen Dienstprinzipal einrichten, um Zugriff auf Azure Pipelines zu gewähren. Befolgen Sie diese Anleitung, um Ihren Dienstprinzipal zu erstellen, und fahren Sie dann mit den nächsten Schritten in diesem Abschnitt fort.

  1. Navigieren Sie zum Azure-Portal.

  2. Verwenden Sie die Suchleiste, um nach dem Schlüsseltresor zu suchen, den Sie zuvor erstellt haben.

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

  3. Klicken Sie unter Einstellungen auf Zugriffsrichtlinien.

  4. Wählen Sie Zugriffsrichtlinie hinzufügen aus, um eine neue Richtlinie hinzuzufügen.

  5. Wählen Sie für die Geheimnisberechtigungen die Optionen Get und List aus.

  6. Wählen Sie die Option zum Auswählen eines Dienstprinzipals aus, und suchen Sie nach dem Dienstprinzipal, den Sie am Anfang dieses Abschnitts erstellt haben. Ein Sicherheitsprinzipal ist ein Objekt, das Benutzer, Gruppen, Dienste oder Anwendungen darstellt, die Zugriff auf Azure-Ressourcen anfordern.

  7. Wählen Sie Hinzufügen aus, um die Zugriffsrichtlinie zu erstellen, und wählen Sie dann Speichern aus, wenn Sie fertig sind.

Hinweis

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

Ausführen und Überprüfen der Pipeline

  1. Kehren Sie zur vorherigen Registerkarte zurück, bei der wir aufgehört haben.

  2. Wählen Sie Speichern und dann erneut Speichern aus, um Ihre Änderungen zu committen und die Pipeline auszulösen. 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.

  3. Wählen Sie die CmdLine-Aufgabe aus, um die Protokolle anzuzeigen.

    Screenshot: Protokolle der Befehlszeilenaufgabe

  4. Kehren Sie zur Pipelinezusammenfassung zurück, und wählen Sie das veröffentlichte Artefakt aus.

    Screenshot: Anzeigen der Pipelinezusammenfassung und des veröffentlichen Artefakts

  5. Wählen Sie das secret.txt-Artefakt aus, um es zu öffnen.

    Screenshot: Öffnen des veröffentlichen Artefakts

  6. Die Textdatei sollte unser Geheimnis enthalten: mysecretpassword.

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 zum Hosten Ihres Projekts erstellt haben, lesen Sie den Artikel Löschen Ihrer Organisation oder Löschen Ihres Projekts durch.

  2. Alle Azure-Ressourcen, die während dieses Tutorials erstellt wurden, werden unter einer einzelnen Ressourcengruppe, PipelinesKeyVaultResourceGroup, gehostet. Führen Sie die folgenden Befehle aus, um die Ressourcengruppe und alle dazugehörigen Ressourcen zu löschen.

    az group delete --name PipelinesKeyVaultResourceGroup
    

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;

Nächste Schritte