Chiavi dell'account di archiviazione Key VaultAzure Key Vault Storage Account Keys

Prima delle chiavi dell'account di archiviazione Key Vault gli sviluppatori dovevano gestire le proprie chiavi dell'account di archiviazione di Azure (ASA) e ruotarle manualmente o mediante automazione esterna.Before Azure Key Vault Storage Account Keys, developers had to manage their own Azure Storage Account (ASA) keys and rotate them manually or through an external automation. Al momento, le chiavi dell'account di archiviazione di Key Vault sono implementate come segreti di Key Vault per l'autenticazione con un account di archiviazione di Azure.Now, Key Vault Storage Account Keys are implemented as Key Vault secrets for authenticating with an Azure Storage Account.

La funzionalità chiave di Account di Archiviazione di Azure (ASA) consente di gestire la rotazione dei segreti al posto dell'utente.The Azure Storage Account (ASA) key feature manages secret rotation for you. Elimina anche la necessità di un contatto diretto con una chiave dell'account di archiviazione di Azure offrendo come metodo firme di accesso condiviso.It also removes the need for your direct contact with an ASA key by offering Shared Access Signatures (SAS) as a method.

Per informazioni più generali sugli account di archiviazione di Azure, vedere Informazioni sugli account di archiviazione di Azure.For more general information on Azure Storage Accounts, see About Azure storage accounts.

Supporto di interfacceSupporting interfaces

L'elenco completo delle interfacce di programmazione e di script Microsoft e i collegamenti a queste sono disponibili in Guida per gli sviluppatori di Key Vault.You'll find a complete listing and links to our programming and scripting interfaces in the Key Vault Developer's Guide.

Ciò che Key Vault gestisceWhat Key Vault manages

Key Vault esegue diverse funzioni di gestione interne per conto dell'utente quando si usano chiavi dell'account di archiviazione gestite.Key Vault performs several internal management functions on your behalf when you use Managed Storage Account Keys.

  • Azure Key Vault gestisce le chiavi di un account di archiviazione di Azure.Azure Key Vault manages keys of an Azure Storage Account (ASA).
    • Internamente Key Vault consente di elencare (sincronizzazione) le chiavi con un account di archiviazione di Azure.Internally, Azure Key Vault can list (sync) keys with an Azure Storage Account.
    • Key Vault rigenera (ruota) le chiavi periodicamente.Azure Key Vault regenerates (rotates) the keys periodically.
    • I valori di chiave non vengono mai restituiti in risposta al chiamante.Key values are never returned in response to caller.
    • Key Vault gestisce le chiavi sia degli account di archiviazione che degli account di archiviazione classici.Azure Key Vault manages keys of both Storage Accounts and Classic Storage Accounts.
  • Key Vault consente al proprietario dell'insieme di credenziali/oggetto di creare definizioni SAS (SAS di account o di servizio).Azure Key Vault allows you, the vault/object owner, to create SAS (account or service SAS) definitions.
    • Il valore SAS, creato utilizzando la definizione SAS, viene restituito come una chiave privata tramite il percorso dell'URI REST.The SAS value, created using SAS definition, is returned as a secret via the REST URI path. Per altre informazioni, vedere Azure Key Vault storage account operations (Operazioni dell'account di archiviazione di Azure Key Vault).For more information, see Azure Key Vault storage account operations.

Linee guida sulla denominazioneNaming guidance

  • I nomi degli account di archiviazione devono avere una lunghezza compresa tra 3 e 24 caratteri e possono contenere solo numeri e lettere minuscole.Storage account names must be between 3 and 24 characters in length and may contain numbers and lowercase letters only.
  • Un nome di una definizione SAS deve avere da 1 a 102 caratteri e contenere solo i caratteri da 0 a 9, da a a z e da A a Z.A SAS definition name must be 1-102 characters in length containing only 0-9, a-z, A-Z.

Esperienza per sviluppatoriDeveloper experience

Prima delle chiavi di archiviazione Key VaultBefore Azure Key Vault Storage Keys

Gli sviluppatori in precedenza dovevano eseguire le seguenti procedure con una chiave di account di archiviazione per ottenere l'accesso all'archiviazione di Azure.Developers used to need to do the following practices with a storage account key to get access to Azure storage.

  1. Archiviare la stringa di connessione o il token di firma di accesso condiviso nelle impostazioni dell'applicazione di Servizio app di Azure o in un'altra risorsa di archiviazione.Store connection string or SAS token in Azure AppService application settings or another storage.
  2. All'avvio dell'applicazione, recuperare la stringa di connessione o il token di firma di accesso condiviso.At application start-up, fetch the connection string or SAS token.
  3. Creare CloudStorageAccount per interagire con la risorsa di archiviazione.Create CloudStorageAccount to interact with storage.
// The Connection string is being fetched from App Service application settings
var connectionStringOrSasToken = CloudConfigurationManager.GetSetting("StorageConnectionString");
var storageAccount = CloudStorageAccount.Parse(connectionStringOrSasToken);
var blobClient = storageAccount.CreateCloudBlobClient();

Dopo le chiavi di archiviazione Key VaultAfter Azure Key Vault Storage Keys

Gli sviluppatori creano un KeyVaultClient e lo sfruttano per ottenere il token di firma di accesso condiviso per la loro risorsa archiviazione.Developers create a KeyVaultClient and leverage that to get the SAS token for their storage. Successivamente, creano CloudStorageAccount con tale token.Afterwards, they create CloudStorageAccount with that token.

// Create KeyVaultClient with vault credentials
var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(securityToken));

// Get a SAS token for our storage from Key Vault
var sasToken = await kv.GetSecretAsync("SecretUri");

// Create new storage credentials using the SAS token.
var accountSasCredential = new StorageCredentials(sasToken.Value);

// Use the storage credentials and the Blob storage endpoint to create a new Blob service client.
var accountWithSas = new CloudStorageAccount(accountSasCredential, new Uri ("https://myaccount.blob.core.windows.net/"), null, null, null);

var blobClientWithSas = accountWithSas.CreateCloudBlobClient();

// Use the blobClientWithSas
...

// If your SAS token is about to expire, get the SAS Token again from Key Vault and update it.
sasToken = await kv.GetSecretAsync("SecretUri");
accountSasCredential.UpdateSASToken(sasToken);

Materiale sussidiario per sviluppatoriDeveloper guidance

  • Consentire solo a Key Vault di gestire le chiavi ASA.Only allow Key Vault to manage your ASA keys. Non tentare di gestirle manualmente onde evitare di interferire con i processi di Key Vault.Do not attempt to manage them yourself, you will interfere with Key Vault's processes.
  • Non consentire alle chiavi ASA di essere gestite da più di un oggetto di Key Vault.Do not allow ASA keys to be managed by more than one Key Vault object.
  • Se è necessario rigenerare manualmente le chiavi ASA, è consigliabile rigenerarle tramite Key Vault.If you need to manually regenerate your ASA keys, we recommend that you regenerate them via Key Vault.

IntroduzioneGetting started

Configurazione per le autorizzazioni di controllo degli accessi in base al ruolo (RBAC)Setup for role-based access control (RBAC) permissions

Per elencare e rigenerare le chiavi per un account di archiviazione, l'identità di applicazione di Azure Key Vault necessita di autorizzazioni.The Azure Key Vault application identity needs permissions to list and regenerate keys for a storage account. Impostare queste autorizzazioni usando la procedura seguente:Set up these permissions using the following steps:

# Get the resource ID of the Azure Storage Account you want to manage.
# Below, we are fetching a storage account using Azure Resource Manager
$storage = Get-AzureRmStorageAccount -ResourceGroupName "mystorageResourceGroup" -StorageAccountName "mystorage"

# Get ObjectId of Azure Key Vault Identity
$servicePrincipal = Get-AzureRmADServicePrincipal -ServicePrincipalName cfa8b339-82a2-471a-a3c9-0fc0be7a4093

# Assign Storage Key Operator role to Azure Key Vault Identity
New-AzureRmRoleAssignment -ObjectId $servicePrincipal.Id -RoleDefinitionName 'Storage Account Key Operator Service Role' -Scope $storage.Id
>[!NOTE]
> For a classic account type, set the role parameter to *"Classic Storage Account Key Operator Service Role."*

Esempio di funzionamentoWorking example

L'esempio seguente illustra la creazione di un account di archiviazione di Azure gestito da Key Vault e le definizioni di firma di accesso condiviso (SAS) associate.The following example demonstrates creating a Key Vault managed Azure Storage Account and the associated Shared Access Signature (SAS) definitions.

PrerequisitoPrerequisite

Assicurarsi di avere completato la Configurazione per le autorizzazioni di controllo degli accessi in base al ruolo (RBAC).Ensure you have completed Setup for role-based access control (RBAC) permissions.

ConfigurazioneSetup

# This is the name of our Key Vault
$keyVaultName = "mykeyVault"

# Fetching all the storage account object, of the ASA we want to manage with KeyVault
$storage = Get-AzureRmStorageAccount -ResourceGroupName "mystorageResourceGroup" -StorageAccountName "mystorage"

# Get ObjectId of Azure KeyVault Identity service principal
$servicePrincipalId = $(Get-AzureRmADServicePrincipal -ServicePrincipalName cfa8b339-82a2-471a-a3c9-0fc0be7a4093).Id

Successivamente, impostare le autorizzazioni per l'account personale per assicurarsi di potere gestire tutte le autorizzazioni di archiviazione in Key Vault.Next, set the permissions for your account to ensure that you can manage all the storage permissions in the Key Vault. Nell'esempio seguente, l'account di Azure è _developer@contoso.com_.In the example below, our Azure account is _developer@contoso.com_.

# Searching our Azure Active Directory for our account's ObjectId
$userPrincipalId = $(Get-AzureRmADUser -SearchString "developer@contoso.com").Id

# We use the ObjectId we found to setting permissions on the vault
Set-AzureRmKeyVaultAccessPolicy -VaultName $keyVaultName -ObjectId $userPrincipalId -PermissionsToStorage all

Creare un account di archiviazione gestito da Key VaultCreate a Key Vault Managed Storage Account

Creare ora un account di archiviazione gestito in Azure Key Vault e usare una chiave di accesso dall'account di archiviazione per creare il token di firma di accesso condiviso.Now, create a Managed Storage Account in Azure Key Vault and use an access key from your storage account to create the SAS tokens.

  • -ActiveKeyName usa 'key2' per generare i token di firma di accesso condiviso.-ActiveKeyName uses 'key2' to generate the SAS tokens.
  • -AccountName consente di identificare l'account di archiviazione gestito.-AccountName is used to identify your managed storage account. Di seguito viene usato il nome dell'account di archiviazione per semplicità, ma può essere qualsiasi nome.Below, we are using the storage account name to keep it simple but it can be any name.
  • -DisableAutoRegenerateKey specifica di non rigenerare le chiavi dell'account di archiviazione.-DisableAutoRegenerateKey specifies not regenerate the storage account keys.
# Adds your storage account to be managed by Key Vault and will use the access key, key2
Add-AzureKeyVaultManagedStorageAccount -VaultName $keyVaultName -AccountName $storage.StorageAccountName -AccountResourceId $storage.Id -ActiveKeyName key2 -DisableAutoRegenerateKey

Rigenerazione delle chiaviKey regeneration

Se si vuole che Key Vault rigeneri periodicamente le chiavi di accesso dell'archiviazione, è possibile impostare un periodo di rigenerazione.If you want Key Vault to regenerate your storage's access keys periodically, you can set a regeneration period. Di seguito viene impostato un periodo di rigenerazione di 3 giorni.Below, we are setting a regeneration period of 3 days. Dopo 3 giorni, Key Vault rigenera 'key1' e cambia l'impostazione della chiave attiva da 'key2' a 'key1'.After 3 days, Key Vault will regenerate 'key1' and swap the active key from 'key2' to 'key1'.

$regenPeriod = [System.Timespan]::FromDays(3)
$accountName = $storage.StorageAccountName

Add-AzureKeyVaultManagedStorageAccount -VaultName $keyVaultName -AccountName $accountName -AccountResourceId $storage.Id -ActiveKeyName key2 -RegenerationPeriod $regenPeriod

Impostare le definizioni di firma di accesso condivisoSet SAS definitions

La firma di accesso condiviso dell'account consente di accedere al servizio BLOB con autorizzazioni diverse.The account SAS provides access to the blob service with different permissions. Impostare le definizioni di firma di accesso condiviso in Key Vault per l'account di archiviazione gestito.Set the SAS definitions in Key Vault for your managed storage account.

  • -AccountName è il nome dell'account di archiviazione gestito in Key Vault.-AccountName is the name of the managed storage account in Key Vault.
  • -Name è l'identificatore per il token di firma di accesso condiviso nell'archiviazione.-Name is the identifier for the SAS token in your storage.
  • -ValidityPeriod imposta la data di scadenza per il token di firma di accesso condiviso generato.-ValidityPeriod sets the expiration date for the generated SAS token.
$validityPeriod = [System.Timespan]::FromDays(1)
$readSasName = "readBlobSas"
$writeSasName = "writeBlobSas"

Set-AzureKeyVaultManagedStorageSasDefinition -Service Blob -ResourceType Container,Service -VaultName $keyVaultName -AccountName $accountName -Name $readSasName -Protocol HttpsOnly -ValidityPeriod $validityPeriod -Permission Read,List

Set-AzureKeyVaultManagedStorageSasDefinition -Service Blob -ResourceType Container,Service,Object -VaultName $keyVaultName -AccountName $accountName -Name $writeSasName -Protocol HttpsOnly -ValidityPeriod $validityPeriod -Permission Read,List,Write

Ottenere i token di firma di accesso condivisoGet SAS tokens

Ottenere i token SAS corrispondenti ed eseguire chiamate all'account di archiviazione.Get the corresponding SAS tokens and make calls to storage. -SecretName viene costruito usando l'input dai parametri AccountName e Name quando si esegue Set-AzureKeyVaultManagedStorageSasDefinition.-SecretName is constructed using the input from the AccountName and Name parameters when you executed Set-AzureKeyVaultManagedStorageSasDefinition.

$readSasToken = (Get-AzureKeyVaultSecret -VaultName $keyVaultName -SecretName "$accountName-$readSasName").SecretValueText
$writeSasToken = (Get-AzureKeyVaultSecret -VaultName $keyVaultName -SecretName "$accountName-$writeSasName").SecretValueText

Creazione dell'account di archiviazioneCreate storage

Si noti che il tentativo di accesso con $readSasToken ha esito negativo ma che è possibile accedere con $writeSasToken.Notice that trying to access with $readSasToken fails, but that we are able to access with $writeSasToken.

$context1 = New-AzureStorageContext -SasToken $readSasToken -StorageAccountName $storage.StorageAccountName
$context2 = New-AzureStorageContext -SasToken $writeSasToken -StorageAccountName $storage.StorageAccountName

Set-AzureStorageBlobContent -Container containertest1 -File "abc.txt" -Context $context1
Set-AzureStorageBlobContent -Container cont1-file "file.txt" -Context $context2

È possibile accedere al contenuto del BLOB di archiviazione con un token SAS che abbia accesso in scrittura.You are able access the storage blob content with the SAS token that has write access.

Cmdlet PowerShell pertinentiRelevant Powershell cmdlets

Onboarding dell'account di archiviazioneStorage account onboarding

Esempio: il proprietario di un oggetto Key Vault aggiunge un oggetto account di archiviazione in Azure Key Vault per eseguire l'onboarding di un account di archiviazione.Example: As a Key Vault object owner you add a storage account object to your Azure Key Vault to onboard a storage account.

Durante il caricamento, Key Vault deve verificare che l'identità dell'account onboarding abbia le autorizzazioni per accedere agli elenchi e rigenerare le chiavi di archiviazione.During onboarding, Key Vault needs to verify that the identity of the onboarding account has permissions to list and to regenerate storage keys. Per verificare queste autorizzazioni, Key Vault ottiene un token OBO (per conto di) dal servizio di autenticazione, pubblico impostato su Gestione Risorse di Azure e crea una chiamata chiave dell'elenco al servizio di archiviazione di Azure.In order to verify these permissions, Key Vault gets an OBO (On Behalf Of) token from the authentication service, audience set to Azure Resource Manager, and makes a list key call to the Azure Storage service. Se la chiamata di elenco ha esito negativo, la creazione dell'oggetto Key Vault ha esito negativo con il codice di stato HTTP Forbidden.If the list call fails, the Key Vault object creation fails with an HTTP status code of Forbidden. Le chiavi elencate in questo modo vengono memorizzate nella cache con l'archiviazione di entità key vault.The keys listed in this fashion are cached with your key vault entity storage.

Key Vault deve verificare che l'identità disponga delle autorizzazioni rigenera prima di acquisire la proprietà della rigenerazione delle chiavi.Key Vault must verify that the identity has regenerate permissions before it can take ownership of regenerating your keys. Per verificare che l'identità, tramite il token OBO, nonché l'identità Key Vault propria possieda queste autorizzazioni:To verify that the identity, via OBO token, as well as the Key Vault first party identity has these permissions:

  • Key Vault elenca le autorizzazioni RBAC per la risorsa dell'account di archiviazione.Key Vault lists RBAC permissions on the storage account resource.
  • Key Vault convalida la risposta tramite la corrispondenza mediante espressioni regolari di azioni e non-azioni.Key Vault validates the response via regular expression matching of actions and non-actions.

Trovare alcuni esempi di supporto in Key Vault - Managed Storage Account Keys Samples (Key Vault - Esempi di chiavi dell'account di archiviazione gestito).Find some supporting examples at Key Vault - Managed Storage Account Keys Samples.

Se l'identità non dispone dell'autorizzazione rigenera o l'identità Key Vault propria non dispone dell'autorizzazione elenca o rigenera, la richiesta di onboarding ha esito negativo restituendo un messaggio e codice di errore appropriati.If the identity does not have regenerate permissions or if Key Vault's first party identity doesn’t have list or regenerate permission, then the onboarding request fails returning an appropriate error code and message.

Il token OBO funziona solo quando si usano applicazioni client native e proprie di PowerShell o dell'interfaccia della riga di comando.The OBO token will only work when you use first-party, native client applications of either PowerShell or CLI.

Altre applicazioniOther applications

  • I token SAS, costruiti usando le chiavi dell'account di archiviazione Key Vault, forniscono un accesso ancora più controllato a un account di archiviazione di Azure.SAS tokens, constructed using Key Vault storage account keys, provide even more controlled access to an Azure storage account. Per altre informazioni, vedere Uso delle firme di accesso condiviso.For more information, see Using shared access signatures.

Vedere anche See also