Creare una firma di accesso condiviso di delega utente per un contenitore o un BLOB con PowerShell

Una firma di accesso condiviso consente di concedere l'accesso limitato a contenitori e BLOB nell'account di archiviazione. Quando si crea una firma di accesso condiviso, si specificano i vincoli, tra cui quali Archiviazione di Azure risorse a cui un client è autorizzato ad accedere, quali autorizzazioni hanno per tali risorse e per quanto tempo la firma di accesso condiviso è valida.

Ogni firma di accesso condiviso viene firmata con una chiave. È possibile firmare una firma di accesso condiviso in uno dei due modi seguenti:

  • Con una chiave creata usando le credenziali di Microsoft Entra. Una firma di accesso condiviso firmata con le credenziali di Microsoft Entra è una firma di accesso condiviso della delega utente. A un client che crea una firma di accesso condiviso della delega utente deve essere assegnato un ruolo controllo degli accessi in base al ruolo di Azure che include Microsoft.ArchiviazioneAzione /storageAccounts/blobServices/generateUserDelegationKey. Per altre informazioni, vedere Creare una firma di accesso condiviso di delega utente.
  • Con la chiave dell'account di archiviazione. Sia una firma di accesso condiviso del servizio che una firma di accesso condiviso dell'account di archiviazione sono firmate con la chiave dell'account di archiviazione. Il client che crea una firma di accesso condiviso del servizio deve avere accesso diretto alla chiave dell'account o deve essere assegnato a Microsoft.ArchiviazioneAutorizzazione /storageAccounts/listkeys/action. Per altre informazioni, vedere Creare una firma di accesso condiviso del servizio o Creare una firma di accesso condiviso dell'account.

Nota

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

Questo articolo illustra come usare le credenziali di Microsoft Entra per creare una firma di accesso condiviso di delega utente per un contenitore o un BLOB con Azure PowerShell.

Informazioni sulla firma di accesso condiviso della delega utente

Un token di firma di accesso condiviso per l'accesso a un contenitore o a un BLOB può essere protetto usando le credenziali di Microsoft Entra o una chiave dell'account. Una firma di accesso condiviso protetta con le credenziali di Microsoft Entra è detta firma di accesso condiviso della delega utente, perché il token OAuth 2.0 usato per firmare la firma di accesso condiviso 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. Quando la progettazione dell'applicazione richiede firme di accesso condiviso, usare le credenziali di Microsoft Entra per creare una firma di accesso condiviso di delega utente per una maggiore sicurezza. Per altre informazioni sulla firma di accesso condiviso della delega utente, vedere Creare una firma di accesso condiviso per la delega utente.

Attenzione

Qualsiasi client che possiede una firma di accesso condiviso valido può accedere ai dati nell'account di archiviazione, come consentito da tale firma di accesso condiviso. È importante proteggere una firma di accesso condiviso da usi dannosi o imprevisti. Usare la discrezione nella distribuzione di una firma di accesso condiviso e disporre di un piano per revocare una firma di accesso condiviso compromessa.

Per altre informazioni sulle firme di accesso condiviso, vedere Concedere accesso limitato alle risorse di archiviazione di Azure tramite firme di accesso condiviso.

Installa il modulo PowerShell

Per creare una firma di accesso condiviso della delega utente con PowerShell, installare la versione 1.10.0 o successiva del modulo Az.Archiviazione. Per installare la versione più recente del modulo, seguire questa procedura:

  1. Disinstallare eventuali installazioni precedenti di Azure PowerShell:

    • Rimuovere da Windows eventuali installazioni precedenti di Azure PowerShell usando l'impostazione App e funzionalità in Impostazioni.
    • Rimuovere tutti i moduli di Azure da %Program Files%\WindowsPowerShell\Modules.
  2. Assicurarsi di avere la versione più recente di PowerShellGet installata. Aprire una finestra di Windows PowerShell ed eseguire i seguenti comandi per installare la versione più recente:

    Install-Module PowerShellGet -Repository PSGallery -Force
    
  3. Chiudere e riaprire la finestra di PowerShell dopo l'installazione di PowerShellGet.

  4. Installare la versione più recente di Azure PowerShell:

    Install-Module Az -Repository PSGallery -AllowClobber
    
  5. Assicurarsi di aver installato Azure PowerShell versione 3.2.0 o successiva. Eseguire il comando seguente per installare la versione più recente del modulo di PowerShell Archiviazione di Azure:

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

Per verificare quale versione del modulo Az.Archiviazione è installata, eseguire il comando seguente:

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

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

Accedere ad Azure PowerShell con Microsoft Entra ID

Chiamare il comando Connessione-AzAccount per accedere con l'account Microsoft Entra:

Connect-AzAccount

Per altre informazioni sull'accesso con PowerShell, vedere Accedere con Azure PowerShell.

Assegnare autorizzazioni con il controllo degli accessi in base al ruolo di Azure

Per creare una firma di accesso condiviso della delega utente da Azure PowerShell, all'account Microsoft Entra usato per accedere a PowerShell deve essere assegnato un ruolo che include Microsoft.ArchiviazioneAzione /storageAccounts/blobServices/generateUserDelegationKey. Questa autorizzazione consente all'account Microsoft Entra di richiedere la chiave di delega dell'utente. La chiave di delega utente viene usata per firmare la firma di accesso condiviso della delega utente. Ruolo che fornisce Microsoft.Archiviazione L'azione /storageAccounts/blobServices/generateUserDelegationKey deve essere assegnata al livello dell'account di archiviazione, del gruppo di risorse o della sottoscrizione. Per altre informazioni sulle autorizzazioni di Controllo degli accessi in base al ruolo di Azure per la creazione di una firma di accesso condiviso di delega utente, vedere la sezione Assegnare autorizzazioni con il controllo degli accessi in base al ruolo di Azure in Creare una firma di accesso condiviso di delega utente.

Se non si dispone di autorizzazioni sufficienti per assegnare ruoli di Azure a un'entità di sicurezza di Microsoft Entra, potrebbe essere necessario chiedere al proprietario dell'account o all'amministratore di assegnare le autorizzazioni necessarie.

Nell'esempio seguente viene assegnato il ruolo Collaboratore dati BLOB Archiviazione, che include Microsoft.Archiviazione Azione /storageAccounts/blobServices/generateUserDelegationKey. Il ruolo è limitato al 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 Microsoft.Archiviazione/storageAccounts/blobServices/generateUserDelegationKey action, vedere Ruoli predefiniti di Azure.

Usare le credenziali di Microsoft Entra per proteggere una firma di accesso condiviso

Quando si crea una firma di accesso condiviso della delega utente con Azure PowerShell, la chiave di delega utente usata per firmare la firma di accesso condiviso viene creata in modo implicito. L'ora di inizio e l'ora di scadenza specificate per la firma di accesso condiviso vengono usate anche come ora di inizio e 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, è necessario specificare un'ora di scadenza per la firma di accesso condiviso entro 7 giorni dall'ora di inizio. La firma di accesso condiviso non è valida dopo la scadenza della chiave di delega utente, quindi una firma di accesso condiviso con una scadenza maggiore di 7 giorni rimarrà valida solo per 7 giorni.

Per creare una firma di accesso condiviso di delega utente per un contenitore o un BLOB con Azure PowerShell, creare prima di tutto un nuovo oggetto contesto Archiviazione di Azure, specificando il -UseConnectedAccount parametro . Il -UseConnectedAccount parametro specifica che il comando crea l'oggetto contesto nell'account Microsoft Entra con cui è stato eseguito l'accesso.

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

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

Creare una firma di accesso condiviso di delega utente per un contenitore

Per restituire un token di firma di accesso condiviso della delega utente per un contenitore, chiamare il comando New-Az Archiviazione ContainerSASToken, passando l'oggetto contesto Archiviazione di Azure creato in precedenza.

Nell'esempio seguente viene restituito un token di firma di accesso condiviso della delega utente per un contenitore. Ricordarsi di sostituire i valori segnaposto tra parentesi quadre con i propri valori:

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

Il token di firma di accesso condiviso della delega utente restituito sarà simile al seguente:

?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

Creare una firma di accesso condiviso di delega utente per un BLOB

Per restituire un token di firma di accesso condiviso della delega utente per un BLOB, chiamare il comando New-Az Archiviazione BlobSASToken passando l'oggetto contesto Archiviazione di Azure creato in precedenza.

La sintassi seguente restituisce una firma di accesso condiviso di delega utente per un BLOB. Nell'esempio viene specificato il -FullUri parametro , che restituisce l'URI del BLOB con il token di firma di accesso condiviso aggiunto. Ricordarsi di sostituire i valori segnaposto tra parentesi quadre con i propri valori:

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

L'URI di firma di accesso condiviso della delega utente restituito sarà simile al seguente:

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

Una firma di accesso condiviso della delega utente non supporta la definizione delle autorizzazioni con criteri di accesso archiviati.

Revocare una firma di accesso condiviso di delega utente

Per revocare una firma di accesso condiviso della delega utente da Azure PowerShell, chiamare il comando Revoke-Az Archiviazione AccountUserDelegationKeys. Questo comando revoca tutte le chiavi di delega utente associate all'account di archiviazione specificato. Tutte le firme di accesso condiviso associate a tali chiavi vengono invalidate.

È 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 di ruolo di Azure vengono memorizzate nella cache da Archiviazione di Azure, quindi potrebbe verificarsi un ritardo tra l'avvio del processo di revoca e quando una firma di accesso condiviso della delega utente esistente non è valida.

Passaggi successivi