Gestione di segreti e certificati con Azure Key Vault
14/08/2024
Questo articolo tecnico ed educativo ha lo scopo di guidare analisti della sicurezza, amministratori IT e ingegneri di sistema nell'uso di Azure Key Vault per gestire in modo sicuro segreti (come password, chiavi API, stringhe di connessione) e certificati (SSL/TLS). Azure Key Vault è un servizio cloud che fornisce una soluzione centralizzata e sicura per l'archiviazione e l'accesso a questi elementi critici, eliminando la necessità di incorporarli direttamente nel codice o nei file di configurazione, che rappresenta una pratica di sicurezza inadeguata [1].
Introduzione
Nello sviluppo e nel funzionamento delle applicazioni moderne, la gestione dei segreti e dei certificati rappresenta una sfida costante. Le credenziali del database, le chiavi API di servizi di terze parti, le chiavi di crittografia e i certificati SSL/TLS sono risorse sensibili che, se compromesse, potrebbero portare a gravi violazioni dei dati. Memorizzarli in modo non sicuro, ad esempio in file di testo, variabili di ambiente o direttamente nel codice sorgente, rappresenta un rischio significativo. Azure Key Vault è stato progettato per risolvere questi problemi fornendo un repository sicuro basato su hardware (HSM) per proteggere queste risorse, controllando rigorosamente l'accesso e semplificando la gestione del ciclo di vita [2].
Questa guida illustra la creazione di un Azure Key Vault, l'aggiunta e il recupero di segreti e certificati, la configurazione dei criteri di accesso e l'integrazione con altri servizi di Azure come Servizio app di Azure. Verranno fornite istruzioni dettagliate, esempi di comandi dell'interfaccia della riga di comando di Azure e metodi di convalida in modo che il lettore possa implementare una gestione sicura di segreti e certificati, rafforzando il livello di sicurezza delle proprie applicazioni e dell'infrastruttura cloud.
Perché Azure Key Vault è fondamentale?
- Archiviazione sicura: protegge i segreti e le chiavi di crittografia utilizzando moduli di sicurezza hardware (HSM) convalidati FIPS 140-2 Livello 2.
- Controllo degli accessi centralizzato: consente di gestire le autorizzazioni di accesso a segreti e certificati a livello granulare utilizzando il controllo degli accessi in base al ruolo (RBAC) di Azure o i criteri di accesso di Key Vault.
- Gestione del ciclo di vita: facilita la rotazione di segreti e certificati, la scadenza automatica e la notifica degli eventi.
- Riduzione del rischio: elimina la necessità di archiviare le credenziali nel codice o nei file di configurazione, riducendo al minimo il rischio di perdite.
- Monitoraggio e controllo: registra tutte le operazioni eseguite in Key Vault, fornendo audit trail per indagini sulla conformità e sulla sicurezza.
- Integrazione semplificata: si integra facilmente con altri servizi di Azure, come Servizio app di Azure, Funzioni di Azure, Macchine virtuali di Azure e Azure DevOps.
Prerequisiti
Per usare Azure Key Vault, saranno necessari i seguenti elementi:
- Abbonamento Azure attivo: un abbonamento Azure per creare e gestire risorse.
- Accesso amministrativo: un account con il ruolo "Proprietario" o "Collaboratore" nella sottoscrizione di Azure oppure un ruolo personalizzato con autorizzazioni per creare e gestire Key Vault.
- CLI di Azure o Azure PowerShell: strumenti da riga di comando installati e configurati per interagire con Azure.
- Facoltativo: Visual Studio Code: per test di sviluppo e integrazione.
Passo dopo passo: gestione di segreti e certificati con Azure Key Vault
Creiamo un Key Vault, aggiungiamo un segreto e un certificato e configuriamo l'accesso.
1. Creazione di un Azure Key Vault
Creiamo un Key Vault usando l'interfaccia della riga di comando di Azure. È inoltre possibile utilizzare il portale di Azure.
- Apri il tuo terminale o PowerShell e accedi ad Azure: "bash." az login ```
-
Crea un gruppo di risorse (se non ne hai già uno): "bash." az group create --name RG-KeyVault-Artigos --location eastus ```
-
Creare l'insieme di credenziali delle chiavi di Azure. Scegliere un nome univoco a livello globale per il Key Vault. "bash." az keyvault create --name kv-artigos-seguranca-01 --resource-group RG-KeyVault-Artigos --location eastus --enabled-for-template-deployment true ```
--enabled-for-template-deployment true: consente l'utilizzo di Key Vault per le distribuzioni di modelli, utile per l'automazione.
2. Aggiunta di un segreto a Key Vault
Aggiungiamo una password del database come segretoIL.
-
Aggiungi un segreto chiamato "DatabasePassword" con un valore di esempio: "bash." az keyvault secret set --vault-name kv-artigos-seguranca-01 --name DatabasePassword --value "S3cur3P@ssw0rd!" ```
-
Recupera il segreto per verificare che sia stato archiviato correttamente: "bash." az keyvault secret show --vault-name kv-artigos-seguranca-01 --name DatabasePassword --query value -o tsv ```
3. Aggiunta di un certificato a Key Vault
Aggiungiamo un certificato autofirmato a scopo dimostrativo. In produzione, utilizzeresti i certificati di una CA attendibile.
-
Creare un certificato autofirmato in Key Vault: "bash." az keyvault certificate create --vault-name kv-artigos-seguranca-01 --name MyWebAppCert --policy "$(az keyvault certificate get-default-policy)" ```
-
Controlla i dettagli del certificato: "bash." az keyvault certificato mostra --vault-name kv-artigos-seguranca-01 --name MyWebAppCert ```
4. Configurazione delle politiche di accesso
Per consentire alle applicazioni o agli utenti di accedere a segreti e certificati, è necessario configurare le policy di accesso. Usiamo il controllo degli accessi in base al ruolo di Azure (RBAC).
- Ottieni l'"ID oggetto" dell'applicazione o dell'utente che avrà bisogno dell'accesso. Per un'applicazione (entità servizio), è possibile ottenerla dopo averla registrata con Azure AD. Per un utente, utilizzare "az ad user show --id
--query id -o tsv". - Assegnare un ruolo al Key Vault. Ad esempio, per consentire a un'applicazione di leggere i segreti:
"bash."
# Esempio: assegnare il ruolo "Utente Key Vault Secrets" a un'entità servizio
az assegnazione del ruolo create --role "Utente Key Vault Secrets" --assignee-object-id
--scope /subscriptions/ /resourceGroups/RG-KeyVault-Artigos/providers/Microsoft.KeyVault/vaults/kv-artigos-seguranca-01 ``` - Suggerimento: per i certificati, è possibile utilizzare la funzione "Utente certificato Key Vault".
5. Integrazione con un servizio app di Azure (esempio)
Dimostriamo come un'applicazione può utilizzare un segreto da Key Vault.
- Crea un servizio app di Azure (se non ne hai già uno): "bash." az appservice plan create --name AppServicePlan-Artigos --resource-group RG-KeyVault-Artigos --sku B1 --is-linux az webapp create --resource-group RG-KeyVault-Artigos --plan AppServicePlan-Artigos --name webapp-artigos-seguranca-01 ```
-
Abilitare l'identità gestita per il servizio app. Ciò consente al servizio app di eseguire l'autenticazione in Azure Key Vault senza credenziali esplicite. "bash." az identità webapp assegnata --resource-group RG-KeyVault-Artigos --name webapp-artigos-seguranca-01 ```
-
Concedere all'identità gestita del servizio app l'autorizzazione per accedere al segreto in Key Vault. Utilizza il
principalIdottenuto nel passaggio precedente. "bash." az keyvault set-policy --name kv-artigos-seguranca-01 --object-id--secret-permissions get list ``` - Suggerimento: per utilizzare RBAC, assegnare il ruolo "Utente Key Vault Secrets" a "principalId" dell'identità gestita.
-
Configurare un riferimento segreto nel servizio app. Ciò consente all'applicazione di accedere al segreto come variabile di ambiente. "bash." az webapp config appsettings set --resource-group RG-KeyVault-Artigos --name webapp-artigos-seguranca-01 --settings DatabasePassword="@Microsoft.KeyVault(SecretUri=https://kv-artigos-seguranca-01.vault.azure.net/secrets/DatabasePassword/)" ```
-
Ora l'applicazione (ad esempio ASP.NET Core, Node.js) può leggere il segreto "DatabasePassword" come una normale variabile di ambiente e il Servizio app di Azure si occuperà di recuperarlo da Key Vault in modo sicuro.
Convalida e test
La convalida della gestione dei segreti e dei certificati implica la verifica che l'accesso sia concesso solo alle entità autorizzate e che i segreti possano essere recuperati correttamente.
1. Testare l'accesso ai segreti tramite l'interfaccia della riga di comando di Azure
-
Prova ad accedere al segreto con un account che non dispone di permessi: "bash." az login # Accedi con un account senza autorizzazioni az keyvault secret show --vault-name kv-artigos-seguranca-01 --name DatabasePassword --query value -o tsv ```
- Risultato previsto: il comando dovrebbe fallire con un errore
AuthorizationFailed.
- Risultato previsto: il comando dovrebbe fallire con un errore
-
Prova ad accedere al segreto con un account che dispone delle autorizzazioni (ad esempio l'account che ha creato Key Vault o l'identità gestita del servizio app se si esegue il test dall'interno dell'applicazione). "bash." az login # Accedi con un account con autorizzazioni az keyvault secret show --vault-name kv-artigos-seguranca-01 --name DatabasePassword --query value -o tsv ```
- Risultato previsto: il comando deve restituire il valore segreto.
2. Testare l'accesso al certificato
- Verificare che il certificato possa essere elencato e recuperato da un'entità autorizzata.
"bash."
elenco certificati az keyvault --vault-name kv-artigos-seguranca-01
az keyvault certificato mostra --vault-name kv-artigos-seguranca-01 --name MyWebAppCert
```
- Risultato previsto: i comandi dovrebbero restituire i dettagli del certificato.
3. Controllo dei registri di controllo di Key Vault
Tutte le operazioni in Key Vault vengono registrate e possono essere controllate.
- Nel portale di Azure passare al Key Vault (
kv-articles-seguranca-01). - Nel riquadro di navigazione a sinistra, seleziona Registri attività.
- Verrà visualizzato un registro di tutte le operazioni eseguite, inclusa la creazione di segreti, certificati e tentativi di accesso.
Suggerimenti e best practice per la sicurezza
- Principio del privilegio minimo: concedere solo le autorizzazioni necessarie (ottieni, elenca, imposta, elimina) a segreti e certificati. Evitare di concedere permessi eccessivi.
- Rotazione regolare dei segreti: implementa un processo per ruotare regolarmente i segreti e i certificati per ridurre il rischio di compromissione.
- Identità gestite: usare identità gestite per le risorse di Azure (identità gestite) quando possibile per eseguire l'autenticazione in Key Vault, eliminando la necessità di gestire le credenziali nel codice.
- Criteri di accesso granulari: usare i criteri di accesso Key Vault o RBAC di Azure per controllare chi può accedere a cosa. Preferisci RBAC per un controllo più preciso.
- Monitoraggio e avvisi: configura avvisi per attività sospette in Key Vault, come tentativi di accesso non riusciti o eliminazioni segrete.
- Protezione dall'eliminazione temporanea e dall'eliminazione: abilita la protezione dall'eliminazione temporanea e dall'eliminazione in Key Vault per impedire la perdita accidentale o dannosa di segreti e certificati.
- Backup regolare: sebbene Key Vault sia altamente disponibile, valuta la possibilità di eseguire il backup dei segreti e dei certificati, in particolare per gli scenari di ripristino di emergenza.
- Segreti in scadenza: imposta le date di scadenza per segreti e certificati per forzare la rotazione ed evitare di utilizzare vecchie credenziali.
Risoluzione dei problemi comuni
- Errore di autorizzazione (403 Forbidden): controllare i criteri di accesso di Key Vault o le assegnazioni di ruolo RBAC per l'entità che tenta di accedere. Assicurati che venga utilizzato l'"ID oggetto" o il "principalId" corretto.
- Segreto/certificato non trovato: controllare il nome del segreto/certificato e il nome del Key Vault. Assicurati che il segreto/certificato esista e non sia stato eliminato o scaduto.
- Problemi con le identità gestite: verificare che l'identità gestita sia stata abilitata per la risorsa di Azure e che siano state concesse le autorizzazioni corrette in Key Vault.
- Latenza nel recupero dei segreti: in alcuni casi, potrebbe verificarsi una piccola latenza nel recupero dei segreti. Assicurati che la tua applicazione lo gestisca in modo asincrono.
- Errori di connettività: controlla le impostazioni di rete della tua applicazione o macchina virtuale. Assicurarsi che non siano presenti firewall o gruppi di sicurezza di rete che bloccano l'accesso a Key Vault.
Conclusione
Azure Key Vault è un servizio fondamentale per qualsiasi organizzazione che desidera proteggere le proprie risorse digitali più sensibili nel cloud. Centralizzando la gestione dei segreti e dei certificati in un repository sicuro e altamente disponibile, semplifica la conformità, riduce il rischio di violazioni dei dati e migliora il livello di sicurezza generale. L'implementazione efficace di Azure Key Vault, combinata con le best practice di sicurezza e automazione, consente agli sviluppatori e agli operatori di concentrarsi sull'innovazione, sapendo che le proprie credenziali e chiavi sono protette. Con questa guida pratica, i professionisti della sicurezza potranno utilizzare Azure Key Vault per gestire segreti e certificati in modo sicuro ed efficiente, garantendo l'integrità e la riservatezza delle proprie applicazioni e dati in Azure.
Riferimenti:
[1]Microsoft Impara. Che cos'è Azure Key Vault?. Disponibile all'indirizzo: https://learn.microsoft.com/pt-br/azure/key-vault/general/overview [2]Microsoft Learn. Best practice per la gestione dei segreti in Azure Key Vault. Disponibile all'indirizzo: https://learn.microsoft.com/pt-br/azure/key-vault/secrets/secrets-best-practices [3]Microsoft Learn. Informazioni sui certificati Azure Key Vault. Disponibile all'indirizzo: https://learn.microsoft.com/pt-br/azure/key-vault/certificates/about-certificates