Condividi tramite


Usare i segreti di Azure Key Vault in Azure Pipelines

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Azure Key Vault consente agli sviluppatori di archiviare e gestire in modo sicuro informazioni riservate, ad esempio chiavi API, credenziali o certificati. Il servizio Azure Key Vault supporta due tipi di contenitori: insiemi di credenziali e pool di moduli di protezione hardware gestiti . Gli insiemi di credenziali possono archiviare chiavi, segreti e certificati supportati dal software e dal modulo di protezione hardware, mentre i pool di moduli di protezione hardware gestiti supportano esclusivamente le chiavi supportate dal modulo di protezione hardware.

La presente esercitazione include informazioni su come:

  • Creare un'istanza di Azure Key Vault usando l'interfaccia della riga di comando di Azure
  • Aggiungere un segreto e configurare l'accesso all'insieme di credenziali delle chiavi di Azure
  • Usare i segreti nella pipeline

Prerequisiti

  • Un'organizzazione Di Azure DevOps e un progetto. Creare un'organizzazione o un progetto, se non è già stato fatto.

  • Una sottoscrizione di Azure. Creare gratuitamente un account Azure, se non ne è già disponibile uno.

Scaricare il codice di esempio

Se si ha già un repository personalizzato, procedere con il passaggio successivo. In caso contrario, importare il repository di esempio seguente nel repository di Azure.

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

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

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

Creare un Azure Key Vault

  1. Accedere al portale di Azure e quindi selezionare il pulsante Cloud Shell nell'angolo in alto a destra.

  2. Se all'account sono associate più sottoscrizioni di Azure, usare il comando seguente per specificare una sottoscrizione predefinita. È possibile usare az account list per generare un elenco delle sottoscrizioni.

    az account set --subscription <YOUR_SUBSCRIPTION_NAME_OR_ID>
    
  3. Impostare l'area di Azure predefinita. È possibile usare az account list-locations per generare un elenco di aree disponibili.

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

    az group create --name <YOUR_RESOURCE_GROUP_NAME>
    
  5. Creare un nuovo insieme di credenziali delle chiavi di Azure.

    az keyvault create \
      --name <YOUR_KEY_VAULT_NAME> \
      --resource-group <YOUR_RESOURCE_GROUP_NAME>
    
  6. Creare un nuovo segreto nell'insieme di credenziali delle chiavi di Azure.

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

Configurare l'autenticazione

Creare un'identità gestita assegnata dall'utente

  1. Accedere al portale di Azure, quindi cercare il servizio Identità gestite nella barra di ricerca.

  2. Selezionare Crea e compilare i campi obbligatori come indicato di seguito:

    • Sottoscrizione: selezionare la sottoscrizione dal menu a discesa.
    • Gruppo di risorse: selezionare un gruppo di risorse esistente o crearne uno nuovo.
    • Area: selezionare un'area dal menu a discesa.
    • Nome: immetti un nome per l'identità gestita assegnata dall'utente.
  3. Al termine, selezionare Rivedi e crea .

  4. Al termine della distribuzione, selezionare Vai alla risorsa, quindi copiare i valori sottoscrizione e ID client da usare nei passaggi successivi.

  5. Passare a Proprietà impostazioni> e copiare il valore dell'ID tenant dell'identità gestita per usarlo in un secondo momento.

Configurare i criteri di accesso dell'insieme di credenziali delle chiavi

  1. Passare a portale di Azure e usare la barra di ricerca per trovare l'insieme di credenziali delle chiavi 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. Selezionare Avanti, quindi incollare l'ID client dell'identità gestita creata in precedenza nella barra di ricerca. Selezionare l'identità gestita.

  5. Selezionare Avanti, quindi Avanti ancora una volta.

  6. Esaminare i nuovi criteri e quindi selezionare Crea al termine.

Creare una connessione al servizio

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

  2. Selezionare Connessioni al servizio Impostazioni> progetto, quindi selezionare Nuova connessione al servizio per creare una nuova connessione al servizio.

  3. Selezionare Azure Resource Manager e quindi avanti.

  4. Per Tipo di identità selezionare Identità gestita dal menu a discesa.

  5. Per Passaggio 1: Dettagli identità gestita, compilare i campi come indicato di seguito:

    • Sottoscrizione per l'identità gestita: selezionare la sottoscrizione contenente 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 dal menu a discesa.

  6. Per Il passaggio 2: Ambito di Azure compilare i campi come indicato di seguito:

    • Livello di ambito per la connessione al servizio: selezionare Sottoscrizione.

    • Sottoscrizione per la connessione al servizio: selezionare la sottoscrizione a cui si accederà l'identità gestita.

    • Gruppo di risorse per la connessione al servizio: (facoltativo) Specificare per limitare l'accesso all'identità gestita a un gruppo di risorse.

  7. Per Il passaggio 3: Dettagli della connessione al servizio:

    • Nome connessione al servizio: specificare un nome per la connessione al servizio.

    • Informazioni di riferimento sulla gestione dei servizi: (facoltativo) informazioni sul contesto da un database ITSM.

    • Descrizione: (Facoltativo) Aggiungere una descrizione.

  8. In Sicurezza selezionare la casella di controllo Concedi l'autorizzazione di accesso a tutte le pipeline per consentire a tutte le pipeline di usare questa connessione al servizio. Se non si seleziona questa opzione, è necessario concedere manualmente l'accesso a ogni pipeline che usa questa connessione al servizio.

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

    Screenshot che mostra come creare una connessione al servizio Arm di gestione delle identità gestite.

Accedere ai segreti dell'insieme di credenziali delle chiavi dalla pipeline

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

  2. Selezionare Pipeline e quindi Nuova pipeline.

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

  4. Selezionare il modello della pipeline di avvio.

  5. La pipeline predefinita includerà uno script che esegue comandi echo. Queste non sono necessarie in modo da poterle eliminare.

  6. Aggiungere l'attività AzureKeyVault, sostituendo i segnaposto con il nome della connessione al servizio creata in precedenza e il nome dell'insieme di credenziali delle chiavi. Il file YAML dovrebbe essere simile al frammento di codice 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 le attività seguenti per copiare e pubblicare il segreto. Questo esempio è solo a scopo dimostrativo e non deve essere implementato 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. Potrebbe essere richiesto di consentire l'accesso della pipeline alle risorse di Azure, se richiesto, selezionare Consenti. Sarà necessario approvare la pipeline una sola volta.

  9. Selezionare l'attività CmdLine per visualizzare i log.

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

  10. Al termine dell'esecuzione della pipeline, tornare al riepilogo della pipeline e selezionare l'artefatto pubblicato.

    Screenshot che mostra l'artefatto pubblicato nella scheda riepilogo.

  11. Selezionare drop>secret.txt per scaricarlo.

    Screenshot che mostra come scaricare l'artefatto pubblicato.

  12. Aprire il file di testo appena scaricato, il file di testo deve contenere il segreto dall'insieme di credenziali delle chiavi di Azure.

Avviso

Questa esercitazione è solo a scopo didattico. Per le procedure consigliate per la sicurezza e come usare in modo sicuro i segreti, vedere Gestire i segreti nelle app server con Azure Key Vault.

Pulire le risorse

Seguire questa procedura per eliminare le risorse create:

  1. Se è stata creata una nuova organizzazione per ospitare il progetto, vedere come eliminare l'organizzazione, altrimenti 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>
    

Domande frequenti

D: Viene visualizzato l'errore seguente: "L'utente o il gruppo non dispone dell'autorizzazione per l'elenco dei segreti" cosa devo fare?

R: Se si verifica un errore che indica che l'utente o il gruppo non dispone dell'autorizzazione dell'elenco di segreti per l'insieme di credenziali delle chiavi, eseguire i comandi seguenti per autorizzare l'applicazione ad accedere alla chiave o al segreto in Azure Key Vault:

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