Azure Key Vault-Secrets in Azure Pipelines verwenden

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

Azure Key Vault ist ein Clouddienst, der Entwicklern hilft, vertrauliche Informationen wie API-Schlüssel, Anmeldeinformationen und Zertifikate sicher zu speichern und zu verwalten. Key Vault unterstützt zwei Arten von Containern: Tresore und verwaltete HSM-Pools (Hardware Security Module, Hardwaresicherheitsmodul). Tresore können sowohl Software als auch HSM-gesicherte Schlüssel, geheime Schlüssel und Zertifikate speichern. Verwaltete HSM-Pools unterstützen ausschließlich HSM-gesicherte Schlüssel.

In diesem Artikel erfahren Sie, wie Sie einen Schlüsseltresor erstellen, einen geheimen Schlüssel hinzufügen, Zugriffsrichtlinien konfigurieren und diesen geheimen Schlüssel dann in Azure Pipelines verwenden. In diesem Tutorial wird ein Schlüsseltresor mit öffentlichem Netzwerkzugriff verwendet. Wenn Sie über Ihre Pipeline auf einen privaten Schlüsseltresor zugreifen müssen, lesen Sie Zugriff auf einen privaten Key Vault aus Ihrer Pipeline. Informationen zum Verknüpfen von Key Vault Geheimnissen mit Variablengruppen finden Sie unter Verknüpfen einer Variablengruppe mit Geheimnissen in Azure Key Vault.

Voraussetzungen

Kategorie Anforderungen
Azure DevOps – Eine Azure DevOps-Organisation.
– Ein Azure DevOps-Projekt.
Azure Ein Azure-Abonnement.

Code abrufen

Wenn Sie kein eigenes Projekt haben, importieren Sie das folgende Beispiel-Repository in Ihr Azure Repository:

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

  2. Wählen Sie Repos 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 eines Schlüsseltresors

Führen Sie die folgenden Schritte aus, um einen neuen Key Vault in Azure mithilfe des Azure CLI zu erstellen:

  1. Wechseln Sie zum portal Azure, und wählen Sie dann in der oberen rechten Ecke Azure Cloud Shell aus.

  2. Wenn Ihr Konto mehreren Azure-Abonnements zugeordnet ist, legen Sie Ihr Standardabonnement fest.

    az account set --subscription <YOUR_SUBSCRIPTION_NAME_OR_ID>
    
  3. Legen Sie eine Azure-Standardregion fest. Führen Sie az account list-locations aus, um eine Liste der verfügbaren Regionen anzuzeigen.

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

    az group create --name <YOUR_RESOURCE_GROUP_NAME>
    
  5. Erstellen Sie einen neuen Schlüsseltresor.

    az keyvault create \
      --name <YOUR_KEY_VAULT_NAME> \
      --resource-group <YOUR_RESOURCE_GROUP_NAME>
    
  6. Hinzufügen eines Geheimnisses zu Ihrem Key Vault.

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

Authentifizierung einrichten

Nachdem Sie Ihren Schlüsseltresor erstellt haben, besteht der nächste Schritt darin, die Authentifizierung einzurichten. Wählen Sie verwaltete Identität oder Dienstprinzipal aus, und folgen Sie den Anweisungen zum Konfigurieren der Authentifizierung.

Erstellen einer benutzerseitig zugewiesenen verwalteten Identität

  1. Wechseln Sie zum portal Azure, und suchen Sie dann in der Suchleiste nach Managed Identities.

  2. Wählen Sie "Erstellen" aus, und geben Sie die folgenden Informationen an:

    • Abonnement: Wählen Sie Ihr Azure-Abonnement im Dropdownmenü aus.
    • Ressourcengruppe: Wählen Sie eine vorhandene Ressourcengruppe aus, oder erstellen Sie eine neue.
    • Region: Wählen Sie die Region aus, in der die verwaltete Identität erstellt wird.
    • Name: Geben Sie einen Namen für die vom Benutzer zugewiesene verwaltete Identität ein.
  3. Wählen Sie "Überprüfen" und "Erstellen" und dann " Erstellen" aus, um die Bereitstellung zu starten.

  4. Nachdem die Bereitstellung abgeschlossen ist, wählen Sie "Zur Ressource wechseln" aus, und kopieren Sie die Werte "Abonnement-ID " und "Client-ID ". Sie benötigen diese Werte in späteren Schritten.

  5. Wählen Sie unter "Einstellungen" die Option "Eigenschaften" aus, und kopieren Sie den Mandanten-ID-Wert Ihrer verwalteten Identität für die spätere Verwendung.

Zugriffsrichtlinien für den Key Vault einrichten

  1. Wechseln Sie zum portal Azure, und verwenden Sie die Suchleiste, um den zuvor erstellten Schlüsseltresor zu finden.

  2. Wählen Sie Access-Richtlinien und dann "Erstellen" aus, um eine neue Richtlinie hinzuzufügen.

  3. Aktivieren Sie unter "Geheime Berechtigungen" die Kontrollkästchen " Abrufen " und "Liste" .

  4. Wählen Sie Weiteraus. Fügen Sie die Client-ID der verwalteten Identität, die Sie zuvor erstellt haben, in die Suchleiste ein, und wählen Sie dann die verwaltete Identität aus.

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

  6. Überprüfen Sie die Zugriffsrichtliniendetails, und wählen Sie dann "Erstellen " aus, um die Richtlinie anzuwenden.

Erstellen einer Dienstverbindung

  1. Melden Sie sich bei Azure DevOps an, und wechseln Sie dann zu Ihrem Projekt.

  2. Wählen Sie Projekteinstellungen>Dienstverbindungen>Neue Dienstverbindung aus.

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

  4. Wählen Sie für den Identitätstypverwaltete Identität aus.

  5. Geben Sie unter Schritt 1: Details zur verwalteten Identität die folgenden Informationen an:

    • 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 der Dropdownliste aus.
  6. Geben Sie für Schritt 2: Azure-Bereich die folgenden Informationen an:

    • Bereichsebene für die Dienstverbindung: Abonnement auswählen.
    • Abonnement für Dienstverbindung: Wählen Sie das Abonnement aus, auf das die verwaltete Identität zugreift.
    • Ressourcengruppe für Dienstverbindung: (Optional) Geben Sie eine Ressourcengruppe an, um den Zugriff der verwalteten Identität auf eine Ressourcengruppe einzuschränken.
  7. Geben Sie für Schritt 3: Dienstverbindungsdetails die folgenden Informationen an:

    • Dienstverbindungsname: Geben Sie einen Namen für die Dienstverbindung ein.
    • Dienstverwaltungsreferenz: (Optional) Schließen Sie Kontextinformationen aus einer ITSM-Datenbank ein.
    • Beschreibung: (Optional) Geben Sie eine Beschreibung ein.
  8. Unter "Sicherheit" ermöglicht die Option "Zugriffsberechtigung für alle Pipelines erteilen" allen Pipelines die Verwendung dieser Dienstverbindung. Diese Option wird nicht empfohlen. Autorisieren Sie stattdessen jede Pipeline einzeln, um die Dienstverbindung zu verwenden.

  9. Wählen Sie Speichern aus, um die Dienstverbindung zu überprüfen und zu erstellen.

    Screenshot, der zeigt, wie Sie eine verwaltete Identität Azure Resource Manager Dienstverbindung erstellen.

Zugriff auf wichtige Tresorgeheimnisse aus Ihrer Pipeline

Warnung

Dieses Tutorial dient nur zu Lernzwecken. Bewährte Methoden und Anleitungen zur sicheren Arbeit mit geheimen Schlüsseln finden Sie unter Verwalten von geheimen Schlüsseln in Ihren Server-Apps mit Azure Key Vault.

  1. Melden Sie sich bei Azure DevOps an, und wechseln Sie dann zu Ihrem Projekt.

  2. Wählen Sie Pipelines>Neue Pipeline aus.

  3. Wählen Sie Azure Repos Git (YAML), und wählen Sie dann Ihr Repository.

  4. Wählen Sie die Vorlage Startpipeline aus.

  5. Die Standardpipeline enthält Beispiel-Echobefehle. Sie benötigen diese Befehle nicht, damit Sie sie entfernen können.

  6. Fügen Sie Ihrer Pipeline die Azure Key Vault-Aufgabe hinzu. Ersetzen Sie die Platzhalter durch den Namen der Dienstverbindung, die Sie zuvor erstellt haben, und Ihren Kea Vault Namen. Ihre YAML-Datei sollte dem folgenden Beispiel ähneln:

    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
    
  7. Fügen Sie die folgenden Aufgaben hinzu, um den geheimen Schlüssel zu kopieren und zu veröffentlichen. Dieses Beispiel dient nur zu Demonstrationszwecken. Verwenden Sie es nicht in einer Produktionsumgebung.

    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'
    
  8. 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. Wenn Sie dazu aufgefordert werden, wählen Sie "Zulassen ", um die Pipelinezugriff auf Azure-Ressourcen zu gewähren.

  9. Nachdem die Pipeline gestartet wurde, wählen Sie die CmdLine-Aufgabe aus, um die Protokolle anzuzeigen.

    Screenshot der Befehlszeilenaufgabenprotokolle.

  10. Wenn die Pipelineausführung abgeschlossen ist, kehren Sie zur Pipeline-Zusammenfassung zurück und wählen Sie das veröffentlichte Artefakt aus.

    Screenshot, der das veröffentlichte Artefakt auf der Registerkarte „Zusammenfassung“ zeigt.

  11. Wählen Sie drop>secret.txt aus, um die Datei herunterzuladen.

    Screenshot, der zeigt, wie das veröffentlichte Artefakt heruntergeladen wird.

  12. Öffnen Sie die heruntergeladene Textdatei. Er sollte den geheimen Schlüssel enthalten, der aus Ihrem Schlüsseltresor abgerufen wurde.

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, erfahren Sie , wie Sie Ihre Organisation löschen. Löschen Sie andernfalls Das Projekt.

  2. Alle azure-Ressourcen, die während dieses Lernprogramms erstellt wurden, werden in einer einzelnen Ressourcengruppe gehostet. Führen Sie den folgenden Befehl aus, um die Ressourcengruppe und alle zugehörigen Ressourcen zu löschen.

    az group delete --name <YOUR_RESOURCE_GROUP_NAME>
    

Problembehandlung

Fehler: "Der Benutzer oder die Gruppe verfügt nicht über die Berechtigung "Geheime Liste"

Dieser Fehler tritt auf, wenn der von Ihrer Pipeline verwendete Dienstprinzipal oder die verwaltete Identität nicht berechtigt ist, Geheimnisse im Key Vault auflisten zu können. Um dieses Problem zu beheben, stellen Sie sicher, dass die Identität über die Berechtigungen " Abrufen " und "Auflisten " für geheime Schlüssel verfügt. Führen Sie die folgenden Befehle aus, um dem Dienstprinzipal die erforderlichen Berechtigungen zu erteilen:

az login

az account set --subscription <YOUR_SUBSCRIPTION_ID>

$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