Proteggere l'accesso ai moduli di protezione hardware gestiti

Il modulo di protezione hardware gestito di Azure Key Vault è un servizio cloud che consente di proteggere le chiavi di crittografia. Poiché questi dati sono riservati e importanti per l'azienda, è necessario proteggere i moduli di protezione hardware gestiti consentendo l'accesso solo ad applicazioni e utenti autorizzati. Questo articolo offre una panoramica del modello di controllo di accesso del modulo di protezione hardware gestito. Verranno illustrate l'autenticazione e l'autorizzazione e sarà descritto come proteggere l'accesso ai moduli di protezione hardware gestiti.

Questa esercitazione illustra un semplice esempio che mostra come ottenere la separazione dei compiti e il controllo degli accessi usando il controllo degli accessi in base al ruolo di Azure e il controllo degli accessi in base al ruolo del modulo di protezione hardware gestito locale. Per informazioni sul modello di controllo di accesso del modulo di protezione hardware gestito, vedere Controllo di accesso del modulo di protezione hardware gestito.

Prerequisiti

Per seguire la procedura descritta in questo articolo, sono necessari gli elementi seguenti:

Azure Cloud Shell

Azure Cloud Shell è un ambiente di shell interattivo ospitato in Azure e usato tramite il browser. È possibile usare Bash o PowerShell con Cloud Shell per usare i servizi di Azure. È possibile usare i comandi preinstallati di Cloud Shell per eseguire il codice in questo articolo, senza dover installare alcun elemento nell'ambiente locale.

Per avviare Azure Cloud Shell:

Opzione Esempio/Collegamento
Selezionare Prova nell'angolo superiore destro di un codice o di un blocco di comandi. Selezionando Prova non viene copiato automaticamente il codice o il comando in Cloud Shell. Screenshot that shows an example of Try It for Azure Cloud Shell.
Passare a https://shell.azure.com o selezionare il pulsante Avvia Cloud Shell per aprire Cloud Shell nel browser. Button to launch Azure Cloud Shell.
Selezionare il pulsante Cloud Shell nella barra dei menu nell'angolo in alto a destra del portale di Azure. Screenshot that shows the Cloud Shell button in the Azure portal

Per usare Azure Cloud Shell:

  1. Avviare Cloud Shell.

  2. Selezionare il pulsante Copia in un blocco di codice (o blocco di comandi) per copiare il codice o il comando.

  3. Incollare il codice o il comando nella sessione di Cloud Shell selezionando CTRL+MAIUSC+V in Windows e Linux oppure selezionando CMD+MAIUSC+V in macOS.

  4. Selezionare INVIO per eseguire il codice o il comando.

Accedere ad Azure

Per accedere ad Azure usando l'interfaccia della riga di comando è possibile digitare:

az login

Per altre informazioni sulle opzioni di accesso con l'interfaccia della riga di comando, vedere Accedere con l'interfaccia della riga di comando di Azure

Esempio

In questo esempio viene sviluppata un'applicazione che usa una chiave RSA a 2048 bit per le operazioni di firma. L'applicazione viene eseguita in una macchina virtuale di Azure con un'identità gestita. La chiave RSA usata per la firma è archiviata nel modulo di protezione hardware gestito.

Sono stati identificati i ruoli seguenti per specificare chi può gestire, distribuire e controllare l'applicazione:

  • Team di sicurezza: personale IT dall'ufficio del CSO (Chief Security Officer) o collaboratori simili. Il team responsabile della sicurezza si occupa della protezione delle chiavi. Chiavi RSA o EC per la firma e chiavi RSA o AES per la crittografia dei dati.
  • Sviluppatori e operatori: il personale che sviluppa l'applicazione e lo distribuisce in Azure. I membri di questo team non fanno parte del personale responsabile della sicurezza. Non devono avere accesso ai dati sensibili, come le chiavi RSA. Solo l'applicazione da loro distribuita deve avere accesso a questi dati sensibili.
  • Revisori: questo ruolo è destinato ai collaboratori che non sono membri del personale IT generale o dello sviluppo. Queste persone verificano l'uso e la gestione di certificati, chiavi e segreti per garantire la conformità agli standard di sicurezza.

C'è un altro ruolo che non rientra nell'ambito dell'applicazione: l'amministratore della sottoscrizione (o del gruppo di risorse). L'amministratore della sottoscrizione configura le autorizzazioni di accesso iniziali per il team responsabile della sicurezza. L'accesso al team responsabile della sicurezza viene concesso tramite un gruppo di risorse che contiene le risorse necessarie per l'applicazione.

È necessario autorizzare le operazioni seguenti per i ruoli:

Team responsabile della sicurezza

  • Creare il modulo di protezione hardware gestito.
  • Scaricare il dominio di sicurezza del modulo di protezione hardware gestito (per il ripristino di emergenza)
  • Abilitare la registrazione.
  • Generare o importare le chiavi
  • Creare i backup del modulo di protezione hardware gestito per il ripristino di emergenza.
  • Impostare il controllo degli accessi in base al ruolo locale del modulo di protezione hardware gestito per concedere a utenti e applicazioni le autorizzazioni per eseguire operazioni specifiche.
  • Aggiornare periodicamente le chiavi.

Sviluppatori e operatori

  • Ottenere dal team di sicurezza un riferimento (URI della chiave) usato dalla chiave RSA per la firma.
  • Sviluppare e distribuire l'applicazione che accede alla chiave a livello di codice.

Revisori

  • Esaminare le date di scadenza delle chiavi per verificare che siano aggiornate
  • Monitorare le assegnazioni di ruolo per garantire che le chiavi siano accessibili solo a utenti o applicazioni autorizzate
  • Esaminare i log del modulo di protezione hardware gestito per verificare che le chiavi siano usate in modo appropriato e conformemente agli standard di sicurezza dei dati.

La tabella seguente riepiloga le assegnazioni di ruolo per i team e le risorse che accedono al modulo di protezione hardware gestito.

Ruolo Ruolo del piano di gestione Ruolo del piano dati
Team di sicurezza Managed HSM Contributor Managed HSM Administrator
Sviluppatori e operatori None None
Revisori None Managed HSM Crypto Auditor
Identità gestita della macchina virtuale usata dall'applicazione None Managed HSM Crypto User
Identità gestita dell'account di archiviazione usato dall'applicazione None Managed HSM Service Encryption

Oltre alle autorizzazioni per il modulo di protezione hardware gestito, i tre i ruoli dei team devono poter accedere ad altre risorse. Per distribuire le macchine virtuali (o la funzionalità App Web di Servizio app di Azure), sviluppatori e operatori necessitano dell'accesso Contributor a tali tipi di risorse. I revisori necessitano dell'accesso in lettura all'account di archiviazione in cui vengono archiviati i log del modulo di protezione hardware gestito.

Per assegnare ruoli del piano di gestione (controllo degli accessi in base al ruolo di Azure), è possibile usare il portale di Azure o qualsiasi altra interfaccia di gestione, ad esempio l'interfaccia della riga di comando di Azure o Azure PowerShell. Per assegnare i ruoli del piano dati del modulo di protezione hardware gestito, è necessario usare l'interfaccia della riga di comando di Azure. Per altre informazioni sui ruoli del piano di gestione, vedere Ruoli predefiniti di Azure. Per altre informazioni sui ruoli del piano dati del modulo di protezione hardware gestito, vedere Ruoli predefiniti controllo degli accessi in base al ruolo locale per il modulo di protezione hardware gestito.

I frammenti di codice dell'interfaccia della riga di comando di Azure in questa sezione vengono creati in base ai presupposti seguenti:

  • L'amministratore di Microsoft Entra ha creato gruppi di sicurezza per rappresentare i tre ruoli: Contoso Security Team, Contoso App DevOps e Contoso App Auditors. L'amministratore ha aggiunto gli utenti ai rispettivi gruppi.
  • Tutte le risorse si trovano nel gruppo di risorse ContosoAppRG.
  • I log del modulo di protezione hardware gestito sono archiviati nell'account di archiviazione contosologstorage.
  • Il modulo di protezione hardware gestito ContosoKeyVault e l'account di archiviazione contosologstorage si trovano nella stessa località di Azure.

L'amministratore della sottoscrizione assegna il ruolo Managed HSM Contributor al team responsabile della sicurezza. Questo ruolo consente al team responsabile della sicurezza di gestire i moduli di protezione hardware gestiti esistenti e crearne di nuovi. Se sono presenti moduli di protezione hardware gestiti esistenti, per poterli gestire sarà necessario assegnare il ruolo "Managed HSM Administrator".

# This role assignment allows Contoso Security Team to create new Managed HSMs
az role assignment create --assignee-object-id $(az ad group show -g 'Contoso Security Team' --query 'id' -o tsv) --assignee-principal-type Group --role "Managed HSM Contributor"

# This role assignment allows Contoso Security Team to become administrator of existing managed HSM
az keyvault role assignment create  --hsm-name ContosoMHSM --assignee $(az ad group show -g 'Contoso Security Team' --query 'id' -o tsv) --scope / --role "Managed HSM Administrator"

Il team responsabile configura la registrazione e assegna i ruoli ai revisori e all'applicazione per le macchine virtuali.

# Enable logging
hsmresource=$(az keyvault show --hsm-name ContosoMHSM --query id -o tsv)
storageresource=$(az storage account show --name contosologstorage --query id -o tsv)
az monitor diagnostic-settings create --name MHSM-Diagnostics --resource $hsmresource --logs    '[{"category": "AuditEvent","enabled": true}]' --storage-account $storageresource

# Assign the "Crypto Auditor" role to Contoso App Auditors group. It only allows them to read.
az keyvault role assignment create  --hsm-name ContosoMHSM --assignee $(az ad group show -g 'Contoso App Auditors' --query 'objectId' -o tsv) --scope / --role "Managed HSM Crypto Auditor"

# Grant the "Crypto User" role to the VM's managed identity. It allows to create and use keys. 
# However it cannot permanently delete (purge) keys
az keyvault role assignment create  --hsm-name ContosoMHSM --assignee $(az vm identity show --name "vmname" --resource-group "ContosoAppRG" --query objectId -o tsv) --scope / --role "Managed HSM Crypto Auditor"

# Assign "Managed HSM Crypto Service Encryption User" role to the Storage account ID
storage_account_principal=$(az storage account show --id $storageresource --query identity.principalId -o tsv)
# (if no identity exists), then assign a new one
[ "$storage_account_principal" ] || storage_account_principal=$(az storage account update --assign-identity --id $storageresource)

az keyvault role assignment create --hsm-name ContosoMHSM --role "Managed HSM Crypto Service Encryption User" --assignee $storage_account_principal

Questa esercitazione mostra solo le azioni rilevanti per il controllo di accesso nella maggior parte dei casi. Altre azioni e operazioni correlate alla distribuzione di applicazioni nella macchina virtuale, all'attivazione della crittografia con la chiave gestita dal cliente per un account di archiviazione, alla creazione di moduli di protezione hardware gestiti non vengono trattate in questa sede allo scopo di incentrare l'esempio sul controllo di accesso e sulla gestione dei ruoli.

Questo esempio illustra uno scenario semplice. Gli scenari reali possono essere più complessi. È possibile modificare le autorizzazioni per l'insieme di credenziali delle chiavi in base alle esigenze. In questo esempio si presuppone che il team responsabile della sicurezza fornisca i riferimenti a chiavi e segreti (URI e identificazioni personali) usati dal personale DevOps nelle applicazioni. Sviluppatori e operatori non necessitano di alcun accesso al piano dati. In questo articolo è stato analizzato in particolare come proteggere l'insieme di credenziali delle chiavi. Tenere presenti considerazioni simili per la protezione di macchine virtuali, account di archiviazione e altre risorse di Azure.

Risorse

Passaggi successivi

Per un'esercitazione introduttiva per gli amministratori, vedere Che cos'è il modulo di protezione hardware gestito?.

Per altre informazioni sulla registrazione dell'utilizzo per il modulo di protezione hardware gestito, vedere Registrazione del modulo di protezione hardware gestito.