Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Azure Key Vault offre un modo sicuro per gestire le credenziali, incluse chiavi, segreti e certificati. Utilizzando Azure Pipelines, è possibile semplificare il processo di accesso e utilizzo dei Key Vault per archiviare e recuperare le credenziali.
In alcuni scenari, le organizzazioni danno priorità alla sicurezza limitando l'accesso agli insiemi di credenziali esclusivamente alle reti virtuali di Azure designate. Questa restrizione garantisce il massimo livello di sicurezza per le applicazioni critiche. In questa esercitazione si apprenderà come configurare l'autenticazione e configurare l'accesso in ingresso in modo che la pipeline possa eseguire query e recuperare dati da un Azure Key Vault privato.
Prerequisiti
| Prodotto | Requisiti |
|---|---|
| Azure DevOps | - Una organizzazione di Azure DevOps. - Un progetto Azure DevOps . -Autorizzazioni: - Per concedere l'accesso a tutte le pipeline nel progetto: devi essere membro del gruppo Project Administrators. - Per creare connessioni al servizio: è necessario avere il ruolo Amministratore o Creator per le connessioni al servizio. |
| Azure | - Una sottoscrizione di Azure . - Un Azure key vault. |
Accedere a un archivio di chiavi privato
Gli sviluppatori possono usare Azure Pipelines per collegare un Azure Key Vault a un gruppo di variabili e mappare i segreti selezionati del vault. È possibile accedere al vault delle chiavi usato come gruppo di variabili:
- Da Azure DevOps durante la configurazione del gruppo di variabili.
- Da un agente ospitato autonomamente durante l'esecuzione di un processo della pipeline.
Per impostare l'accesso all'insieme di credenziali delle chiavi private, completa i passaggi seguenti nell'ordine indicato:
- Creare un'entità servizio per l'autenticazione con le risorse di Azure.
- Creare una connessione al servizio Azure Resource Manager in Azure DevOps usando l'entità servizio.
- Crea una credenziale federata per la tua entità servizio in Azure.
Creare un'entità servizio
Creare un'entità servizio per autenticarsi con le risorse di Azure:
Vai al portale di Azure.
Nel menu in alto aprire Azure Cloud Shell e quindi selezionare Bash.
Eseguire il comando seguente per creare un nuovo principale del servizio:
az ad sp create-for-rbac --name YOUR_SERVICE_PRINCIPAL_NAMECopiare l'output del comando. Questi valori sono necessari nel passaggio successivo quando si crea la connessione al servizio.
Creare una connessione al servizio
Dopo aver creato l'entità servizio, usa i valori restituiti per creare una connessione al servizio di Azure Resource Manager in Azure DevOps.
Accedere all'organizzazione di Azure DevOps e quindi passare al progetto.
Selezionare > al servizio.
Selezionare Azure Resource Manager, quindi selezionare Avanti.
In Tipo di identità selezionare Registrazione app (automatica) dal menu a discesa.
Per Credenziale, lascia il valore predefinito consigliato a federazione dell'identità del carico di lavoro.
Per Livello ambito selezionare Sottoscrizione e quindi selezionare la sottoscrizione dal menu a discesa.
Selezionare un gruppo di risorse se si vuole limitare l'accesso solo al gruppo di risorse specificato.
Immettere un nome per la connessione al servizio e quindi 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.
Seleziona Salva.
Creare una credenziale federata
Dopo aver salvato la connessione al servizio, configurare una credenziale federata in Azure per stabilire un trust tra l'entità servizio e Azure DevOps.
Passare al portale Azure, inserire l'ID client del principal del servizio nella barra di ricerca e quindi selezionare l'applicazione.
In Gestisci, selezionare Certificati e segreti>Federated credentials.
Selezionare Aggiungi credenziali e quindi per Scenario di credenziali federate selezionare Altro emittente.
Per Issuer, incollare l'URL seguente per sostituire il segnaposto con il GUID dell'organizzazione. Per trovare l'ID organizzazione, passare a Organization settings>Microsoft Entra. Scaricare l'elenco delle organizzazioni Azure DevOps connesse alla directory.
https://login.microsoftonline.com/<TENANT_ID>/v2.0In Identificatore oggetto incollare l'URL seguente. Sostituire i segnaposto con il nome dell'organizzazione, il nome del progetto e il nome della connessione al servizio.
ENTRA_PREFIX/sc/ORGANIZATION_NAME/PROJECT_NAME/SERVICE_CONNECTION_NAMEImmettere un nome per le credenziali federate e quindi selezionare Aggiungi.
Creare una connessione al servizio
Dopo aver creato l'entità servizio, usa i valori restituiti per creare una connessione al servizio di Azure Resource Manager in Azure DevOps.
Accedere all'organizzazione di Azure DevOps e quindi passare al progetto.
Selezionare > al servizio.
Selezionare Azure Resource Manager>Next e quindi selezionare Service principal (manual)>Next.
Per Environment, selezionare Azure Cloud e per livello, selezionare Subscription. Immettere quindi l'ID sottoscrizione e il nome della sottoscrizione.
Inserisci le informazioni sull'entità del servizio e quindi seleziona Verifica.
Dopo aver completato la verifica, assegnare un nome alla connessione al servizio, aggiungere una descrizione e quindi selezionare la casella di controllo Concedi autorizzazione di accesso a tutte le pipeline . Selezionare Verifica e salva.
Suggerimento
Se non riesci a verificare la connessione dell'entità servizio, concedi all'entità servizio l'accesso Reader alla sottoscrizione.
Accedere a un archivio di chiavi private da Azure DevOps
Questa sezione descrive due metodi per accedere a un insieme di credenziali privato da Azure DevOps.
Il primo metodo utilizza gruppi di variabili per collegare e mappare i segreti dal tuo Key Vault, quindi configura l'accesso in entrata consentendo gli intervalli di IP statici. Azure Pipelines usa l'indirizzo IP pubblico di Azure DevOps quando interroga un insieme di credenziali da un gruppo di variabili, quindi è necessario consentire tali intervalli IP nel firewall dell'insieme di credenziali.
Il secondo metodo aggiunge dinamicamente l'indirizzo IP dell'agente ospitato da Microsoft all'elenco degli indirizzi IP consentiti del firewall dell'insieme di credenziali all'inizio della pipeline, interroga l'insieme di credenziali e infine rimuove l'IP. Questo metodo è solo a scopo dimostrativo e non è consigliato per l'uso in produzione.
Passaggio 1: Mappare i segreti dell'insieme di credenziali del Key Vault con un gruppo di variabili
Accedere all'organizzazione di Azure DevOps e quindi passare al progetto.
Selezionare Pipeline>Libreria, e quindi selezionare + Gruppo di variabili.
Assegna un nome al gruppo di variabili e quindi attiva Collega i segreti da un Azure Key Vault come variabile.
Selezionare la connessione al servizio creata in precedenza, selezionare il tuo Key Vault, e quindi selezionare Autorizza.
In Variabili selezionare Aggiungi per aggiungere il segreto e quindi selezionare Salva.
Nota
Assicurarsi che la connessione al servizio disponga delle autorizzazioni Get e List e che al principal del servizio sia assegnato il ruolo Key Vault Secrets User nel Key Vault privato.
Passaggio 1.1: Configurare le autorizzazioni di connessione del servizio
Vai al tuo vault delle chiavi di Azure e quindi seleziona Criteri di accesso.
Selezionare Crea e in Autorizzazioni segrete aggiungere le autorizzazioni Recupera ed Elenco e quindi selezionare Avanti.
Aggiungere la connessione al servizio nella barra di ricerca, selezionarla e quindi selezionare Avanti.
Selezionare Avanti ancora una volta, rivedere le impostazioni e quindi selezionare Rivedi e crea.
Passaggio 1.2: Configurare le autorizzazioni del principale del servizio
Vai al tuo Key Vault di Azure e quindi seleziona Controllo di accesso (IAM).
Selezionare Aggiungi>Assegnazione di ruolo, e quindi selezionare la scheda Ruolo.
Selezionare "Utente dei segreti dell'insieme
delle chiavi" e quindi selezionare Avanti .Scegli Seleziona membri, aggiungi il principale del servizio e scegli Seleziona.
Seleziona Rivedi + assegna.
Accedere all'organizzazione di Azure DevOps e quindi passare al progetto.
Selezionare Pipeline>Libreria, e quindi selezionare + Gruppo di variabili.
Assegna un nome al gruppo di variabili e quindi attiva Collega i segreti da un Azure Key Vault come variabile.
Seleziona la connessione al servizio Azure che hai creato in precedenza dal menu a discesa, quindi seleziona il Key Vault.
È possibile che venga visualizzato il messaggio di errore "La connessione al servizio Azure specificata deve avere "Get, List" autorizzazioni di gestione segreti sulla Key Vault selezionata." Vai alla tua Key Vault nel portale di Azure e seleziona Controllo di accesso (IAM)>Aggiungi assegnazione di ruolo>utente di segreti del Key Vault>Avanti. Aggiungere il principale del servizio e quindi selezionare Rivedi e assegna.
Aggiungere i segreti e quindi selezionare Salva.
Passaggio 2: Configurare l'accesso in ingresso da Azure DevOps
Dopo aver configurato il gruppo di variabili, consenti l'accesso in entrata da Azure DevOps all'insieme di credenziali delle chiavi aggiungendo gli intervalli IP statici per l'area geografica della tua organizzazione.
Accedi alla tua organizzazione di Azure DevOps.
Seleziona Impostazioni organizzazione.
Passare a Panoramica per trovare la posizione geografica.
Trova gli intervalli IP V4 per area geografica.
Importante
Per le connessioni in ingresso negli Stati Uniti, assicurarsi di aggiungere gli intervalli IP per tutte le regioni degli Stati Uniti.
Configura il Key Vault per consentire l'accesso da intervalli IP statici.
Passaggio 3: Eseguire query su un vault delle chiavi privato con un gruppo di variabili
Dopo aver collegato il gruppo di variabili e configurato l'accesso in entrata, usa la pipeline seguente per interrogare il tuo insieme di credenziali privato e copiare il segreto recuperato. Azure Pipelines usa il proprio indirizzo IP pubblico per interrogare il Key Vault da un gruppo di variabili, quindi assicurarsi di aver configurato l'accesso in ingresso prima di eseguire la pipeline.
variables:
- group: mySecret-VG
steps:
- task: CmdLine@2
inputs:
script: 'echo $(mySecret) > secret.txt'
- task: CopyFiles@2
inputs:
Contents: secret.txt
targetFolder: '$(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
Metodo alternativo: autorizzare dinamicamente l'IP dell'agente ospitato da Microsoft
In questo approccio, la pipeline recupera all'avvio l'indirizzo IP dell'agente ospitato da Microsoft, lo aggiunge all'elenco degli indirizzi consentiti del firewall dell'insieme di credenziali, esegue le attività dell'insieme di credenziali e quindi rimuove l'indirizzo IP prima che la pipeline termini.
Nota
Questo approccio è solo a scopo dimostrativo. Questo approccio non è consigliato per Azure Pipelines.
- task: AzurePowerShell@5
displayName: 'Allow agent IP'
inputs:
azureSubscription: 'YOUR_SERVICE_CONNECTION_NAME'
azurePowerShellVersion: LatestVersion
ScriptType: InlineScript
Inline: |
$ip = (Invoke-WebRequest -uri "http://ifconfig.me/ip").Content
Add-AzKeyVaultNetworkRule -VaultName "YOUR_KEY_VAULT_NAME" -ResourceGroupName "YOUR_RESOURCE_GROUP_NAME" -IpAddressRange $ip
echo "##vso[task.setvariable variable=agentIP]ip"
- task: AzureKeyVault@2
inputs:
azureSubscription: 'YOUR_SERVICE_CONNECTION_NAME'
KeyVaultName: 'YOUR_KEY_VAULT_NAME'
SecretsFilter: '*'
RunAsPreJob: false
- task: AzurePowerShell@5
displayName: 'Remove agent IP'
inputs:
azureSubscription: 'YOUR_SERVICE_CONNECTION_NAME'
azurePowerShellVersion: LatestVersion
ScriptType: InlineScript
Inline: |
$ipRange = $env:agentIP + "/32"
Remove-AzKeyVaultNetworkRule -VaultName "YOUR_KEY_VAULT_NAME" -IpAddressRange $ipRange
condition: succeededOrFailed()
Importante
Assicurati che il principale del servizio utilizzato per accedere al key vault nella tua pipeline possieda il ruolo di Collaboratore di Key Vault all'interno del controllo di accesso (IAM) del key vault.
Accedere a un archivio di chiavi privato da un agente autogestito
Per accedere a un archivio privato di chiavi tramite un agente di Azure Pipelines, utilizzare un agente self-hosted (Windows, Linux o Mac) oppure agenti di set di scalabilità di macchine virtuali. Gli agenti ospitati da Microsoft, come altri servizi di calcolo generici, non sono inclusi nell'elenco dei servizi attendibili di Key Vault.
Per stabilire la connettività con il tuo insieme di credenziali delle chiavi privato, configura un endpoint privato per l'accesso line-of-sight. Questo endpoint deve essere instradabile e il relativo nome DNS privato deve poter essere risolto dall'agente self-hosted della pipeline.
Passaggio 1: Configurare l'accesso in entrata da un agente ospitato in locale
Seguire le istruzioni per creare una rete virtuale.
Nel portale Azure, utilizza la barra di ricerca nella parte superiore della pagina per trovare il tuo servizio Azure Key Vault.
Selezionare l'insieme di credenziali delle chiavi e quindi passare a Impostazioni>rete.
Selezionare Connessioni endpoint privato e quindi selezionare Crea per creare un nuovo endpoint privato.
Selezionare il gruppo di risorse che ospita la rete virtuale creata in precedenza. Immettere un nome e un nome di interfaccia di rete per l'istanza e assicurarsi di selezionare la stessa area della rete virtuale creata in precedenza. Seleziona Avanti.
Per il metodo di connessione, selezionare Connetti a una risorsa di Azure nella mia directory. Per Tipo di risorsa scegliere Microsoft. KeyVault/vaults dal menu a discesa. Selezionare la risorsa dal menu a discesa. La sotto-risorsa di destinazione viene popolata automaticamente con il valore vault. Seleziona Avanti.
Nella scheda Rete virtuale selezionare il virtual network e la subnet creati in precedenza e lasciare il resto dei campi come predefinito. Seleziona Avanti.
Accettare le impostazioni predefinite nelle schede DNS e Tag . Nella scheda Rivedi e crea selezionare Crea.
Dopo aver distribuito la risorsa, passare al Key Vault e selezionare Impostazioni>Rete>Connessioni endpoint private. L'endpoint privato deve essere elencato con stato Connessioneapprovato. Se si collega a una risorsa Azure in una directory diversa, è necessario attendere che il proprietario della risorsa approvi la richiesta di connessione.
Passaggio 2: Consentire la rete virtuale
Dopo aver configurato l'endpoint privato, consenti alla rete virtuale che ospita l'agente ospitato autonomamente nelle impostazioni del firewall dell'insieme di credenziali.
Vai al portale di Azure, quindi individua il tuo Azure Key Vault.
Selezionare Impostazioni>Rete, e assicurarsi di essere nella scheda Firewall e reti virtuali.
Selezionare Aggiungi una rete>virtuale Aggiungi reti virtuali esistenti.
Selezionare la sottoscrizione dal menu a discesa, selezionare la rete virtuale creata in precedenza e quindi selezionare le subnet.
Selezionare Aggiungi e quindi scorrere fino alla fine della pagina e selezionare Applica per salvare le modifiche.
Passaggio 3: Eseguire query su un insieme di credenziali delle chiavi privato da un agente self-hosted
Con la rete virtuale abilitata, utilizza la pipeline seguente per interrogare il Key Vault privato tramite il gruppo di variabili collegato da un agente ospitato autonomamente:
pool: Self-hosted-pool
variables:
group: mySecret-VG
steps:
- task: CmdLine@2
inputs:
script: 'echo $(mySecret) > secret.txt'
- task: CopyFiles@2
inputs:
Contents: secret.txt
targetFolder: '$(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
Se non si vuole concedere ad Azure DevOps l'accesso in entrata all'insieme di credenziali delle chiavi privato, usare l'attività AzureKeyVault per interrogare direttamente l'insieme di credenziali delle chiavi. In questo caso, verificare che la rete virtuale che ospita l'agente ospitato autonomamente sia consentita nelle impostazioni del firewall dell'insieme di credenziali delle chiavi.
pool: Self-hosted-pool
steps:
- task: AzureKeyVault@2
inputs:
azureSubscription: '$(SERVICE_CONNECTION_NAME)'
keyVaultName: $(KEY_VAULT_NAME)
SecretsFilter: '*'
- task: CmdLine@2
inputs:
script: 'echo $(mySecret) > secret.txt'
- task: CopyFiles@2
inputs:
Contents: secret.txt
targetFolder: '$(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
Risoluzione dei problemi
Usa le linee guida seguenti per risolvere gli errori comuni di accesso a Key Vault:
Public network access is disabled and request is not from a trusted service nor via an approved private link.Questo errore indica che l'accesso pubblico è disabilitato, ma non sono configurate né un endpoint privato né le eccezioni del firewall necessarie. Seguire la procedura descritta in Configurare l'accesso in ingresso da un agente self-hosted o Configurare l'accesso in ingresso da Azure DevOps in base allo scenario in uso per configurare l'accesso all'insieme di credenziali delle chiavi private.
Request was not allowed by NSP rules and the client address is not authorized and caller was ignored because bypass is set to None Client address: <x.x.x.x>Questo errore indica che l'accesso pubblico è disabilitato, Consenti ai servizi Microsoft attendibili di ignorare questo firewall non è abilitato e l'indirizzo IP del client non è incluso nell'elenco degli indirizzi IP consentiti del firewall dell'insieme di credenziali. Nel portale di Azure, vai al tuo insieme di credenziali delle chiavi, seleziona Settings>Networking e aggiungi l'indirizzo IP del client all'elenco degli indirizzi consentiti del firewall.
Error: Client address is not authorized and caller is not a trusted service.Assicurarsi che gli intervalli IPv4 dell'area geografica vengano aggiunti all'elenco di elementi consentiti dell'insieme di credenziali delle chiavi. Per informazioni dettagliate, vedere Configurare l'accesso in ingresso da Azure DevOps.
In alternativa, vedi Consentire dinamicamente l'IP dell'agente ospitato da Microsoft per aggiungere l'IP del client al firewall dell'insieme di credenziali delle chiavi in fase di esecuzione.