Gestire le chiavi degli account di archiviazione con Key Vault e Azure PowerShell (legacy)

Importante

Le chiavi dell'account di archiviazione gestito di Key Vault (legacy) sono supportate così come sono senza altri aggiornamenti pianificati. Sono supportati solo gli Account SAS con definizioni SAS firmate per la versione del servizio di archiviazione non successiva al 28-03-2018.

Importante

È consigliabile usare l'integrazione di Archiviazione di Azure con Microsoft Entra ID, il servizio Microsoft basato sul cloud per la gestione delle identità e dell'accesso. L'integrazione con Microsoft Entra è disponibile per BLOB e code di Azure e offre l'accesso basato su token OAuth2 ad Archiviazione di Azure, analogamente ad Azure Key Vault. Microsoft Entra ID consente di autenticare l'applicazione client con un'identità di applicazione o utente, anziché con le credenziali dell'account di archiviazione. È possibile usare un'identità gestita di Microsoft Entra quando si esegue in Azure. Le identità gestite eliminano la necessità di eseguire l'autenticazione dei client e di archiviare le credenziali nell'applicazione. Usare questa soluzione seguente solo nei casi in cui l'autenticazione di Microsoft Entra non è possibile.

Un account di archiviazione Azure usa credenziali costituite da un nome account e una chiave. La chiave viene generata automaticamente e viene usata come password, invece che come chiave crittografica. Key Vault gestisce le chiavi degli account di archiviazione rigenerandole periodicamente nell'account di archiviazione e fornisce token di firma di accesso condiviso per l'accesso delegato alle risorse nell'account di archiviazione.

È possibile usare la funzionalità di chiave dell'account di archiviazione gestita di Key Vault per elencare (sincronizzare) le chiavi con un account di archiviazione di Azure e rigenerare (ruotare) le chiavi periodicamente. È possibile gestire le chiavi per gli account di archiviazione e gli account di archiviazione classici.

Quando si usa la funzionalità di chiave dell'account di archiviazione gestita, è necessario prendere in considerazione gli aspetti seguenti:

  • I valori di chiave non vengono mai restituiti in risposta a un chiamante.
  • È necessario che solo Key Vault gestisca le chiavi dell'account di archiviazione. Non è possibile gestire autonomamente le chiavi e occorre evitare di interferire con i processi di Key Vault.
  • È necessario che solo un singolo oggetto di Key Vault gestisca le chiavi dell'account di archiviazione. È necessario non consentire la gestione delle chiavi da più oggetti.
  • È necessario rigenerare le chiavi solo tramite Key Vault. Non rigenerare manualmente le chiavi dell'account di archiviazione.

Importante

La rigenerazione della chiave direttamente nell'account di archiviazione interrompe la configurazione dell'account di archiviazione gestita e può invalidare i token di firma di accesso condiviso in uso e causare un'interruzione.

Nota

È consigliabile usare il modulo Azure Az PowerShell per interagire con Azure. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

ID applicazione dell'entità servizio

Un tenant di Microsoft Entra assegna a ogni applicazione registrata un'entità servizio. L'entità servizio fornisce l'ID applicazione, che viene usato durante la configurazione dell'autorizzazione per l'accesso ad altre risorse di Azure tramite il controllo degli accessi in base al ruolo di Azure.

Key Vault è un'applicazione Microsoft già registrata in tutti i tenant di Microsoft Entra. Key Vault è registrato con lo stesso ID applicazione in ogni cloud di Azure.

Tenant Cloud ID applicazione
Microsoft Entra ID Azure Government 7e7c393b-45d0-48b1-a35e-2905ddf8183c
Microsoft Entra ID Pubblico di Azure cfa8b339-82a2-471a-a3c9-0fc0be7a4093
Altro Any cfa8b339-82a2-471a-a3c9-0fc0be7a4093

Prerequisiti

Per completare questa guida, è necessario eseguire prima di tutto queste operazioni:

Gestire le chiavi dell'account di archiviazione

Connettersi all'account di Azure

Autenticare la sessione di PowerShell usando il cmdlet Connect-AzAccount.

Connect-AzAccount

Se sono presenti più sottoscrizioni di Azure, è possibile elencarle mediante il cmdlet Get-AzSubscription e quindi specificare la sottoscrizione da usare con il cmdlet Set-AzContext.

Set-AzContext -SubscriptionId <subscriptionId>

Impostare variabili

Impostare prima di tutto le variabili che devono essere usate dai cmdlet di PowerShell nei passaggi seguenti. Assicurarsi di aggiornare i segnaposto "YourResourceGroupName", "YourStorageAccountName" e "YourKeyVaultName" e di impostare $keyVaultSpAppId su cfa8b339-82a2-471a-a3c9-0fc0be7a4093, come specificato in precedenza in ID applicazione dell'entità servizio.

Vengono usati anche i cmdlet Get-AzContext e Get-AzStorageAccount di Azure PowerShell per ottenere l'ID utente e il contesto dell'account di archiviazione di Azure.

$resourceGroupName = <YourResourceGroupName>
$storageAccountName = <YourStorageAccountName>
$keyVaultName = <YourKeyVaultName>
$keyVaultSpAppId = "cfa8b339-82a2-471a-a3c9-0fc0be7a4093"
$storageAccountKey = "key1" #(key1 or key2 are allowed)

# Get your User Id
$userId = (Get-AzContext).Account.Id

# Get a reference to your Azure storage account
$storageAccount = Get-AzStorageAccount -ResourceGroupName $resourceGroupName -StorageAccountName $storageAccountName

Nota

Per un account di archiviazione classico è necessario usare i valori "primary" e "secondary" per $storageAccountKey
Usare 'Get-AzResource -Name "ClassicStorageAccountName" -ResourceGroupName $resourceGroupName' invece di 'Get-AzStorageAccount' per l'account di archiviazione classico

Concedere a Key Vault l'accesso all'account di archiviazione

Prima che Key Vault possa accedere e gestire le chiavi dell'account di archiviazione, è necessario autorizzarlo ad accedere all'account di archiviazione. L'applicazione Key Vault richiede inoltre apposite autorizzazioni per elencare e rigenerare le chiavi di un account di archiviazione. Queste autorizzazioni vengono abilitate tramite il ruolo predefinito Ruolo del servizio dell'operatore della chiave dell'account di archiviazione di Azure.

Assegnare questo ruolo all'entità servizio di Key Vault, limitandone l'ambito al proprio account di archiviazione, usando il cmdlet New-AzRoleAssignment di Azure PowerShell.

# Assign Azure role "Storage Account Key Operator Service Role" to Key Vault, limiting the access scope to your storage account. For a classic storage account, use "Classic Storage Account Key Operator Service Role."
New-AzRoleAssignment -ApplicationId $keyVaultSpAppId -RoleDefinitionName 'Storage Account Key Operator Service Role' -Scope $storageAccount.Id

Se l'assegnazione del ruolo ha esito positivo, l'output dovrebbe essere simile all'esempio seguente:

RoleAssignmentId   : /subscriptions/03f0blll-ce69-483a-a092-d06ea46dfb8z/resourceGroups/rgContoso/providers/Microsoft.Storage/storageAccounts/sacontoso/providers/Microsoft.Authorization/roleAssignments/189cblll-12fb-406e-8699-4eef8b2b9ecz
Scope              : /subscriptions/03f0blll-ce69-483a-a092-d06ea46dfb8z/resourceGroups/rgContoso/providers/Microsoft.Storage/storageAccounts/sacontoso
DisplayName        : Azure Key Vault
SignInName         :
RoleDefinitionName : storage account Key Operator Service Role
RoleDefinitionId   : 81a9662b-bebf-436f-a333-f67b29880f12
ObjectId           : 93c27d83-f79b-4cb2-8dd4-4aa716542e74
ObjectType         : ServicePrincipal
CanDelegate        : False

Se Key Vault era già stato aggiunto a questo ruolo nel proprio account di archiviazione, si riceverà l'errore "L'assegnazione di ruolo esiste già". È possibile anche verificare l'assegnazione del ruolo consultando la pagina "Controllo di accesso (IAM)" dell'account di archiviazione nel portale di Azure.

Concedere all'account utente l'autorizzazione per gli account di archiviazione gestiti

Usare il cmdlet Set-AzKeyVaultAccessPolicy di Azure PowerShell per aggiornare i criteri di accesso di Key Vault e concedere le autorizzazioni dell'account di archiviazione all'account utente.

# Give your user principal access to all storage account permissions, on your Key Vault instance

Set-AzKeyVaultAccessPolicy -VaultName $keyVaultName -UserPrincipalName $userId -PermissionsToStorage get, list, delete, set, update, regeneratekey, getsas, listsas, deletesas, setsas, recover, backup, restore, purge

Le autorizzazioni per gli account di archiviazione non sono disponibili nella pagina "Criteri di accesso" dell'account di archiviazione nel portale di Azure.

Aggiungere un account di archiviazione gestito all'istanza di Key Vault

Usare il cmdlet Add-AzKeyVaultManagedStorageAccount di Azure PowerShell per creare un account di archiviazione gestito nell'istanza di Key Vault. L'opzione -DisableAutoRegenerateKey specifica di NON rigenerare le chiavi dell'account di archiviazione.

# Add your storage account to your Key Vault's managed storage accounts

Add-AzKeyVaultManagedStorageAccount -VaultName $keyVaultName -AccountName $storageAccountName -AccountResourceId $storageAccount.Id -ActiveKeyName $storageAccountKey -DisableAutoRegenerateKey

Dopo aver aggiunto l'account di archiviazione senza la rigenerazione delle chiavi, verrà visualizzato un output simile al seguente:

Id                  : https://kvcontoso.vault.azure.net:443/storage/sacontoso
Vault Name          : kvcontoso
AccountName         : sacontoso
Account Resource Id : /subscriptions/03f0blll-ce69-483a-a092-d06ea46dfb8z/resourceGroups/rgContoso/providers/Microsoft.Storage/storageAccounts/sacontoso
Active Key Name     : key1
Auto Regenerate Key : False
Regeneration Period : 90.00:00:00
Enabled             : True
Created             : 11/19/2018 11:54:47 PM
Updated             : 11/19/2018 11:54:47 PM
Tags                :

Abilitare la rigenerazione delle chiavi

Se si vuole che Key Vault rigeneri periodicamente le chiavi dell'account di archiviazione, è possibile usare il cmdlet Add-AzKeyVaultManagedStorageAccount di Azure PowerShell per configurare un periodo di rigenerazione. In questo esempio viene impostato un periodo di rigenerazione di trenta giorni. Quando è il momento di eseguire la rotazione, Key Vault rigenera la chiave inattiva e quindi imposta la chiave appena creata come attiva. La chiave usata per rilasciare token di firma di accesso condiviso è la chiave attiva.

$regenPeriod = [System.Timespan]::FromDays(30)

Add-AzKeyVaultManagedStorageAccount -VaultName $keyVaultName -AccountName $storageAccountName -AccountResourceId $storageAccount.Id -ActiveKeyName $storageAccountKey -RegenerationPeriod $regenPeriod

Dopo aver aggiunto l'account di archiviazione con la rigenerazione delle chiavi, verrà visualizzato un output simile al seguente:

Id                  : https://kvcontoso.vault.azure.net:443/storage/sacontoso
Vault Name          : kvcontoso
AccountName         : sacontoso
Account Resource Id : /subscriptions/03f0blll-ce69-483a-a092-d06ea46dfb8z/resourceGroups/rgContoso/providers/Microsoft.Storage/storageAccounts/sacontoso
Active Key Name     : key1
Auto Regenerate Key : True
Regeneration Period : 30.00:00:00
Enabled             : True
Created             : 11/19/2018 11:54:47 PM
Updated             : 11/19/2018 11:54:47 PM
Tags                :

Token di firma di accesso condiviso

È anche possibile chiedere a Key Vault di generare i token di firma di accesso condiviso. Una firma di accesso condiviso fornisce accesso delegato controllato alle risorse dell'account di archiviazione. È possibile concedere ai client l'accesso alle risorse nell'account di archiviazione, senza condividere le chiavi dell'account. Una firma di accesso condiviso offre una modalità sicura per condividere le risorse di archiviazione senza compromettere le chiavi dell'account.

I comandi in questa sezione consentono di completare le azioni seguenti:

  • Configurare una definizione di firma di accesso condiviso dell'account.
  • Configurare una definizione di firma di accesso condiviso della risorsa di archiviazione gestita di Key Vault nell'insieme di credenziali. La definizione include l'URI del modello del token di firma di accesso condiviso creato. La definizione ha una firma di accesso condiviso di tipo account ed è valida per N giorni.
  • Verificare che la firma di accesso condiviso sia stata salvata nell'insieme di credenziali delle chiavi come segreto.

Impostare variabili

Impostare prima di tutto le variabili che devono essere usate dai cmdlet di PowerShell nei passaggi seguenti. Assicurarsi di aggiornare i segnaposto <YourStorageAccountName> e <YourKeyVaultName>.

$storageAccountName = <YourStorageAccountName>
$keyVaultName = <YourKeyVaultName>

Definire un modello di definizione di firma di accesso condiviso

Key Vault usa il modello di definizione della firma di accesso condiviso per generare token per le applicazioni client.

Esempio di modello di definizione della firma di accesso condiviso:

$sasTemplate="sv=2018-03-28&ss=bfqt&srt=sco&sp=rw&spr=https"

Parametri della firma di accesso condiviso dell'account necessari nel modello di definizione della firma di accesso condiviso per Key Vault

Parametro di query SAS Descrizione
SignedVersion (sv) Obbligatorio. Specifica la versione del servizio di archiviazione firmata da usare per autorizzare le richieste effettuate con la firma di accesso condiviso dell'account. Deve essere impostato sulla versione 05-04-2015 o successiva. Key Vault supporta le versioni non successive al 28-03-2018
SignedServices (ss) Obbligatorio. Specifica i servizi firmati accessibili con la firma di accesso condiviso dell'account. I valori possibili includono:

- Blob (b)
- Coda (q)
- Tabella (t)
- File (f)

È possibile combinare i valori per fornire l'accesso a più servizi. Ad esempio, ss=bf specifica l'accesso agli endpoint BLOB e file.
SignedResourceTypes (srt) Obbligatorio. Specifica i tipi di risorse firmati accessibili con la firma di accesso condiviso dell'account.

- Servizio (s): accesso alle API a livello di servizio (ad esempio, Ottenere/Impostare le proprietà del servizio, Ottenere le statistiche del servizio, Elencare contenitori/code/tabelle/condivisioni)
- Contenitore (c): accesso alle API a livello di contenitore (ad esempio, Creazione/Eliminazione di un contenitore, Creazione/Eliminazione coda, Creazione/Eliminazione tabella, Creazione/Eliminazione di condivisione, Elenco BLOB/file e directory)
- Oggetto (o): accesso alle API a livello di oggetto per BLOB, messaggi in coda, entità di tabella e file(, ad esempio, Metti Blob, Interroga Entità, Ottieni Messaggi, Crea File, ecc.)

È possibile combinare i valori per fornire l'accesso a più tipi di risorsa. Ad esempio, srt=sc specifica l'accesso alle risorse del servizio e del contenitore.
SignedPermission (sp) Obbligatorio. Specifica le autorizzazioni firmate per la firma di accesso condiviso dell'account. Le autorizzazioni sono valide solo se corrispondono al tipo di risorsa firmato specificato; in caso contrario vengono ignorate.

- Lettura (r): valido per tutti i tipi di risorse firmati (Servizio, Contenitore e Oggetto). Consente le autorizzazioni di lettura per il tipo di risorsa specificato.
- Scrittura (w): valido per tutti i tipi di risorse firmati (Servizio, Contenitore e Oggetto). Consente le autorizzazioni di scrittura per il tipo di risorsa specificato.
- Elimina (d): valido per i tipi di risorse Contenitore e Oggetto, ad eccezione dei messaggi della coda.
- Elimina in modo permanente (y): valido solo per il tipo di risorsa Object del BLOB.
- Elenca (l): valido solo per i tipi di risorse del servizio e del contenitore.
- Aggiungi (a): valido solo per i tipi di risorse Object seguenti: messaggi di coda, entità di tabella e BLOB di accodamento.
- Crea (c): valido solo per i tipi di risorse Object seguenti: BLOB e file. Gli utenti possono creare nuovi BLOB o file, ma potrebbero non sovrascrivere BLOB o file esistenti.
- Aggiorna (u): valido solo per i tipi di risorse Object seguenti: messaggi di coda ed entità di tabella.
- Elabora (p): valido solo per i tipi di risorse Object seguenti: messaggi di coda.
- Tagga (t): valido solo per i tipi di risorse Object seguenti: BLOB. Consente operazioni di tag BLOB.
- Filtra (f): valido solo per i tipi di risorse Object seguenti: BLOB. Consente di filtrare in base al tag BLOB.
- Impostare i criteri di immutabilità (i): valido solo per il tipo di risorsa Oggetto seguente: BLOB. Consente di impostare/eliminare criteri di immutabilità e blocco legale in un BLOB.
SignedProtocol (spr) Facoltativo. Specifica il protocollo consentito per una richiesta effettuata con la firma di accesso condiviso dell'account. I valori possibili sono HTTPS e HTTP (https,http), oppure solo HTTPS (https). Il valore predefinito è https,http.

Solo HTTP non è un valore consentito.

Per altre informazioni sugli account SAS, vedere Creare un account SAS

Nota

Key Vault ignora i parametri di durata, ad esempio 'Signed Expiry', 'Signed Start' e parametri introdotti dopo la versione del 28-03-2018

Impostare la definizione della firma di accesso condiviso in Key Vault

Usare il cmdlet Set-AzKeyVaultManagedStorageSasDefinition di Azure PowerShell per creare una definizione di firma di accesso condiviso. È possibile specificare il nome che si preferisce per il parametro -Name.

Set-AzKeyVaultManagedStorageSasDefinition -AccountName $storageAccountName -VaultName $keyVaultName -Name <YourSASDefinitionName> -TemplateUri $sasTemplate -SasType 'account' -ValidityPeriod ([System.Timespan]::FromDays(1))

Verificare la definizione di firma di accesso condiviso

È possibile verificare che la definizione di firma di accesso condiviso sia stata archiviata nell'insieme di credenziali delle chiavi usando il cmdlet Get-AzKeyVaultSecret di Azure PowerShell.

Trovare prima di tutto la definizione di firma di accesso condiviso nell'insieme di credenziali delle chiavi.

Get-AzKeyVaultSecret -VaultName <YourKeyVaultName>

Il segreto corrispondente alla definizione di firma di accesso condiviso avrà le proprietà seguenti:

Vault Name   : <YourKeyVaultName>
Name         : <SecretName>
...
Content Type : application/vnd.ms-sastoken-storage
Tags         :

È ora possibile usare il cmdlet Get-AzKeyVaultSecret con i parametri VaultName e Name per visualizzare i contenuti di tale segreto.

$secretValueText = Get-AzKeyVaultSecret -VaultName <YourKeyVaultName> -Name <SecretName> -AsPlainText
Write-Output $secretValueText

L'output di questo comando mostrerà la stringa della definizione di firma di accesso condiviso.

Passaggi successivi