Crea un SAS di delega utente per un container o un blob con PowerShell

Una firma di accesso condiviso (SAS) permette all'utente di concedere l'accesso limitato a contenitori e BLOB nell'account di archiviazione. Quando si crea una firma di accesso condiviso, si specificano i relativi vincoli, incluse le risorse di Archiviazione di Azure alle quali un client è autorizzato ad accedere, le autorizzazioni di cui dispone per tali risorse e la durata della validità della firma di accesso condiviso.

Ogni SAS è firmata con una chiave. È possibile firmare un SAS in uno dei due modi:

  • Con una chiave creata utilizzando le credenziali di Microsoft Entra. Una SAS firmata con credenziali Microsoft Entra è una SAS delegata dall'utente. A un client che crea una SAS di delega utente deve essere assegnato un ruolo RBAC di Azure che include l'azione Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey. Per saperne di più, vedere Creare una firma di accesso condiviso delegata dall'utente.
  • Con la chiave dell’account di archiviazione. Una chiave di accesso condiviso del servizio e una chiave di accesso condiviso dell'account sono entrambe firmate con la chiave dell'account condivisa. Il client che crea una SAS di servizio deve avere accesso diretto alla chiave dell'account oppure deve essergli assegnata l'autorizzazione Microsoft.Storage/storageAccounts/listkeys/action. Per altre informazioni, vedere Creare una firma di accesso condiviso del servizio oppure Creare una firma di accesso condiviso dell'account.

Nota

Una firma di accesso condiviso di delega utente offre una sicurezza superiore rispetto a una firma di accesso condiviso di delega utente firmata con la chiave dell'account di archiviazione. Quando possibile, Microsoft consiglia di usare una SAS di delega utente. Per altre informazioni, vedere Concedere accesso limitato ai dati con firme di accesso condiviso.

Questo articolo mostra come utilizzare le credenziali Microsoft Entra per creare un SAS di delega utente per un container o un blob con Azure PowerShell.

Informazioni sulla firma di accesso condiviso (SAS) delegata all'utente

Un token SAS per accedere a un contenitore o a un BLOB può essere protetto usando le credenziali di Microsoft Entra o la chiave dell'account. Una SAS protetta con le credenziali di Microsoft Entra è chiamata SAS di delega utente, perché il token OAuth 2.0 usato per firmare la SAS viene richiesto per conto dell'utente.

Microsoft raccomanda di usare le credenziali di Microsoft Entra, quando è possibile, come procedura consigliata per la sicurezza, invece di usare la chiave dell'account, che può essere compromessa più facilmente. Se la progettazione dell'applicazione richiede firme di accesso condiviso (SAS), usa le credenziali di Microsoft Entra per creare una SAS di delega utente per una sicurezza superiore. Per altre informazioni sulla SAS di delega utente, vedi Creare una SAS di delega utente.

Caution

Qualsiasi client che possiede una SAS valida può accedere ai dati nel tuo account di archiviazione, secondo quanto previsto da quella SAS. È importante proteggere una SAS da un uso malevolo o non intenzionale. Agisci con prudenza nel distribuire un SAS e predisponi un piano per revocare un SAS compromesso. Per evitare usi non intenzionali, usa un SAS delegato dall'utente associato a uno specifico utente, che associa il token SAS all'utente finale designato e non può essere usato da nessun altro.

Per ulteriori informazioni sulle firme di accesso condiviso, vedere Concedere accesso limitato alle risorse di Archiviazione di Azure usando firme di accesso condiviso (SAS).

Installa il modulo PowerShell

Per creare una delega utente SAS con PowerShell, installa la versione 1.10.0 o successiva del modulo Az.Storage. Segui questi passaggi per installare l'ultima versione del modulo:

  1. Disinstalla eventuali installazioni precedenti di Azure PowerShell:

    • Rimuovi tutte le installazioni precedenti di Azure PowerShell da Windows usando l'impostazione Apps & Funzionalità sotto Impostazioni.
    • Rimuovere tutti i moduli Azure da %Program Files%\WindowsPowerShell\Modules.
  2. Assicurati di avere installata l'ultima versione di PowerShellGet. Apri una finestra PowerShell di Windows ed esegui il seguente comando per installare l'ultima versione:

    Install-Module PowerShellGet -Repository PSGallery -Force
    
  3. Chiudi e riapri la finestra di PowerShell dopo aver installato PowerShellGet.

  4. Installa l'ultima versione di Azure PowerShell:

    Install-Module Az -Repository PSGallery -AllowClobber
    
  5. Assicurati di aver installato Azure PowerShell versione 3.2.0 o successiva. Esegui il seguente comando per installare l'ultima versione del modulo PowerShell di Archiviazione di Azure:

    Install-Module -Name Az.Storage -Repository PSGallery -Force
    
  6. Chiudi e riapri la finestra di PowerShell.

Per verificare quale versione del modulo Az.Storage è installata, esegui il seguente comando:

Get-Module -ListAvailable -Name Az.Storage -Refresh

Per altre informazioni sull'installazione di Azure PowerShell, vedere Installare Azure PowerShell con PowerShellGet.

Accedi ad Azure PowerShell con Microsoft Entra ID

Chiama il comando Connect-AzAccount per accedere con il tuo account Microsoft Entra:

Connect-AzAccount

Per maggiori informazioni sull'accesso con PowerShell, vedi Accedi con Azure PowerShell.

Assegna i permessi con Azure RBAC

Per creare un SAS di delegazione utente da Azure PowerShell, all'account Microsoft Entra usato per accedere a PowerShell deve essere assegnato un ruolo che includa l'azione Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey. Questo permesso consente a quell'account Microsoft Entra di richiedere la chiave di delega utente. La chiave di delega utente viene utilizzata per firmare il SAS di delega utente. Il ruolo che fornisce l'azione Microsoft. Storage/storageAccounts/blobServices/generateUserDelegationKey deve essere assegnata a livello dell'account di storage, del gruppo di risorse o dell'abbonamento. Per maggiori informazioni sui permessi Azure RBAC per creare un SAS di delega utente, consulta la sezione Assegna permessi con Azure RBAC in Crea un SAS di delegazione utente.

Se non disponi di autorizzazioni sufficienti per assegnare ruoli di Azure a un'entità di sicurezza di Microsoft Entra, potresti dover chiedere al proprietario dell'account o all'amministratore di assegnare le autorizzazioni necessarie.

Il seguente esempio assegna il ruolo Storage Blob Data Contributor, che include l'azione Microsoft. Storage/storageAccounts/blobServices/generateUserDelegationKey. Il ruolo è definito a livello dell'account di archiviazione.

È necessario ricordare di sostituire i valori segnaposto tra parentesi uncinate con i valori personalizzati:

New-AzRoleAssignment -SignInName <email> `
    -RoleDefinitionName "Storage Blob Data Contributor" `
    -Scope  "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>"

Per altre informazioni sui ruoli predefiniti che includono l'azione Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey, vedere ruoli predefiniti di Azure.

Usa le credenziali Microsoft Entra per ottenere un SAS

Quando crei un SAS di delega utente con Azure PowerShell, la chiave di delega utente usata per firmare il SAS viene creata implicitamente per te. L'ora di inizio e la scadenza che specifichi per il SAS sono anch'esse usate come ora di inizio e di scadenza per la chiave di delega utente.

Poiché l'intervallo massimo in cui la chiave di delega utente è valida è di 7 giorni dalla data di inizio, dovresti specificare un tempo di scadenza per il SAS entro 7 giorni dall'inizio del momento. L'SAS diventa invalido dopo la scadenza della chiave di delega utente, quindi un SAS con una scadenza superiore a 7 giorni sarà comunque valido solo per 7 giorni.

Per creare un SAS di delega utente per un container o un blob con Azure PowerShell, prima crea un nuovo oggetto contestuale Archiviazione di Azure, specificando il -UseConnectedAccount parametro. Il parametro -UseConnectedAccount specifica che il comando crea l'oggetto contesto sotto l'account Microsoft Entra con cui hai effettuato l'accesso.

È necessario ricordare di sostituire i valori segnaposto tra parentesi uncinate con i valori personalizzati:

$ctx = New-AzStorageContext -StorageAccountName <storage-account> -UseConnectedAccount

Crea un SAS di delegazione utente per un container

Per restituire un token SAS di delegazione utente per un container, chiama il comando New-AzStorageContainerSASToken, passando l'oggetto contestuale Archiviazione di Azure che hai creato in precedenza.

Il seguente esempio restituisce un token SAS di delegazione utente per un container. Ricordare di sostituire i valori segnaposto tra parentesi con i valori personalizzati:

New-AzStorageContainerSASToken -Context $ctx `
    -Name <container> `
    -Permission racwdl `
    -ExpiryTime <date-time>

Il token SAS della delega utente restituito sarà simile a:

?sv=2018-11-09&sr=c&sig=<sig>&skoid=<skoid>&sktid=<sktid>&skt=2019-08-05T22%3A24%3A36Z&ske=2019-08-07T07%3A
00%3A00Z&sks=b&skv=2018-11-09&se=2019-08-07T07%3A00%3A00Z&sp=rwdl

Crea un SAS di delegazione utente per un blob

Per restituire un token SAS di delega utente per un blob, chiama il comando New-AzStorageBlobSASToken, passando l'oggetto contestuale Archiviazione di Azure che hai creato in precedenza.

La seguente sintassi restituisce un SAS di delega utente per un blob. L'esempio specifica il -FullUri parametro, che restituisce l'URI del blob con il token SAS aggiunto. Ricordare di sostituire i valori segnaposto tra parentesi con i valori personalizzati:

New-AzStorageBlobSASToken -Context $ctx `
    -Container <container> `
    -Blob <blob> `
    -Permission racwd `
    -ExpiryTime <date-time>
    -FullUri

L'URI SAS della delega utente restituita sarà simile a:

https://storagesamples.blob.core.windows.net/sample-container/blob1.txt?sv=2018-11-09&sr=b&sig=<sig>&skoid=<skoid>&sktid=<sktid>&skt=2019-08-06T21%3A16%3A54Z&ske=2019-08-07T07%3A00%3A00Z&sks=b&skv=2018-11-09&se=2019-08-07T07%3A00%3A00Z&sp=racwd

Nota

Un SAS di delega utente non supporta la definizione dei permessi con una politica di accesso memorizzata.

Revocare una SAS di delega utente

Per revocare un SAS di delega utente da Azure PowerShell, richiamare il comando Revoke-AzStorageAccountUserDelegationKeys. Questo comando revoca tutte le chiavi di delega utente associate all'account di archiviazione specificato. Qualsiasi firma di accesso condivisa associata a queste chiavi viene invalidata.

È necessario ricordare di sostituire i valori segnaposto tra parentesi uncinate con i valori personalizzati:

Revoke-AzStorageAccountUserDelegationKeys -ResourceGroupName <resource-group> `
    -StorageAccountName <storage-account>

Importante

Sia la chiave di delega utente che le assegnazioni dei ruoli di Azure sono memorizzate nella cache da Archiviazione di Azure, quindi potrebbe esserci un ritardo tra l'avvio del processo di revoca e il momento in cui una delega utente esistente SAS diventa invalida.

Passaggi successivi