Gestione di segreti e certificati con Azure Key Vault

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:

  1. Abbonamento Azure attivo: un abbonamento Azure per creare e gestire risorse.
  2. 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.
  3. CLI di Azure o Azure PowerShell: strumenti da riga di comando installati e configurati per interagire con Azure.
  4. 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.

  1. Apri il tuo terminale o PowerShell e accedi ad Azure: "bash." az login ```
  2. Crea un gruppo di risorse (se non ne hai già uno): "bash." az group create --name RG-KeyVault-Artigos --location eastus ```

  3. 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.

  1. 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!" ```

  2. 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.

  1. 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)" ```

  2. 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).

  1. 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".
  2. 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.

  1. 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 ```
  2. 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 ```

  3. Concedere all'identità gestita del servizio app l'autorizzazione per accedere al segreto in Key Vault. Utilizza il principalId ottenuto 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.
  4. 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/)" ```

  5. 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

  1. 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.
  2. 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

  1. 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.

  1. Nel portale di Azure passare al Key Vault (kv-articles-seguranca-01).
  2. Nel riquadro di navigazione a sinistra, seleziona Registri attività.
  3. 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