Condividi tramite


Automatizzare la rotazione di un segreto per le risorse con due set di credenziali di autenticazione

Il modo migliore per eseguire l'autenticazione ai servizi di Azure consiste nell'usare un'identità gestita, ma esistono alcuni scenari in cui non è un'opzione. In questi casi vengono usate chiavi di accesso o password. È consigliabile ruotare frequentemente le chiavi di accesso e le password.

Questa esercitazione illustra come automatizzare la rotazione periodica dei segreti per database e servizi che usano due set di credenziali di autenticazione. Per una panoramica completa dei concetti e dei vantaggi dell'autorotazione in diversi tipi di asset, vedere Informazioni sull'autorotazione in Azure Key Vault.

In particolare, questa esercitazione illustra come ruotare le chiavi dell'account di archiviazione di Azure archiviate in Azure Key Vault come segreti. Si userà una funzione attivata dalla notifica di Griglia di eventi di Azure.

Annotazioni

Per i servizi dell'account di archiviazione, è consigliabile usare Microsoft Entra ID per autorizzare le richieste. Per ulteriori informazioni, vedere Autorizzare l'accesso ai BLOB usando Microsoft Entra ID. Esistono servizi che richiedono stringhe di connessione dell'account di archiviazione con chiavi di accesso. Per questo scenario, è consigliabile questa soluzione.

Ecco la soluzione di rotazione descritta in questa esercitazione:

Diagramma che mostra la soluzione di rotazione.

In questa soluzione Azure Key Vault archivia le singole chiavi di accesso dell'account di archiviazione come versioni dello stesso segreto, alternando tra la chiave primaria e quella secondaria nelle versioni successive. Quando una chiave di accesso viene archiviata nella versione più recente del segreto, la chiave alternativa viene rigenerata e aggiunta a Key Vault come nuova versione più recente del segreto. La soluzione fornisce l'intero ciclo di rotazione dell'applicazione per l'aggiornamento alla chiave rigenerata più recente.

  1. Trenta giorni prima della data di scadenza di un segreto, Key Vault pubblica l'evento di prossima scadenza su Event Grid.
  2. Event Grid controlla le sottoscrizioni di eventi e usa HTTP POST per chiamare l'endpoint dell'applicazione di funzione sottoscritto all'evento.
  3. L'app per le funzioni identifica la chiave alternativa (non quella più recente) e chiama l'account di archiviazione per rigenerarlo.
  4. L'app per le funzioni aggiunge la nuova chiave rigenerata ad Azure Key Vault come nuova versione del segreto.

Prerequisiti

  • Una sottoscrizione di Azure. Crearne uno gratuitamente.
  • Azure Cloud Shell. Questa esercitazione usa il portale Cloud Shell con PowerShell env
  • Azure Key Vault.
  • Due account di archiviazione di Azure.

Annotazioni

La rotazione della chiave dell'account di archiviazione condivisa revoca la firma di accesso condiviso (SAS) a livello di account generata in base a tale chiave. Dopo la rotazione delle chiavi dell'account di archiviazione, è necessario rigenerare i token SAS a livello di account per evitare interruzioni delle applicazioni.

Puoi usare questo collegamento alla distribuzione se non hai un Key Vault esistente e account di archiviazione già presenti:

Collegamento etichettato

  1. In Gruppo di risorse selezionare Crea nuovo. Assegnare un nome al gruppo vault rotation e quindi selezionare OK.

  2. Selezionare Rivedi e crea.

  3. Fare clic su Crea.

    Screenshot che mostra come creare un gruppo di risorse.

A questo punto avrai un key vault e due account di archiviazione. È possibile verificare questa configurazione nell'interfaccia della riga di comando di Azure o in Azure PowerShell eseguendo questo comando:

az resource list -o table -g vaultrotation

Il risultato sarà simile all'output seguente:

Name                     ResourceGroup         Location    Type                               Status
-----------------------  --------------------  ----------  ---------------------------------  --------
vaultrotation-kv         vaultrotation      westus      Microsoft.KeyVault/vaults
vaultrotationstorage     vaultrotation      westus      Microsoft.Storage/storageAccounts
vaultrotationstorage2    vaultrotation      westus      Microsoft.Storage/storageAccounts

Creare e distribuire la funzione di rotazione delle chiavi

Si creerà quindi un'app per le funzioni con un'identità gestita dal sistema, oltre ad altri componenti necessari. Implementerai anche la funzione di rotazione per le chiavi dell'account di archiviazione.

La funzione di rotazione dell'applicazione richiede i seguenti componenti e configurazione:

  • Un piano di servizio app di Azure
  • Un account di archiviazione per gestire i trigger dell'app per le funzioni
  • Criteri di accesso per accedere ai segreti in Key Vault
  • Ruolo di Operatore delle Chiavi dell'Account di Archiviazione assegnato all'applicazione delle funzioni in modo che possa accedere alle chiavi di accesso dell'account di archiviazione.
  • Funzione di rotazione delle chiavi con un trigger di evento e un trigger HTTP (rotazione su richiesta)
  • Una sottoscrizione a eventi di Event Grid per l'evento SecretNearExpiry
  1. Selezionare il collegamento alla distribuzione del modello di Azure:

    Collegamento alla distribuzione dei modelli di Azure.

  2. Nell'elenco Gruppo di risorse selezionare Vaultrotation.

  3. Nella casella Storage Account RG, inserire il nome del gruppo di risorse in cui si trova l'account di archiviazione. Mantenere il valore predefinito [resourceGroup().name] se l'account di archiviazione si trova già nello stesso gruppo di risorse in cui si distribuirà la funzione di rotazione delle chiavi.

  4. Nella casella Nome account di archiviazione, immettere il nome dell'account di archiviazione che contiene le chiavi di accesso da aggiornare. Mantenere il valore predefinito [concat(resourceGroup().name, 'storage')] se si usa l'account di archiviazione creato in Prerequisiti.

  5. Nella casella Key Vault RG, immettere il nome del gruppo di risorse in cui si trova il key vault. Mantenere il valore predefinito [resourceGroup().name] se il key vault esiste già nello stesso gruppo di risorse in cui si implementerà la funzione di rotazione delle chiavi.

  6. Nella casella Nome Key Vault, immettere il nome del Key Vault. Mantenere il valore predefinito [concat(resourceGroup().name, '-kv')] se si usa il vault di chiavi creato in Prerequisiti.

  7. Nella casella Tipo di piano di servizio app, selezionare il piano di hosting. Il piano Premium è necessario solo quando il tuo archivio chiavi è dietro un firewall.

  8. Nella casella Nome dell'app per le funzioni, immettere il nome dell'app per le funzioni.

  9. Nella casella Nome segreto immettere il nome del segreto in cui verranno archiviate le chiavi di accesso.

  10. Nella casella URL repository immettere il percorso GitHub del codice della funzione. In questa esercitazione è possibile usare https://github.com/Azure-Samples/KeyVault-Rotation-StorageAccountKey-PowerShell.git .

  11. Selezionare Rivedi e crea.

  12. Fare clic su Crea.

    Screenshot che mostra come creare e distribuire la funzione.

Dopo aver completato i passaggi precedenti, si avrà un account di archiviazione, una server farm, un'app per le funzioni e Application Insights. Al termine della distribuzione, verrà visualizzata questa pagina:

Screenshot che mostra la pagina La distribuzione è completa.

Annotazioni

Se si verifica un errore, è possibile selezionare Ridistribuisci per completare la distribuzione dei componenti.

È possibile trovare modelli di distribuzione e codice per la funzione di rotazione in Esempi di Azure.

Aggiungere le chiavi di accesso dell'account di archiviazione ai segreti di Key Vault

Innanzitutto, imposta i criteri di accesso per concedere le autorizzazioni di gestione dei segreti al principale utente:

az keyvault set-policy --upn <email-address-of-user> --name vaultrotation-kv --secret-permissions set delete get list

È ora possibile creare un nuovo segreto con una chiave di accesso dell'account di archiviazione come valore. È necessario anche l'ID risorsa dell'account di archiviazione, il periodo di validità del segreto e l'ID chiave da aggiungere al segreto in modo che la funzionalità di rotazione possa rigenerare la chiave nell'account di archiviazione.

Determinare l'ID risorsa dell'account di archiviazione. È possibile trovare questo valore nella id proprietà .

az storage account show -n vaultrotationstorage

Elencare le chiavi di accesso dell'account di archiviazione per ottenere i valori delle chiavi:

az storage account keys list -n vaultrotationstorage

Aggiungere un segreto all'insieme di credenziali delle chiavi con un periodo di validità di 60 giorni, l'ID risorsa dell'account di archiviazione e, a scopo dimostrativo, impostare immediatamente la data di scadenza a domani per attivare la rotazione. Eseguire questo comando usando i valori recuperati per key1Value e storageAccountResourceId:

tomorrowDate=$(date -u -d "+1 day" +"%Y-%m-%dT%H:%M:%SZ")
az keyvault secret set --name storageKey --vault-name vaultrotation-kv --value <key1Value> --tags "CredentialId=key1" "ProviderAddress=<storageAccountResourceId>" "ValidityPeriodDays=60" --expires $tomorrowDate

Questo segreto attiverà SecretNearExpiry l'evento entro alcuni minuti. Questo evento a sua volta attiverà la funzione per ruotare il segreto con scadenza impostata su 60 giorni. In tale configurazione, l'evento "SecretNearExpiry" viene attivato ogni 30 giorni (30 giorni prima della scadenza) e la funzione di rotazione alterna la rotazione tra key1 e key2.

È possibile verificare che le chiavi di accesso siano state rigenerate recuperando la chiave dell'account di archiviazione e il segreto del Key Vault e confrontandole.

Usare questo comando per ottenere le informazioni segrete:

az keyvault secret show --vault-name vaultrotation-kv --name storageKey

Si noti che CredentialId viene aggiornato all'alternativa keyName e che value viene rigenerato:

Screenshot che mostra l'output del comando A Z keyvault secret show per l'account di archiviazione principale.

Recuperare le chiavi di accesso per confrontare i valori:

az storage account keys list -n vaultrotationstorage 

Si noti che value della chiave è identica al segreto nell'archivio chiavi.

Screenshot che mostra l'output del comando A Z storage account keys list per il primo account di archiviazione.

Usare la funzione di rotazione esistente per più account di archiviazione

È possibile riutilizzare la stessa Function App per ruotare le chiavi di accesso per più account di archiviazione.

Per aggiungere chiavi dell'account di archiviazione a una funzione esistente per la rotazione, è necessario:

  • Ruolo del servizio Operatore Chiave dell'Account di Archiviazione assegnato alle funzioni dell'applicazione per consentirle di accedere alle chiavi di accesso dell'account di archiviazione.
  • Sottoscrizione a un evento Event Grid per l'evento SecretNearExpiry.
  1. Selezionare il collegamento alla distribuzione del modello di Azure:

    Collegamento alla distribuzione dei modelli di Azure.

  2. Nell'elenco Gruppo di risorse selezionare Vaultrotation.

  3. Nella casella RG account di archiviazione immettere il nome del gruppo di risorse in cui si trova l'account di archiviazione. Mantenere il valore predefinito [resourceGroup().name] se l'account di archiviazione si trova già nello stesso gruppo di risorse in cui si distribuirà la funzione di rotazione delle chiavi.

  4. Nella casella Nome account di archiviazione immettere il nome dell'account di archiviazione che contiene le chiavi di accesso da ruotare.

  5. Nella casella Key Vault RG inserisci il nome del gruppo di risorse in cui si trova il tuo key vault. Mantenere il valore predefinito [resourceGroup().name] se l'insieme di credenziali esiste già nello stesso gruppo di risorse in cui distribuirai la funzione di rotazione delle chiavi.

  6. Nella casella Nome del Vault delle chiavi immettere il nome del Vault delle chiavi.

  7. Nella casella Nome dell'app per le funzioni immettere il nome dell'app per le funzioni.

  8. Nella casella Nome segreto immettere il nome del segreto in cui verranno archiviate le chiavi di accesso.

  9. Selezionare Rivedi e crea.

  10. Fare clic su Crea.

    Screenshot che mostra come creare un account di archiviazione aggiuntivo.

Aggiungere la chiave di accesso dell'account di archiviazione ai segreti di Key Vault

Determinare l'ID risorsa dell'account di archiviazione. È possibile trovare questo valore nella id proprietà .

az storage account show -n vaultrotationstorage2

Elencare le chiavi di accesso dell'account di archiviazione per ottenere il valore key2:

az storage account keys list -n vaultrotationstorage2

Aggiungere un segreto all'insieme di credenziali delle chiavi con un periodo di validità di 60 giorni, l'ID risorsa dell'account di archiviazione, e impostare la data di scadenza a domani per attivare immediatamente la rotazione a scopo dimostrativo. Eseguire questo comando usando i valori recuperati per key2Value e storageAccountResourceId:

tomorrowDate=$(date -u -d "+1 day" +"%Y-%m-%dT%H:%M:%SZ")
az keyvault secret set --name storageKey2 --vault-name vaultrotation-kv --value <key2Value> --tags "CredentialId=key2" "ProviderAddress=<storageAccountResourceId>" "ValidityPeriodDays=60" --expires $tomorrowDate

Usare questo comando per ottenere le informazioni segrete:

az keyvault secret show --vault-name vaultrotation-kv --name storageKey2

Si noti che CredentialId viene aggiornato all'alternativa keyName e che value viene rigenerato:

Screenshot che mostra l'output del comando

Recuperare le chiavi di accesso per confrontare i valori:

az storage account keys list -n vaultrotationstorage 

Si noti che value la chiave è uguale al segreto nel Key Vault.

Screenshot che mostra l'output del comando A Z storage account keys list per il secondo account di archiviazione.

Disabilitare la rotazione per il segreto

È possibile disabilitare la rotazione di un segreto semplicemente eliminando la sottoscrizione di Griglia di eventi per tale segreto. Usare il cmdlet Remove-AzEventGridSubscription di Azure PowerShell o il comando az event grid event--subscription delete dell'interfaccia della riga di comando di Azure.

Funzioni di rotazione di Key Vault per due set di credenziali

Modello di funzioni di rotazione per due set di credenziali e diverse funzioni pronte per l'uso:

Annotazioni

Queste funzioni di rotazione vengono create da un membro della community e non da Microsoft. Le funzioni della community non sono supportate in alcun programma o servizio di supporto Microsoft e vengono rese disponibili COSÌ COM'È senza garanzia di alcun tipo.

Passaggi successivi