Utilizzare i segreti di Azure Key Vault nelle Azure Pipelines

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

Azure Key Vault è un servizio cloud che consente agli sviluppatori di archiviare e gestire in modo sicuro informazioni riservate, ad esempio chiavi API, credenziali e certificati. Key Vault supporta due tipi di contenitori: caveau e pool di moduli di sicurezza hardware gestiti. Cassaforti possono archiviare sia chiavi supportate da software e modulo di protezione hardware, sia segreti e certificati. I pool HSM gestiti supportano esclusivamente chiavi protette da HSM.

Questo articolo illustra come creare un insieme di credenziali delle chiavi, aggiungere un segreto, configurare i criteri di accesso e quindi usarlo in Azure Pipelines. Questo tutorial utilizza un Key Vault con accesso alla rete pubblica. Se è necessario accedere a un insieme di chiavi privato dalla pipeline, consulta Accesso a un insieme di chiavi privato dalla pipeline. Per collegare i segreti di Key Vault ai gruppi di variabili, vedere Collega un gruppo di variabili ai segreti in Azure Key Vault.

Prerequisiti

Categoria Requisiti
Azure DevOps - Un'organizzazione di Azure DevOps.
- Un progetto Azure DevOps.
Azzurro Una sottoscrizione di Azure.

Ottenere il codice

Se non si ha un progetto personalizzato, importare il repository di esempio seguente nel repository di Azure:

  1. Accedere all'organizzazione di Azure DevOps e quindi passare al progetto.

  2. Selezionare Repository e quindi Importare. Immettere l'URL del repository seguente e quindi selezionare Importa.

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

Creare un insieme di credenziali delle chiavi

Per creare un nuovo insieme di credenziali in Azure usando l'interfaccia della riga di comando di Azure, seguire questa procedura:

  1. Passare al portale Azure e quindi selezionare Azure Cloud Shell nell'angolo superiore destro.

  2. Se l'account è associato a più sottoscrizioni Azure, impostare la sottoscrizione predefinita.

    az account set --subscription <YOUR_SUBSCRIPTION_NAME_OR_ID>
    
  3. Impostare un'area di Azure predefinita. Per visualizzare un elenco delle aree disponibili, eseguire az account list-locations.

    az config set defaults.location=<YOUR_REGION>
    
  4. Creare un nuovo gruppo di risorse.

    az group create --name <YOUR_RESOURCE_GROUP_NAME>
    
  5. Creare una nuova Key Vault.

    az keyvault create \
      --name <YOUR_KEY_VAULT_NAME> \
      --resource-group <YOUR_RESOURCE_GROUP_NAME>
    
  6. Aggiungi un segreto alla cassaforte delle chiavi.

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

Configurare l'autenticazione

Dopo aver creato il Key Vault, il passaggio successivo è configurare l'autenticazione. Selezionare Identità gestita o entità servizio e seguire le istruzioni per configurare l'autenticazione.

Creare un'identità gestita assegnata dall'utente

  1. Passare al portale Azure e quindi cercare Managed Identities nella barra di ricerca.

  2. Selezionare Crea e specificare le informazioni seguenti:

    • Sottoscrizione: selezionare la sottoscrizione di Azure dal menu a discesa.
    • Gruppo di risorse: selezionare un gruppo di risorse esistente o crearne uno nuovo.
    • Area: selezionare l'area in cui viene creata l'identità gestita.
    • Nome: immettere un nome per l'identità gestita assegnata dall'utente.
  3. Selezionare Rivedi e crea e quindi crea per avviare la distribuzione.

  4. Al termine della distribuzione, selezionare Vai alla risorsa e copiare i valori ID sottoscrizione e ID client . Questi valori sono necessari nei passaggi successivi.

  5. In Impostazioni selezionare Proprietà e copiare il valore dell'ID tenant dell'identità gestita per usarlo in un secondo momento.

Configurare le politiche di accesso del Key Vault

  1. Accedi al portale di Azure e usa la barra di ricerca per individuare il Key Vault creato in precedenza.

  2. Selezionare Criteri di accesso e quindi Crea per aggiungere un nuovo criterio.

  3. In Autorizzazioni segrete selezionare le caselle di controllo Recupera ed Elenco .

  4. Seleziona Avanti. Incollare l'ID client dell'identità gestita creata in precedenza nella barra di ricerca e quindi selezionare l'identità gestita.

  5. Selezionare Avanti, quindi di nuovo Avanti.

  6. Esaminare i dettagli dei criteri di accesso e quindi selezionare Crea per applicare il criterio.

Creare una connessione al servizio

  1. Accedere a Azure DevOps e quindi passare al progetto.

  2. Selezionare > al servizio.

  3. Selezionare Azure Resource Manager, quindi selezionare Avanti.

  4. Per Tipo di identità selezionare Identità gestita.

  5. In Passaggio 1: Dettagli identità gestita specificare le informazioni seguenti:

    • Sottoscrizione per l'identità gestita: selezionare la sottoscrizione che contiene l'identità gestita.
    • Gruppo di risorse per l'identità gestita: selezionare il gruppo di risorse che ospita l'identità gestita.
    • Identità gestita: selezionare l'identità gestita dall'elenco a discesa.
  6. Per il passaggio 2: Ambito di Azure, specificare le informazioni seguenti:

    • Livello di ambito per la connessione al servizio: selezionare Sottoscrizione.
    • Sottoscrizione per la connessione al servizio: selezionare la sottoscrizione a cui accede l'identità gestita.
    • Gruppo di risorse per la connessione al servizio: (facoltativo) Specificare un gruppo di risorse per limitare l'accesso dell'identità gestita a un gruppo di risorse.
  7. Per Passaggio 3: Dettagli connessione al servizio, specificare le informazioni seguenti:

    • Nome connessione al servizio: immettere un nome per la connessione al servizio.
    • Informazioni di riferimento sulla gestione dei servizi: (facoltativo) Includere informazioni di contesto da un database ITSM.
    • Descrizione: (facoltativo) Immettere una descrizione.
  8. In Sicurezza l'opzione Concedi l'autorizzazione di accesso a tutte le pipeline consente a tutte le pipeline di usare questa connessione al servizio. Questa opzione non è consigliata. Invece, autorizzare ogni singola pipeline a utilizzare la connessione al servizio.

  9. Selezionare Salva per convalidare e creare la connessione al servizio.

    Screenshot che illustra come creare una connessione del servizio di Azure Resource Manager per l'identità gestita.

Accedere ai segreti dell'archivio chiavi dalla pipeline

Avviso

Questa esercitazione è solo a scopo didattico. Per le procedure consigliate per la sicurezza e indicazioni sull'uso sicuro dei segreti, vedere Gestire i segreti nelle app server con Azure Key Vault.

  1. Accedere a Azure DevOps e quindi passare al progetto.

  2. Selezionare Pipeline>nuova pipeline.

  3. Selezionare Azure Repos Git (YAML) e quindi selezionare il repository.

  4. Selezionare il modello Starter pipeline.

  5. La pipeline predefinita include comandi echo di esempio. Questi comandi non sono necessari, quindi è possibile rimuoverli.

  6. Aggiungere l'attività Azure Key Vault alla pipeline. Sostituisci i segnaposto con il nome della connessione al servizio che hai creato in precedenza e il nome del tuo Key Vault. Il file YAML dovrebbe essere simile all'esempio seguente:

    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. Aggiungere i seguenti compiti per copiare e pubblicare il segreto. Questo esempio è solo a scopo dimostrativo. Non usarlo in un ambiente di produzione.

    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. Selezionare Salva ed esegui e quindi selezionarlo ancora una volta per eseguire il commit delle modifiche e attivare la pipeline. Se richiesto, selezionare Consenti di concedere alla pipeline l'accesso alle risorse di Azure.

  9. Dopo l'avvio della pipeline, selezionare l'attività CmdLine per visualizzare i log.

    Screenshot che mostra i log delle attività della riga di comando.

  10. Al termine dell'esecuzione della pipeline, torna alla pagina del riepilogo e seleziona l'artefatto pubblicato.

    Screenshot che mostra l'artefatto pubblicato nella scheda di riepilogo.

  11. Selezionare drop>secret.txt per scaricare il file.

    Screenshot che mostra come scaricare l'artefatto pubblicato.

  12. Aprire il file di testo scaricato. Deve contenere il segreto recuperato dal Key Vault.

Pulire le risorse

Per eliminare le risorse create, seguire questa procedura:

  1. Se è stata creata una nuova organizzazione per ospitare il progetto, vedere come eliminare l'organizzazione. In caso contrario, eliminare il progetto.

  2. Tutte le risorse di Azure create durante questa esercitazione sono ospitate in un singolo gruppo di risorse. Eseguire il comando seguente per eliminare il gruppo di risorse e tutte le relative risorse.

    az group delete --name <YOUR_RESOURCE_GROUP_NAME>
    

Risoluzione dei problemi

Errore: "L'utente o il gruppo non dispone dell'autorizzazione per l'elenco dei segreti"

Questo errore si verifica quando il service principal o l'identità gestita utilizzata dalla pipeline non dispone dell'autorizzazione per elencare i segreti nel Key Vault. Per risolvere questo problema, assicurarsi che l'identità disponga delle autorizzazioni Get e List per i segreti. Eseguire i comandi seguenti per concedere le autorizzazioni necessarie all'entità servizio:

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