Azure Key Vault-geheimen gebruiken in Azure-pipelines

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

Azure Key Vault is een cloudservice waarmee ontwikkelaars gevoelige informatie, zoals API-sleutels, referenties en certificaten, veilig kunnen opslaan en beheren. Key Vault ondersteunt twee typen containers: kluizen en HSM-pools (Managed Hardware Security Module). Kluizen kunnen sleutels, geheimen en certificaten opslaan die zowel door software als door HSM worden ondersteund. Beheerde HSM-pools ondersteunen uitsluitend sleutels met HSM-ondersteuning.

In dit artikel leert u hoe u een sleutelkluis maakt, een geheim toevoegt, toegangsbeleid configureert en dat geheim vervolgens gebruikt in Azure-pipelines. In deze zelfstudie wordt gebruikgemaakt van een sleutelkluis met openbare netwerktoegang. Als u toegang wilt krijgen tot een persoonlijke sleutelkluis vanuit uw pijplijn, raadpleegt u Toegang tot een persoonlijke sleutelkluis vanuit uw pijplijn. Zie Koppel een variabelengroep aan geheimen in Azure Key Vault als u Key Vault geheimen aan variabelengroepen wilt koppelen.

Vereisten

Categorie Requirements
Azure DevOps - Een Azure DevOps-organisatie.
- Een Azure DevOps-project.
Azuur Een Azure-abonnement.

Code ophalen

Als u geen eigen project hebt, importeert u de volgende voorbeeldopslagplaats in uw Azure opslagplaats:

  1. Meld u aan bij uw Azure DevOps-organisatie en ga vervolgens naar uw project.

  2. Selecteer Repositories en selecteer Importeren. Voer de volgende OPSLAGPLAATS-URL in en selecteer Importeren.

    https://github.com/MicrosoftDocs/pipelines-dotnet-core
    

Creëer een sleutelkluis.

Voer de volgende stappen uit om een nieuwe sleutelkluis in Azure te maken met behulp van de Azure CLI:

  1. Ga naar de Azure portal en selecteer vervolgens Azure Cloud Shell in de rechterbovenhoek.

  2. Als uw account is gekoppeld aan meerdere Azure abonnementen, stelt u uw standaardabonnement in.

    az account set --subscription <YOUR_SUBSCRIPTION_NAME_OR_ID>
    
  3. Stel een standaard Azure-regio in. Als u een lijst met beschikbare regio's wilt zien, voert u de opdracht uit az account list-locations.

    az config set defaults.location=<YOUR_REGION>
    
  4. Een nieuwe resourcegroep maken.

    az group create --name <YOUR_RESOURCE_GROUP_NAME>
    
  5. Maak een nieuwe sleutelkluis.

    az keyvault create \
      --name <YOUR_KEY_VAULT_NAME> \
      --resource-group <YOUR_RESOURCE_GROUP_NAME>
    
  6. Voeg een geheim toe aan uw sleutelkluis.

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

Verificatie instellen

Nadat u uw sleutelkluis hebt gemaakt, is de volgende stap het instellen van verificatie. Selecteer Beheerde identiteit of service-principal, en volg instructies voor het configureren van verificatie.

Een door de gebruiker toegewezen beheerde identiteit maken

  1. Ga naar de Azure portal en zoek naar Beheerde identiteiten in de zoekbalk.

  2. Selecteer Maken en geef de volgende informatie op:

    • Abonnement: Selecteer uw Azure-abonnement in de vervolgkeuzelijst.
    • Resourcegroep: Selecteer een bestaande resourcegroep of maak een nieuwe.
    • Regio: Selecteer de regio waarin de beheerde identiteit is gemaakt.
    • Naam: Voer een naam in voor de door de gebruiker toegewezen beheerde identiteit.
  3. Selecteer Beoordelen en maken en selecteer Vervolgens Maken om de implementatie te starten.

  4. Nadat de implementatie is voltooid, selecteert u Ga naar de resource en kopieert u de waarden voor abonnements-id en client-id. U hebt deze waarden in latere stappen nodig.

  5. Selecteer Eigenschappen onder Instellingen en kopieer de tenant-id-waarde van uw beheerde identiteit voor later gebruik.

Toegangsbeleid voor key vault instellen

  1. Ga naar de Azure portal en gebruik de zoekbalk om de sleutelkluis te zoeken die u eerder hebt gemaakt.

  2. Selecteer Toegangsbeleid en selecteer Maken om een nieuw beleid toe te voegen.

  3. Schakel onder Geheime machtigingen de selectievakjesOphalen en Lijst in.

  4. Kies Volgende. Plak de client-id van de beheerde identiteit die u eerder hebt gemaakt in de zoekbalk en selecteer vervolgens de beheerde identiteit.

  5. Selecteer Volgende en daarna nog eens Volgende.

  6. Controleer de details van het toegangsbeleid en selecteer Maken om het beleid toe te passen.

Een serviceverbinding maken

  1. Meld u aan bij Azure DevOps en ga naar uw project.

  2. Selecteer Projectinstellingen>Serviceverbindingen>Nieuwe serviceverbinding.

  3. Selecteer Azure Resource Manager en selecteer vervolgens Volgende.

  4. Selecteer Beheerde identiteit voor identiteitstype.

  5. Geef onder Stap 1: Details van beheerde identiteit de volgende informatie op:

    • Abonnement voor beheerde identiteit: selecteer het abonnement dat uw beheerde identiteit bevat.
    • Resourcegroep voor beheerde identiteit: selecteer de resourcegroep die als host fungeert voor uw beheerde identiteit.
    • Beheerde identiteit: selecteer uw beheerde identiteit in de vervolgkeuzelijst.
  6. Geef voor stap 2: Azure Scope de volgende informatie op:

    • Bereikniveau voor serviceverbinding: Selecteer Abonnement.
    • Abonnement voor serviceverbinding: selecteer het abonnement waartoe de beheerde identiteit toegang heeft.
    • Resourcegroep voor serviceverbinding: (Optioneel) Geef een resourcegroep op om de toegang van de beheerde identiteit tot één resourcegroep te beperken.
  7. Geef voor stap 3: Serviceverbindingsgegevens de volgende informatie op:

    • Serviceverbindingsnaam: Voer een naam in voor de serviceverbinding.
    • Naslaginformatie over servicebeheer: (optioneel) Neem contextinformatie op uit een ITSM-database.
    • Beschrijving: (Optioneel) Voer een beschrijving in.
  8. Onder Beveiliging kan met de optie Toegang verlenen aan alle pijplijnen alle pijplijnen deze serviceverbinding gebruiken. We raden deze optie niet aan. In plaats daarvan moet u elke pijplijn afzonderlijk autoriseren om de serviceverbinding te gebruiken.

  9. Selecteer Opslaan om de serviceverbinding te valideren en te maken.

    Schermafbeelding waarin wordt getoond hoe u een beheerde identiteit maakt Azure Resource Manager service connection.

Toegang tot geheimen van de sleutelkluis vanuit uw pijplijn

Waarschuwing

Deze zelfstudie is alleen bedoeld voor educatieve doeleinden. Zie Geheimen beheren in uw server-apps met Azure Key Vault voor aanbevolen beveiligingsprocedures en richtlijnen voor veilig werken met geheimen.

  1. Meld u aan bij Azure DevOps en ga naar uw project.

  2. Selecteer Pijplijnen>Nieuwe Pijplijn.

  3. Selecteer Azure-opslagplaatsen Git (YAML) en selecteer vervolgens uw opslagplaats.

  4. Selecteer de Starter-pijplijnsjabloon .

  5. De standaardpijplijn bevat voorbeeld-echoopdrachten. U hebt deze opdrachten niet nodig, zodat u ze kunt verwijderen.

  6. Voeg de Azure Key Vault-taak toe aan uw pijplijn. Vervang de tijdelijke aanduidingen door de naam van de serviceverbinding die u eerder hebt gemaakt en de naam van de sleutelkluis. Uw YAML-bestand moet er ongeveer uitzien als in het volgende voorbeeld:

    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. Voeg de volgende taken toe om het geheim te kopiëren en te publiceren. Dit voorbeeld is alleen bedoeld voor demonstratiedoeleinden. Gebruik deze niet in een productieomgeving.

    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. Selecteer Opslaan en uitvoeren en selecteer deze vervolgens nogmaals om uw wijzigingen door te voeren en de pijplijn te activeren. Als u hierom wordt gevraagd, selecteert u Toestaan om de pijplijn toegang te verlenen tot Azure-resources.

  9. Nadat de pijplijn is gestart, selecteert u de CmdLine-taak om de logboeken weer te geven.

    Schermopname die de logboeken van de opdrachtregeltaak toont.

  10. Wanneer de pijplijnuitvoering is voltooid, gaat u terug naar het pijplijnoverzicht en selecteert u het gepubliceerde artefact.

    Schermopname van het gepubliceerde artefact op het tabblad Samenvatting.

  11. Selecteer drop>secret.txt om het bestand te downloaden.

    Schermopname van het downloaden van het gepubliceerde artefact.

  12. Open het gedownloade tekstbestand. Het moet het geheim bevatten dat is opgehaald uit uw sleutelkluis.

Middelen opschonen

Voer de volgende stappen uit om de resources te verwijderen die u hebt gemaakt:

  1. Als u een nieuwe organisatie hebt gemaakt om uw project te hosten, raadpleegt u hoe u uw organisatie verwijdert. Verwijder anders uw project.

  2. Alle Azure-resources die tijdens deze zelfstudie worden gemaakt, worden gehost in één resourcegroep. Voer de volgende opdracht uit om de resourcegroep en alle bijbehorende resources te verwijderen.

    az group delete --name <YOUR_RESOURCE_GROUP_NAME>
    

Probleemoplossingsproces

Fout: 'De gebruiker of groep heeft geen machtiging voor de geheimenlijst'

Deze fout treedt op wanneer de service-principal of beheerde identiteit die door uw pijplijn wordt gebruikt, geen machtigingen heeft om geheimen in de sleutelkluis weer te geven. U kunt dit probleem oplossen door ervoor te zorgen dat de identiteit de machtigingen Ophalen en Lijst voor geheimen heeft. Voer de volgende opdrachten uit om de vereiste machtigingen te verlenen aan uw service-principal:

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