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

Il modo migliore per eseguire l'autenticazione per Azure servizi è con un'identità gestita, ma alcuni scenari richiedono ancora chiavi di accesso o password. Ruotare spesso queste credenziali per ridurre l'impatto di una violazione.

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 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. Usa una funzione attivata da una notifica di Griglia di eventi di Azure.

Importante

Per Archiviazione di Azure, preferisci l'autorizzazione Microsoft Entra ID tramite un'identità gestita anziché le chiavi dell'account condivise. Se la conformità consente, disabilitare l'autorizzazione con chiave condivisa nell'account di archiviazione e rimuovere completamente la necessità di rotazione delle chiavi. Usa lo schema di questa esercitazione solo quando un carico di lavoro richiede una chiave dell'account di archiviazione o una stringa di connessione.

Ecco la soluzione di rotazione descritta in questa esercitazione:

Diagramma che mostra la soluzione di rotazione.

In questa soluzione, Azure Key Vault archivia ogni chiave di accesso dell'account di archiviazione come versione dello stesso segreto, alternando tra la chiave primaria e quella secondaria nelle versioni successive. Quando una chiave di accesso viene archiviata come versione più recente del segreto, la chiave alternativa viene rigenerata e aggiunta a Key Vault come nuova versione più recente. Questa progettazione offre all'applicazione un ciclo di rotazione completo per raccogliere la chiave appena rigenerata.

  1. Trenta giorni prima della data di scadenza di un segreto, Key Vault pubblica l'evento quasi scaduto in Griglia di eventi.
  2. Griglia di eventi controlla le sottoscrizioni di eventi e, tramite POST HTTP, chiama l'endpoint app per le funzioni che ha sottoscritto questo 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 chiave rigenerata a Azure Key Vault come nuova versione del segreto.

Prerequisiti

  • Sottoscrizione Azure. Crearne uno gratuitamente.
  • Azure Cloud Shell. Questa esercitazione usa il portale Cloud Shell con l'ambiente PowerShell.
  • Un insieme di credenziali delle chiavi di Azure.
  • Due account di archiviazione Azure.

Annotazioni

La rotazione di una chiave dell'account di archiviazione condivisa revoca qualsiasi firma di accesso condiviso a livello di account generata da tale chiave. Dopo la rotazione, rigenerare i token SAS a livello di account per evitare interruzioni per le applicazioni.

Se non si hanno già un insieme di credenziali delle chiavi e due account di archiviazione, usare questo collegamento di distribuzione:

Link con etichetta Deploy to Azure.

  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 si avranno un insieme di credenziali delle chiavi e due account di archiviazione. Verificare questa configurazione nel interfaccia della riga di comando di Azure o Azure PowerShell:

az resource list -o table -g vaultrotation

Il risultato è 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

Creare quindi un'app per le funzioni con un'identità gestita assegnata dal sistema insieme agli altri componenti necessari e distribuire la funzione di rotazione per le chiavi dell'account di archiviazione.

La funzione di rotazione richiede i componenti e la configurazione seguenti:

  • Piano di Servizio app di Azure.
  • Un account di archiviazione usato per gestire i trigger di un'app per le funzioni.
  • Assegnazione di ruolo di Azure che consente all'app per le funzioni di accedere ai segreti nell'insieme di credenziali delle chiavi.
  • Il ruolo del servizio dell'operatore della chiave dell'account di archiviazione assegnato all'app per le funzioni in modo che possa accedere alle chiavi di accesso degli account di archiviazione.
  • Funzione di rotazione delle chiavi con un trigger di Griglia di eventi e un trigger HTTP (per la rotazione su richiesta).
  • Sottoscrizione a un evento Event Grid per l'evento SecretNearExpiry.
  1. Selezionare il collegamento di distribuzione del modello di Azure:

    Collegamento per la distribuzione del modello Azure.

  2. Nell'elenco Gruppo di risorse selezionare Vaultrotation.

  3. In Storage Account RG, immetti il nome del gruppo di risorse in cui si trova l'account di archiviazione. Mantenere l'impostazione predefinita [resourceGroup().name] se l'account di archiviazione si trova nello stesso gruppo di risorse della funzione di rotazione.

  4. In Nome account di archiviazione, immettere il nome dell'account di archiviazione di cui si desidera ruotare le chiavi di accesso. Mantieni l'impostazione predefinita [concat(resourceGroup().name, 'storage')] se usi l'account di archiviazione indicato nei Prerequisiti.

  5. In Key Vault RG immettere il nome del gruppo di risorse in cui si trova il key vault. Mantenere l'impostazione predefinita [resourceGroup().name] se l'insieme di credenziali delle chiavi si trova nello stesso gruppo di risorse della funzione di rotazione.

  6. In Nome di Key Vault, immettere il nome di Key Vault. Mantenere l'impostazione predefinita [concat(resourceGroup().name, '-kv')] se si usa l'insieme di credenziali dei Prerequisiti.

  7. In Tipo di piano di servizio app, selezionare il piano di hosting. Il piano Premium è necessario solo quando l'insieme di credenziali è protetto da un firewall.

  8. In Function App Name, immettere il nome dell'app per le funzioni.

  9. In Nome segreto immettere il nome del segreto che archivia le chiavi di accesso.

  10. In URL del repository, immettere l'URL GitHub del codice della funzione: 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.

Al termine della distribuzione, si dispone di un account di archiviazione, di una server farm, di un'app per le funzioni e di una risorsa di Application Insights:

Screenshot che mostra la pagina La distribuzione è stata completata.

Annotazioni

Questo modello ARM usa la distribuzione tramite controllo del codice sorgente di App Service (Kudu) per prelevare il codice della funzione da GitHub. Per un carico di lavoro in produzione, consigliamo invece una distribuzione basata su pacchetto, ad esempio func azure functionapp publish o zip deploy con WEBSITE_RUN_FROM_PACKAGE. Se la distribuzione non riesce, selezionare Ridistribuire per riprovare.

I modelli di distribuzione e il codice per la funzione di rotazione si trovano in Azure-Samples/KeyVault-Rotation-StorageAccountKey-PowerShell.

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

Per prima cosa assegnare a se stessi il ruolo Key Vault Secrets Officer in modo da poter gestire i segreti nell'insieme di credenziali:

az role assignment create --role "Key Vault Secrets Officer" --assignee <email-address-of-user> --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.KeyVault/vaults/vaultrotation-kv

È ora possibile creare un segreto il cui valore è una chiave di accesso dell'account di archiviazione. Oltre al valore, aggiungere come tag l'ID della risorsa dell'account di archiviazione, il periodo di validità del segreto e l'ID della chiave, in modo che la funzione di rotazione possa rigenerare la chiave nell'account di archiviazione.

Determinare l'ID risorsa dell'account di archiviazione. Si tratta della 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 il segreto all'insieme di credenziali delle chiavi con un periodo di validità di 60 giorni e, a scopo dimostrativo, con data di scadenza impostata a domani, per attivare immediatamente la rotazione. Eseguire questo comando con 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 <key1-value> --tags "CredentialId=key1" "ProviderAddress=<storage-account-resource-id>" "ValidityPeriodDays=60" --expires $tomorrowDate

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

Verificare che le chiavi di accesso vengano rigenerate recuperando la chiave dell'account di archiviazione e il segreto Key Vault, quindi confrontandoli.

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 il primo account di archiviazione.

Recuperare le chiavi di accesso per confrontare i valori:

az storage account keys list -n vaultrotationstorage

Si noti che il valore della chiave corrisponde al segreto nel Key Vault:

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

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

È possibile riusare la stessa app per le funzioni per ruotare le chiavi di più account di archiviazione.

Per aggiungere chiavi di un altro account di archiviazione a una funzione di rotazione esistente, è necessario:

  • Il ruolo del servizio dell'operatore della chiave dell'account di archiviazione assegnato all'app per le funzioni in modo che possa accedere alle chiavi di accesso degli account di archiviazione.
  • Sottoscrizione a un evento Event Grid per l'evento SecretNearExpiry.
  1. Selezionare il collegamento di distribuzione del modello di Azure:

    Collegamento per la distribuzione del modello Azure.

  2. Nell'elenco Gruppo di risorse selezionare Vaultrotation.

  3. Nella casella Storage Account RG immettere il nome del gruppo di risorse in cui si trova l'account di archiviazione. Mantenere l'impostazione predefinita [resourceGroup().name] se l'account di archiviazione si trova nello stesso gruppo di risorse della funzione di rotazione.

  4. In Nome account di archiviazione, immettere il nome dell'account di archiviazione di cui si desidera ruotare le chiavi di accesso.

  5. In Key Vault RG immettere il nome del gruppo di risorse in cui si trova il key vault. Mantenere l'impostazione predefinita [resourceGroup().name] se l'insieme di credenziali delle chiavi si trova nello stesso gruppo di risorse della funzione di rotazione.

  6. In Nome dell'insieme di credenziali delle chiavi immettere il nome dell'insieme di credenziali delle chiavi.

  7. In Nome dell'app per le funzioni, immettere il nome dell'app per le funzioni.

  8. In Nome segreto immettere il nome del segreto che archivia 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

Aggiungi il segreto nel Key Vault con un periodo di validità di 60 giorni e, a scopo dimostrativo, impostando come data di scadenza domani, in modo da attivare immediatamente la rotazione. Eseguire questo comando con 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 <key2-value> --tags "CredentialId=key2" "ProviderAddress=<storage-account-resource-id>" "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 A Z keyvault secret show per il secondo account di archiviazione.

Recuperare le chiavi di accesso per confrontare i valori:

az storage account keys list -n vaultrotationstorage2

Si noti che il valore della chiave corrisponde 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 un segreto

Per disabilitare la rotazione per un segreto, eliminare la sottoscrizione di Event Grid per il segreto. Usare il cmdlet Azure PowerShell Remove-AzEventGridSubscription o il comando az eventgrid event-subscription delete di interfaccia della riga di comando di Azure.

Usare l'intelligenza artificiale per personalizzare la funzione di rotazione per altri servizi

Questa esercitazione illustra la rotazione dei segreti per gli account di archiviazione di Azure, ma è possibile adattare la funzione di rotazione per altri servizi di Azure che usano credenziali doppie. GitHub Copilot può aiutarti a modificare il codice della funzione di rotazione di PowerShell in modo che funzioni con il tuo servizio.

I'm using the Azure Key Vault dual-credential secret rotation tutorial for Storage accounts. Help me modify the PowerShell rotation function to work with Azure Cosmos DB instead. The function should:
1. Connect to Cosmos DB and regenerate the secondary key
2. Store the new key in Key Vault as a new secret version
3. Alternate between primary and secondary keys on each rotation
Show me the changes needed to the PowerShell function code, including the correct Cosmos DB PowerShell cmdlets.

GitHub Copilot è basato sull'IA, quindi sono possibili sorprese ed errori. Per altre informazioni, vedere Copilot domande frequenti.

Passaggi successivi