Creare una firma di accesso condiviso di delega utente

È possibile proteggere un token di firma di accesso condiviso per l'accesso a un contenitore, a una directory o a un BLOB usando le credenziali Microsoft Entra o una chiave dell'account. Una firma di accesso condiviso protetta con le credenziali di Microsoft Entra viene definita firma di accesso condiviso della delega utente. Come procedura consigliata per la sicurezza, è consigliabile usare Microsoft Entra credenziali quando possibile, anziché la chiave dell'account, che può essere compromessa più facilmente. Quando la progettazione dell'applicazione richiede firme di accesso condiviso, usare Microsoft Entra credenziali per creare una firma di accesso condiviso della delega utente per garantire una maggiore sicurezza.

Ogni firma di accesso condiviso viene firmata con una chiave. Per creare una firma di accesso condiviso della delega utente, è prima necessario richiedere una chiave di delega utente, che viene quindi usata per firmare la firma di accesso condiviso. La chiave di delega utente è analoga alla chiave dell'account usata per firmare una firma di accesso condiviso del servizio o una firma di accesso condiviso dell'account, ad eccezione del fatto che si basa sulle credenziali di Microsoft Entra. Per richiedere la chiave di delega dell'utente, chiamare l'operazione Get User Delegation Key .To request the user delegation key, call the Get User Delegation Key operation. È quindi possibile usare la chiave di delega utente per creare la firma di accesso condiviso.

Una firma di accesso condiviso della delega utente è supportata per Archiviazione BLOB di Azure e Azure Data Lake Storage Gen2. I criteri di accesso archiviati non sono supportati per una firma di accesso condiviso della delega utente.

Attenzione

Le firme di accesso condiviso sono chiavi che concedono le autorizzazioni alle risorse di archiviazione ed è necessario proteggerle esattamente come si protegge una chiave dell'account. È importante proteggere una firma di accesso condiviso da usi dannosi o non intenzionali. Usare la discrezione nella distribuzione di una firma di accesso condiviso e disporre di un piano per revocare una firma di accesso condiviso compromessa. Le operazioni che usano firme di accesso condiviso devono essere eseguite solo tramite una connessione HTTPS e gli URI della firma di accesso condiviso devono essere distribuiti solo in una connessione sicura, ad esempio HTTPS.

Per informazioni sull'uso della chiave dell'account per proteggere una firma di accesso condiviso, vedere Creare una firma di accesso condiviso del servizio e Creare una firma di accesso condiviso dell'account.

Supporto della firma di accesso condiviso della delega utente per l'accesso con ambito directory

Una firma di accesso condiviso della delega utente supporta l'ambito della directory (sr=d) quando la versione di autorizzazione (sv) è 2020-02-10 o successiva e viene abilitato uno spazio dei nomi gerarchico (HNS). La semantica per l'ambito della directory (sr=d) è simile all'ambito del contenitore (sr=c), ad eccezione del fatto che l'accesso è limitato a una directory e a qualsiasi file e sottodirectory al suo interno. Quando sr=d viene specificato, è necessario anche il sdd parametro di query.

Il formato da stringa a firma per l'autorizzazione versione 2020-02-10 è invariato.

Supporto della firma di accesso condiviso della delega utente per un OID utente

La firma di accesso condiviso della delega utente supporta un identificatore di oggetto utente (OID) facoltativo che viene trasportato nel saoid parametro o suoid quando la versione di autorizzazione (sv) è 2020-02-10 o successiva. Questo parametro facoltativo fornisce un modello di autorizzazione avanzato per i carichi di lavoro del cluster multiutente, ad esempio Hadoop e Spark.

I token di firma di accesso condiviso possono essere vincolati a un'operazione e a un utente specifici del file system, che fornisce un token di accesso meno vulnerabile che sia più sicuro da distribuire in un cluster multiutente. Un caso d'uso per queste funzionalità è l'integrazione del driver Hadoop ABFS con Apache Ranger.

Autorizzare una firma di accesso condiviso della delega utente

Quando un client accede a una risorsa di archiviazione BLOB con una firma di accesso condiviso della delega utente, la richiesta ad Archiviazione di Azure viene autorizzata con le credenziali Microsoft Entra usate per creare la firma di accesso condiviso. Le autorizzazioni di controllo degli accessi in base al ruolo concesse per tale account Microsoft Entra, insieme alle autorizzazioni concesse in modo esplicito nella firma di accesso condiviso, determinano l'accesso del client alla risorsa. Questo approccio offre un livello di sicurezza aggiuntivo e consente di evitare di dover archiviare la chiave di accesso dell'account con il codice dell'applicazione. Per questi motivi, la creazione di una firma di accesso condiviso tramite Microsoft Entra credenziali è una procedura consigliata per la sicurezza.

Le autorizzazioni concesse a un client che possiede la firma di accesso condiviso sono l'intersezione delle autorizzazioni concesse all'entità di sicurezza che ha richiesto la chiave di delega utente e le autorizzazioni concesse alla risorsa nel token di firma di accesso condiviso usando il signedPermissions campo (sp). Se non viene concessa un'autorizzazione concessa all'entità di sicurezza tramite il controllo degli accessi in base al ruolo anche nel token di firma di accesso condiviso, tale autorizzazione non viene concessa al client che tenta di usare la firma di accesso condiviso per accedere alla risorsa. Quando si crea una firma di accesso condiviso della delega utente, assicurarsi che le autorizzazioni concesse tramite il controllo degli accessi in base al ruolo e le autorizzazioni concesse tramite il token di firma di accesso condiviso siano entrambe allineate al livello di accesso richiesto dal client.

Per creare una firma di accesso condiviso della delega utente, seguire questa procedura:

  1. Usare il controllo degli accessi in base al ruolo per concedere le autorizzazioni desiderate all'entità di sicurezza che richiederà la chiave di delega utente.
  2. Acquisire un token OAuth 2.0 da Microsoft Entra ID.
  3. Usare il token per richiedere la chiave di delega utente chiamando l'operazione Get User Delegation Key .Use the token to request the user delegation key by calling the Get User Delegation Key operation.
  4. Usare la chiave di delega utente per costruire il token di firma di accesso condiviso con i campi appropriati.

Assegnare autorizzazioni con il controllo degli accessi in base al ruolo

L'entità di sicurezza che richiede la chiave di delega dell'utente deve disporre delle autorizzazioni appropriate a tale scopo. Un'entità di sicurezza Microsoft Entra ID può essere un utente, un gruppo, un'entità servizio o un'identità gestita.

Per richiedere la chiave di delega utente, è necessario assegnare a un'entità di sicurezza l'azione Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey . I ruoli predefiniti di controllo degli accessi in base al ruolo seguenti includono l'azione Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey , in modo esplicito o come parte di una definizione con caratteri jolly:

Poiché l'operazione Get User Delegation Key agisce a livello di account di archiviazione, l'azione Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey deve essere impostata come ambito a livello dell'account di archiviazione, del gruppo di risorse o della sottoscrizione. Se all'entità di sicurezza sono assegnati uno dei ruoli predefiniti elencati in precedenza o un ruolo personalizzato che include l'azione Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey , a livello dell'account di archiviazione, del gruppo di risorse o della sottoscrizione, l'entità di sicurezza può quindi richiedere la chiave di delega utente.

Se all'entità di sicurezza viene assegnato un ruolo che consente l'accesso ai dati ma con ambito al livello di un contenitore, è anche possibile assegnare il ruolo delegato del BLOB di archiviazione all'entità di sicurezza a livello di account di archiviazione, gruppo di risorse o sottoscrizione. Il ruolo delegato del BLOB di archiviazione concede all'entità di sicurezza le autorizzazioni per richiedere la chiave di delega dell'utente.

Per altre informazioni sui ruoli controllo degli accessi in base al ruolo per Archiviazione di Azure, vedere Autorizzare con Azure Active Directory.

Acquisire un token OAuth 2.0

Per ottenere la chiave di delega utente, richiedere prima di tutto un token OAuth 2.0 da Microsoft Entra ID. Specificare il token con lo schema Bearer per autorizzare la chiamata all'operazione Get User Delegation Key . Per altre informazioni sulla richiesta di un token OAuth da Microsoft Entra ID, vedere Flussi di autenticazione e scenari di applicazione.

Richiedere la chiave di delega utente

Una chiamata all'operazione Get User Delegation Key restituisce la chiave come set di valori usati come parametri nel token di firma di accesso condiviso della delega utente. Questi parametri sono descritti nel riferimento Get User Delegation Key (Ottieni chiave di delega utente ) e nella sezione successiva "Costruire una firma di accesso condiviso della delega utente".

Quando un client richiede una chiave di delega utente usando un token OAuth 2.0, Archiviazione di Azure restituisce la chiave di delega utente per conto dell'entità di sicurezza. Alla firma di accesso condiviso creata con la chiave di delega utente sono concesse le autorizzazioni concesse all'entità di sicurezza.

Dopo aver ottenuto la chiave di delega utente, è possibile usarla per creare un numero qualsiasi di firme di accesso condiviso di delega utente per tutta la durata della chiave. La chiave di delega utente è indipendente dal token OAuth 2.0 usato per acquisirlo, quindi il token non deve essere rinnovato purché la chiave sia ancora valida. È possibile specificare che la chiave è valida per un periodo massimo di sette giorni.

Costruire una firma di accesso condiviso della delega utente

La tabella seguente riepiloga i campi supportati per un token di firma di accesso condiviso della delega utente. Le sezioni successive forniscono informazioni aggiuntive su come specificare questi parametri.

Nome campo firma di accesso condiviso Parametro del token di firma di accesso condiviso Obbligatoria o facoltativa Supporto versione Descrizione
signedVersion sv Obbligatoria 2018-11-09 e versioni successive Indica la versione del servizio utilizzata per costruire il campo della firma. Specifica anche la versione del servizio che gestisce le richieste effettuate con questa firma di accesso condiviso.
signedResource sr Necessario Tutti Specifica le risorse BLOB accessibili tramite la firma di accesso condiviso.
signedStart st Facoltativo Tutti facoltativo. Ora in cui la firma di accesso condiviso diventa valida, espressa in uno dei formati ISO 8601 UTC accettati. Se questo valore viene omesso, l'ora UTC corrente viene usata come ora di inizio. Per altre informazioni sui formati UTC accettati, vedere Formattare i valori DateTime.
signedExpiry se Necessario Tutti Ora in cui la firma di accesso condiviso diventa non valida, espressa in uno dei formati ISO 8601 UTC accettati. Per altre informazioni sui formati UTC accettati, vedere Formattare i valori DateTime.
signedPermissions sp Necessario Tutti Indica le operazioni che un client che possiede la firma di accesso condiviso può eseguire sulla risorsa. Le autorizzazioni possono essere combinate.
signedIp sip Facoltativo 2015-04-05 e versioni successive Specifica un indirizzo IP o un intervallo inclusivo di indirizzi IP da cui accettare le richieste. Quando si specifica un intervallo, tenere presente che l'intervallo è inclusivo. Sono supportati solo gli indirizzi IPv4.

Ad esempio, sip=168.1.5.65 o sip=168.1.5.60-168.1.5.70.
signedProtocol spr Facoltativo 2015-04-05 e versioni successive Specifica il protocollo consentito per una richiesta effettuata con la firma di accesso condiviso. Includere questo campo per richiedere che le richieste effettuate con il token di firma di accesso condiviso usino HTTPS.
signedObjectId skoid Necessario 2018-11-09 e versioni successive Identifica un'entità di sicurezza Microsoft Entra.
signedTenantId sktid Necessario 2018-11-09 e versioni successive Specifica il tenant Microsoft Entra in cui è definita un'entità di sicurezza.
signedKeyStartTime skt facoltativo. 2018-11-09 e versioni successive Il valore viene restituito dall'operazione Get User Delegation Key.The value is returned by the Get User Delegation Key operation. Indica l'inizio della durata della chiave di delega utente, espressa in uno dei formati ISO 8601 UTC accettati. Se il valore viene omesso, viene utilizzato l'ora corrente. Per altre informazioni sui formati UTC accettati, vedere Formattare i valori DateTime.
signedKeyExpiryTime ske Necessario 2018-11-09 e versioni successive Il valore viene restituito dall'operazione Get User Delegation Key.The value is returned by the Get User Delegation Key operation. Indica la fine della durata della chiave di delega dell'utente, espressa in uno dei formati ISO 8601 UTC accettati. Per altre informazioni sui formati UTC accettati, vedere Formattare i valori DateTime.
signedKeyVersion skv Necessario 2018-11-09 e versioni successive Il valore viene restituito dall'operazione Get User Delegation Key.The value is returned by the Get User Delegation Key operation. Specifica la versione del servizio di archiviazione usata per ottenere la chiave di delega dell'utente. Questo campo deve specificare la versione 2018-11-09 o successiva.
signedKeyService sks Necessario 2018-11-09 e versioni successive Indica il servizio per il quale la chiave di delega utente è valida. Attualmente è supportata solo l'archiviazione BLOB.
signedAuthorizedObjectId saoid Facoltativo 2020-02-10 e versioni successive Specifica l'ID oggetto per un'entità di sicurezza Microsoft Entra autorizzata dal proprietario della chiave di delega utente per eseguire l'azione concessa dal token di firma di accesso condiviso. Non viene eseguito alcun controllo di autorizzazione aggiuntivo sugli elenchi di controllo di accesso POSIX (Portable Operating System Interface).
signedUnauthorizedObjectId suoid Facoltativo 2020-02-10 e versioni successive Specifica l'ID oggetto per un'entità di sicurezza Microsoft Entra quando è abilitato uno spazio dei nomi gerarchico. Archiviazione di Azure esegue un controllo ACL POSIX rispetto all'ID oggetto prima di autorizzare l'operazione.
signedCorrelationId scid Facoltativo 2020-02-10 e versioni successive Correlare i log di controllo di archiviazione con i log di controllo usati dall'entità che genera e distribuisce la firma di accesso condiviso.
signedDirectoryDepth sdd Obbligatorio quando sr=d 2020-02-10 e versioni successive Indica il numero di directory all'interno della cartella radice della directory specificata nel canonicalizedResource campo della stringa da firmare.
signedEncryptionScope ses Facoltativo 2020-12-06 e versioni successive Indica l'ambito di crittografia da usare per crittografare il contenuto della richiesta.
signature sig Necessario Tutti La firma è un codice HMAC (Hash-Based Message Authentication Code) calcolato sulla stringa da firmare e sulla chiave usando l'algoritmo SHA256 e quindi codificato usando la codifica Base64.
Cache-Control intestazione della risposta rscc Facoltativo 2013-08-15 e versioni successive Archiviazione di Azure imposta l'intestazione della Cache-Control risposta sul valore specificato nel token di firma di accesso condiviso.
Content-Disposition intestazione della risposta rscd Facoltativo 2013-08-15 e versioni successive Archiviazione di Azure imposta l'intestazione della Content-Disposition risposta sul valore specificato nel token di firma di accesso condiviso.
Content-Encoding intestazione della risposta rsce Facoltativo 2013-08-15 e versioni successive Archiviazione di Azure imposta l'intestazione della Content-Encoding risposta sul valore specificato nel token di firma di accesso condiviso.
Content-Language intestazione della risposta rscl Facoltativo 2013-08-15 e versioni successive Archiviazione di Azure imposta l'intestazione della Content-Language risposta sul valore specificato nel token di firma di accesso condiviso.
Content-Type intestazione della risposta rsct Facoltativo 2013-08-15 e versioni successive Archiviazione di Azure imposta l'intestazione della Content-Type risposta sul valore specificato nel token di firma di accesso condiviso.

Specificare il campo versione firmata

Il campo obbligatorio signedVersion (sv) specifica la versione del servizio per la firma di accesso condiviso. Questo valore indica la versione del servizio usata per costruire il signature campo e specifica la versione del servizio che gestisce una richiesta effettuata con questa firma di accesso condiviso. Il valore del sv campo deve essere la versione 2018-11-09 o successiva.

Specificare il campo della risorsa firmata

Il campo obbligatorio signedResource (sr) specifica le risorse accessibili tramite la firma di accesso condiviso. La tabella seguente descrive come fare riferimento a una risorsa BLOB, contenitore o directory nel token di firma di accesso condiviso:

Risorsa Valore del parametro Versioni supportate Descrizione
BLOB b Tutti Concede l'accesso al contenuto e ai metadati del BLOB.
Versione del BLOB Bv 2018-11-09 e versioni successive Concede l'accesso al contenuto e ai metadati della versione del BLOB, ma non al BLOB di base.
Snapshot del BLOB bs 2018-11-09 e versioni successive Concede l'accesso al contenuto e ai metadati dello snapshot DEL BLOB, ma non al BLOB di base.
Contenitore c Tutti Concede l'accesso al contenuto e ai metadati di qualsiasi BLOB nel contenitore e all'elenco di BLOB nel contenitore.
Directory d 2020-02-10 e versioni successive Concede l'accesso al contenuto e ai metadati di qualsiasi BLOB nella directory e all'elenco di BLOB nella directory, in un account di archiviazione con uno spazio dei nomi gerarchico abilitato. Se per il signedResource campo viene specificata una directory, è necessario anche il signedDirectoryDepth parametro (sdd). Una directory è sempre all'interno di un contenitore.

Specificare la durata della validità della firma

I signedStart campi (st) e signedExpiry (se) indicano le ore di inizio e scadenza per la firma di accesso condiviso. Il campo signedExpiry è obbligatorio. Il campo signedStart è facoltativo. Se viene omesso, l'ora UTC corrente viene usata come ora di inizio.

Per una firma di accesso condiviso della delega utente, le ore di inizio e di scadenza per la firma di accesso condiviso devono essere entro l'intervallo definito per la chiave di delega utente. Se un client tenta di usare una firma di accesso condiviso dopo la scadenza della chiave di delega utente, la firma di accesso condiviso avrà esito negativo con un errore di autorizzazione, indipendentemente dal fatto che la firma di accesso condiviso sia ancora valida.

Per altre informazioni sui formati UTC accettati, vedere Formattare i valori DateTime.

Specificare le autorizzazioni

Le autorizzazioni specificate per il signedPermissions campo (sp) nel token di firma di accesso condiviso indicano le operazioni che un client che possiede la firma di accesso condiviso può eseguire sulla risorsa.

Le autorizzazioni possono essere combinate per consentire a un client di eseguire più operazioni con la stessa firma di accesso condiviso. Quando si costruisce la firma di accesso condiviso, è necessario includere le autorizzazioni nell'ordine seguente:

racwdxltmeop

Esempi di impostazioni di autorizzazioni valide per un contenitore includono rw, , rdrl, wd, wle rl. Esempi di impostazioni non valide includono wr, dr, lre dw. La specifica di una designazione di autorizzazione più volte non è consentita.

Una firma di accesso condiviso della delega utente non può concedere l'accesso a determinate operazioni:

  • Non è possibile creare, eliminare o elencare i contenitori.
  • I metadati e le proprietà del contenitore non possono essere letti o scritti.
  • Non è possibile effettuare il lease dei contenitori.

Per costruire una firma di accesso condiviso che concede l'accesso a queste operazioni, usare una firma di accesso condiviso dell'account. Per altre informazioni, vedere Creare un SAS dell'account.

Le autorizzazioni supportate per ogni tipo di risorsa sono descritte nella tabella seguente:

Autorizzazione Simbolo URI Risorsa Supporto versione Operazioni consentite
Lettura r Contenitore
Directory
BLOB
Tutti Leggere il contenuto, l'elenco di blocchi, le proprietà e i metadati di qualsiasi BLOB nel contenitore o nella directory. Usare un BLOB come origine di un'operazione di copia.
Add a Contenitore
Directory
BLOB
Tutti Aggiungere un blocco a un BLOB di accodamento.
Crea c Contenitore
Directory
BLOB
Tutti Scrivere un nuovo BLOB, creare uno snapshot di un BLOB o copiare un BLOB in un nuovo BLOB.
Scrittura w Contenitore
Directory
BLOB
Tutti Creare o scrivere contenuto, proprietà, metadati o blocklist. Creazione di snapshot o impostazione di lease del BLOB. Ridimensionamento del BLOB (solo BLOB di pagine). Usare il BLOB come destinazione di un'operazione di copia.
Elimina d Contenitore
Directory
BLOB
Tutti Eliminare un BLOB. Per la versione 2017-07-29 e successive, l'autorizzazione Elimina consente anche di interrompere un lease in un BLOB. Per altre informazioni, vedere l'operazione Lease BLOB .
Eliminare la versione x Contenitore
BLOB
2019-12-12 e versioni successive Eliminare una versione del BLOB.
Eliminazione permanente y BLOB 2020-02-10 e versioni successive Eliminare definitivamente uno snapshot o una versione del BLOB.
Elenco l Contenitore
Directory
Tutti Elencare i BLOB in modo non ricorsivo.
Tag t BLOB 2019-12-12 e versioni successive Leggere o scrivere i tag in un BLOB.
Move m Contenitore
Directory
BLOB
2020-02-10 e versioni successive Spostare un BLOB o una directory e il relativo contenuto in una nuova posizione. Questa operazione può essere facoltativamente limitata al proprietario del BLOB, della directory o della directory padre figlio se il saoid parametro è incluso nel token di firma di accesso condiviso e il bit sticky viene impostato nella directory padre.
Esecuzione h Contenitore
Directory
BLOB
2020-02-10 e versioni successive Ottenere le proprietà di sistema e, se lo spazio dei nomi gerarchico è abilitato per l'account di archiviazione, ottenere l'ACL POSIX di un BLOB. Se lo spazio dei nomi gerarchico è abilitato e il chiamante è il proprietario di un BLOB, questa autorizzazione concede la possibilità di impostare il gruppo proprietario, le autorizzazioni POSIX e l'ACL POSIX del BLOB. Non consente al chiamante di leggere i metadati definiti dall'utente.
Proprietario o Contenitore
Directory
BLOB
2020-02-10 e versioni successive Quando lo spazio dei nomi gerarchico è abilitato, questa autorizzazione consente al chiamante di impostare il proprietario o il gruppo proprietario oppure di agire come proprietario quando il chiamante rinomina o elimina una directory o un BLOB all'interno di una directory con il bit sticky impostato.
Autorizzazioni p Contenitore
Directory
BLOB
2020-02-10 e versioni successive Quando lo spazio dei nomi gerarchico è abilitato, questa autorizzazione consente al chiamante di impostare le autorizzazioni e gli ACL POSIX nelle directory e nei BLOB.
Impostare i criteri di immutabilità i Contenitore
BLOB
2020-06-12 e versioni successive Impostare o eliminare i criteri di immutabilità o il blocco a fini giudiziari in un BLOB.

Specificare un indirizzo IP o un intervallo IP

Il campo facoltativo signedIp (sip) specifica un indirizzo IP pubblico o un intervallo di indirizzi IP pubblici da cui accettare le richieste. Se l'indirizzo IP da cui ha origine la richiesta non corrisponde all'indirizzo IP o all'intervallo di indirizzi specificato nel token di firma di accesso condiviso, la richiesta non è autorizzata. Sono supportati solo gli indirizzi IPv4.

Quando si specifica un intervallo di indirizzi IP, l'intervallo è inclusivo. Se ad esempio si specifica sip=168.1.5.65 o sip=168.1.5.60-168.1.5.70 nella firma di accesso condiviso, la richiesta viene limitazione a tali indirizzi IP.

Nella tabella seguente viene descritto se includere il signedIp campo in un token di firma di accesso condiviso per uno scenario specifico, in base all'ambiente client e alla posizione dell'account di archiviazione.

Ambiente client Posizione dell'account di archiviazione Recommendation
Client in esecuzione in Azure Nella stessa area del client Una firma di accesso condiviso fornita al client in questo scenario non deve includere un indirizzo IP in uscita per il signedIp campo. Le richieste effettuate dall'interno della stessa area usando una firma di accesso condiviso con un indirizzo IP in uscita specificato avranno esito negativo.

Usare invece una rete virtuale di Azure per gestire le restrizioni di sicurezza di rete. Le richieste ad Archiviazione di Azure dall'interno della stessa area avvengono sempre tramite un indirizzo IP privato. Per altre informazioni, vedere Configurare i firewall e le reti virtuali di Archiviazione di Azure.
Client in esecuzione in Azure In un'area diversa dal client Una firma di accesso condiviso fornita al client in questo scenario può includere un indirizzo IP pubblico o un intervallo di indirizzi per il signedIp campo. Le richieste eseguite con la firma di accesso condiviso devono provenire dall'indirizzo IP o dall'intervallo di indirizzi specificato.
Client in esecuzione in locale o in un ambiente cloud diverso In qualsiasi area di Azure Una firma di accesso condiviso fornita al client in questo scenario può includere un indirizzo IP pubblico o un intervallo di indirizzi per il signedIp campo. Le richieste eseguite con la firma di accesso condiviso devono provenire dall'indirizzo IP o dall'intervallo di indirizzi specificato.

Se la richiesta passa attraverso un proxy o un gateway, specificare l'indirizzo IP in uscita pubblico del proxy o del gateway per il signedIp campo.

Specificare il protocollo HTTP

Il campo facoltativo signedProtocol (spr) specifica il protocollo consentito per le richieste effettuate con la firma di accesso condiviso. I valori possibili sono solo HTTPS e HTTP (https,http) o HTTPS (https). Il valore predefinito è https,http.

Nota

Non è possibile specificare HTTP per il spr campo.

Specificare l'ID oggetto firmato

Il signedObjectId campo (skoid) è obbligatorio per una firma di accesso condiviso della delega utente. L'operazione Get User Delegation Key restituisce questo valore come parte della risposta. L'ID oggetto firmato è un valore GUID che serve l'identificatore non modificabile per un'entità di sicurezza nel Microsoft Identity Platform.

Specificare l'ID tenant firmato

Il signedTenantId campo (sktid) è obbligatorio per una firma di accesso condiviso della delega utente. L'operazione Get User Delegation Key restituisce questo valore come parte della risposta. L'ID tenant firmato è un valore GUID che rappresenta il tenant Microsoft Entra in cui è definita un'entità di sicurezza.

Specificare l'ora di inizio della chiave firmata

Il campo facoltativo signedKeyStartTime (skt) indica l'inizio della durata della chiave di delega utente in formato DATA ISO. L'operazione Get User Delegation Key restituisce questo valore come parte della risposta. Se l'ora di inizio viene omessa, si presuppone che l'ora di inizio della chiave firmata sia l'ora corrente.

Specificare l'ora di scadenza della chiave firmata

Il signedKeyExpiryTime campo (ske) è obbligatorio per una firma di accesso condiviso della delega utente in formato data ISO. L'operazione Get User Delegation Key restituisce questo valore come parte della risposta. L'ora di scadenza della chiave firmata indica la fine della durata della chiave di delega dell'utente. Il valore dell'ora di scadenza può essere un massimo di sette giorni dall'ora di inizio della firma di accesso condiviso.

Specificare il servizio chiavi firmate

Il signedKeyService campo (sks) è obbligatorio per una firma di accesso condiviso della delega utente. L'operazione Get User Delegation Key restituisce questo valore come parte della risposta. Il campo servizio chiave firmata indica il servizio per il quale la chiave di delega dell'utente è valida. Il valore per il campo del servizio chiavi firmato per l'archiviazione BLOB è b.

Specificare la versione della chiave firmata

Il signedkeyversion campo (skv) è obbligatorio per una firma di accesso condiviso della delega utente. L'operazione Get User Delegation Key restituisce questo valore come parte della risposta. Il signedkeyversion campo specifica la versione del servizio di archiviazione usata per ottenere la chiave di delega utente. Questo campo deve specificare la versione 2018-11-09 o successiva.

Specificare un ID oggetto firmato per un'entità di sicurezza

I campi facoltativi signedAuthorizedObjectId (saoid) e signedUnauthorizedObjectId (suoid) consentono l'integrazione con Apache Hadoop e Apache Ranger per Azure Data Lake Storage Gen2 carichi di lavoro. Usare uno di questi campi nel token di firma di accesso condiviso per specificare l'ID oggetto per un'entità di sicurezza:

  • Il saoid campo specifica l'ID oggetto per un'entità di sicurezza Microsoft Entra autorizzata dal proprietario della chiave di delega utente per eseguire l'azione concessa dal token di firma di accesso condiviso. Archiviazione di Azure convalida il token di firma di accesso condiviso e garantisce che il proprietario della chiave di delega utente disponga delle autorizzazioni necessarie prima che Archiviazione di Azure concede l'accesso. Non viene eseguito alcun controllo delle autorizzazioni aggiuntive sugli ACL POSIX.
  • Il suoid campo specifica l'ID oggetto per un'entità di sicurezza Microsoft Entra quando uno spazio dei nomi gerarchico è abilitato per un account di archiviazione. Il suoid campo è valido solo per gli account con uno spazio dei nomi gerarchico. Quando il suoid campo è incluso nel token di firma di accesso condiviso, Archiviazione di Azure esegue un controllo POSIX ACL rispetto all'ID oggetto prima di autorizzare l'operazione. Se il controllo ACL non riesce, l'operazione ha esito negativo. Se il suoid campo è incluso nel token di firma di accesso condiviso, è necessario abilitare uno spazio dei nomi gerarchico per l'account di archiviazione. In caso contrario, il controllo delle autorizzazioni avrà esito negativo con un errore di autorizzazione.

ID oggetto per l'entità di sicurezza che richiede la chiave di delega utente viene acquisita nel campo obbligatorio skoid . Per specificare un ID oggetto nel token sas con il saoid campo o suoid , l'entità di sicurezza identificata nel skoid campo deve essere assegnata un ruolo RBAC che include Microsoft.Storage/storageAccounts/BLOBServices/containers/blobs/runAsSuperUser/action o Microsoft.Storage/storageAccounts/blobServices/containers/blobs/manageOwnership/action. Per altre informazioni su queste azioni, vedere Operazioni del provider di risorse di Azure.

Specificando l'ID oggetto nel saoid campo o suoid si limitano anche le operazioni correlate alla proprietà della directory o del BLOB, nei modi seguenti:

  • Se un'operazione crea una directory o un BLOB, Archiviazione di Azure imposta il proprietario della directory o del BLOB sul valore specificato dall'ID oggetto. Se l'ID oggetto non è specificato, Archiviazione di Azure imposta il proprietario della directory o del BLOB sul valore specificato dal skoid parametro .
  • Se il bit bastone viene impostato nella directory padre e l'operazione elimina o rinomina una directory o un BLOB, l'ID oggetto del proprietario della directory padre o il proprietario della risorsa deve corrispondere al valore specificato dall'ID oggetto.
  • Se un'operazione imposta il proprietario per una directory o un BLOB e x-ms-owner l'intestazione viene specificata, il valore specificato dall'ID oggetto deve corrispondere al valore specificato dall'intestazione x-ms-owner .
  • Se un'operazione imposta il gruppo per una directory o un BLOB e x-ms-group l'intestazione viene specificata, il valore specificato dall'ID oggetto deve essere un membro del gruppo specificato dall'intestazione x-ms-group .
  • Se un'operazione imposta le autorizzazioni o l'elenco di controllo di accesso per una directory o un BLOB, è necessario soddisfare anche una delle due condizioni seguenti:
    • Il valore specificato per l'ID oggetto deve essere il proprietario della directory o del BLOB.
    • Il valore del campo () deve includere l'autorizzazione () oltre all'autorizzazione Permissions (po).spsignedPermissionsOwnership

L'ID oggetto specificato nel campo o suoid è incluso nei saoid log di diagnostica quando si effettuano richieste usando il token di firma di accesso condiviso.

Il saoid campo o suoid è supportato solo se il signedVersion campo (sv) è impostato sulla versione 2020-02-10 o successiva. Solo uno di questi campi può essere incluso nel token di firma di accesso condiviso.

Specificare un ID di correlazione

Il signedCorrelationId campo (scid) specifica un ID di correlazione che può essere usato per correlare i log di controllo di archiviazione con i log di controllo usati dall'entità che genera e distribuisce la firma di accesso condiviso. Ad esempio, un servizio di autorizzazione attendibile ha un'identità gestita che autentica e autorizza gli utenti, genera una firma di accesso condiviso, aggiunge una voce al log di controllo locale e restituisce la firma di accesso condiviso a un utente, che può quindi usare la firma di accesso condiviso per accedere alle risorse di Archiviazione di Azure. Includendo un ID correlazione nel log di controllo locale e nel log di controllo di archiviazione, è possibile correlare questi eventi in un secondo momento. Il valore è un GUID senza parentesi graffe e con caratteri minuscoli.

Questo campo è supportato con la versione 2020-02-10 e versioni successive.

Specificare la profondità della directory

Se il signedResource campo specifica una directory (), è necessario specificare anche il campo (sr=dsdd) per indicare il signedDirectoryDepth numero di sottodirectory nella directory radice. Il valore del sdd campo deve essere un intero non negativo.

Ad esempio, la directory https://{account}.blob.core.windows.net/{container}/ radice ha una profondità di 0. Ogni sottodirectory all'interno della directory radice aggiunge alla profondità di 1. La directory https://{account}.blob.core.windows.net/{container}/d1/d2 ha una profondità di 2.

Questo campo è supportato con la versione 2020-02-10 e versioni successive.

Specificare i parametri di query per eseguire l'override delle intestazioni di risposta

Per definire valori che consentono la restituzione di determinate intestazioni della risposta quando si utilizza una firma di accesso condiviso in una richiesta, è possibile specificare tali intestazioni nei parametri di query. Le intestazioni della risposta e i corrispondenti parametri di query sono i seguenti:

Nome dell'intestazione della risposta Parametro della query SAS corrispondente
Cache-Control rscc
Content-Disposition rscd
Content-Encoding rsce
Content-Language rscl
Content-Type rsct

Ad esempio, se si specifica il parametro di query in un token di firma di accesso condiviso, l'intestazione rsct=binary della Content-Type risposta è impostata su binary. Tramite questo valore, l'override del valore dell'intestazione Content-Type archiviato per il BLOB viene eseguito solo per le richieste che utilizzano la firma di accesso condiviso in questione.

Se si crea una firma di accesso condiviso che specifica le intestazioni di risposta come parametri di query, è necessario includere tali intestazioni di risposta nella stringa da firmare usata per costruire la stringa di firma. Per altre informazioni, vedere la sezione "Specificare la firma".

Specificare l'ambito di crittografia

Il signed encryption scope campo (ses) specifica un ambito di crittografia usato dall'applicazione client quando si caricano BLOB usando il token SAS tramite l'operazione Put BLOB . Il signed encryption scope campo è supportato quando il campo della versione firmata (sv) nel token di firma di accesso condiviso è la versione 2020-12-06 o successiva. Se il campo versione firmata specifica una versione precedente alla versione supportata, il servizio restituisce il codice di risposta di errore 403 (non consentito).

Se l'ambito di crittografia predefinito è impostato per il contenitore o il file system, il ses campo rispetta i criteri di crittografia del contenitore. Se è presente una mancata corrispondenza tra il parametro di query e x-ms-default-encryption-scope l'intestazione ses e l'intestazione è impostata su true, il servizio restituisce il x-ms-deny-encryption-scope-override codice di risposta di errore 403 (Non consentito).

Se l'intestazione e il x-ms-encryption-scopeses parametro di query sono entrambi forniti nella richiesta PUT e si verifica una mancata corrispondenza, il servizio restituisce il codice di risposta di errore 400 (richiesta non valida).

Specificare la firma

Il signature campo (sig) viene usato per autorizzare una richiesta effettuata da un client con la firma di accesso condiviso. La stringa da firmare è una stringa univoca creata dai campi che devono essere verificati per autorizzare la richiesta. La firma è un HMAC calcolato tramite la codifica Base64 tramite l'algoritmo SHA256 e quindi codificato tramite la codifica Base64.

Per costruire la stringa di firma di una firma di accesso condiviso di delega utente, creare la stringa da firmare dai campi che costituiscono la richiesta, codificare la stringa come UTF-8 e quindi calcolare la firma usando l'algoritmo HMAC-SHA256. I campi inclusi nella stringa da firmare devono essere decodificati dall'URL.

I campi necessari nella stringa da firmare dipendono dalla versione del servizio usata per l'autorizzazione (sv campo). Le sezioni seguenti descrivono la configurazione di stringa da firmare per le versioni che supportano la firma di accesso condiviso della delega utente.

Versione 2020-12-06 e versioni successive

La stringa da firmare per l'autorizzazione versione 2020-12-06 e successiva ha il formato seguente:

StringToSign =  signedPermissions + "\n" +
                signedStart + "\n" +
                signedExpiry + "\n" +
                canonicalizedResource + "\n" +
                signedKeyObjectId + "\n" +
                signedKeyTenantId + "\n" +
                signedKeyStart + "\n" +
                signedKeyExpiry  + "\n" +
                signedKeyService + "\n" +
                signedKeyVersion + "\n" +
                signedAuthorizedUserObjectId + "\n" +
                signedUnauthorizedUserObjectId + "\n" +
                signedCorrelationId + "\n" +
                signedIP + "\n" +
                signedProtocol + "\n" +
                signedVersion + "\n" +
                signedResource + "\n" +
                signedSnapshotTime + "\n" +
                signedEncryptionScope + "\n" +
                rscc + "\n" +
                rscd + "\n" +
                rsce + "\n" +
                rscl + "\n" +
                rsct

Versione 2020-02-10

La stringa da firmare per l'autorizzazione versione 2020-02-10 ha il formato seguente:

StringToSign =  signedPermissions + "\n" +
                signedStart + "\n" +
                signedExpiry + "\n" +
                canonicalizedResource + "\n" +
                signedKeyObjectId + "\n" +
                signedKeyTenantId + "\n" +
                signedKeyStart + "\n" +
                signedKeyExpiry  + "\n" +
                signedKeyService + "\n" +
                signedKeyVersion + "\n" +
                signedAuthorizedUserObjectId + "\n" +
                signedUnauthorizedUserObjectId + "\n" +
                signedCorrelationId + "\n" +
                signedIP + "\n" +
                signedProtocol + "\n" +
                signedVersion + "\n" +
                signedResource + "\n" +
                signedSnapshotTime + "\n" +
                rscc + "\n" +
                rscd + "\n" +
                rsce + "\n" +
                rscl + "\n" +
                rsct

Versioni precedenti al 2020-02-10

La stringa da firmare per le versioni di autorizzazione precedenti al 2020-02-10 ha il formato seguente:

StringToSign =  signedPermissions + "\n" +  
                signedStart + "\n" +  
                signedExpiry + "\n" +  
                canonicalizedResource + "\n" +  
                signedKeyObjectId + "\n" +
                signedKeyTenantId + "\n" +
                signedKeyStart + "\n" +
                signedKeyExpiry  + "\n" +
                signedKeyService + "\n" +
                signedKeyVersion + "\n" +
                signedAuthorizedUserObjectId + "\n" +
                signedUnauthorizedUserObjectId + "\n" +
                signedCorrelationId + "\n" +
                signedIP + "\n" +  
                signedProtocol + "\n" +  
                signedVersion + "\n" +  
                signedResource + "\n" +
                rscc + "\n" +
                rscd + "\n" +  
                rsce + "\n" +  
                rscl + "\n" +  
                rsct

Risorsa canonica

La parte canonicalizedResource della stringa è un percorso canonico della risorsa firmata. Deve includere l'endpoint di archiviazione BLOB e il nome della risorsa e deve essere decodificato dall'URL. Un percorso BLOB deve includere il relativo contenitore. Un percorso della directory deve includere il numero di sottodirectory corrispondenti al sdd parametro.

La stringa di risorsa canonica per un contenitore deve omettere la barra finale (/) per una firma di accesso condiviso che fornisce l'accesso a tale contenitore.

Negli esempi seguenti viene illustrato come costruire la canonicalizedResource parte della stringa, a seconda del tipo di risorsa.

Esempio di contenitore (Archiviazione BLOB di Azure)
URL = https://myaccount.blob.core.windows.net/music  
canonicalizedResource = "/blob/myaccount/music"  
Esempio blob (Archiviazione BLOB di Azure)
URL = https://myaccount.blob.core.windows.net/music/intro.mp3  
canonicalizedResource = "/blob/myaccount/music/intro.mp3"  
Esempio di contenitore (Azure Data Lake Storage Gen2)
URL = https://myaccount.dfs.core.windows.net/music  
canonicalizedResource = "/blob/myaccount/music"  
Esempio di directory (Azure Data Lake Storage Gen2)
URL = https://myaccount.dfs.core.windows.net/music/instruments/guitar/  
canonicalizedResource = "/blob/myaccount/music/instruments/guitar/"  
Esempio BLOB (Azure Data Lake Storage Gen2)
URL = https://myaccount.dfs.core.windows.net/music/intro.mp3  
canonicalizedResource = "/blob/myaccount/music/intro.mp3"  

Campi facoltativi

Se un campo è facoltativo e non fornito come parte del token di firma di accesso condiviso, specificare una stringa vuota per il campo. Assicurarsi di includere il carattere di nuova riga (\n) dopo la stringa vuota.

Esempio di firma di accesso condiviso di delega utente

Nell'esempio seguente viene illustrato un URI BLOB con un token di firma di accesso condiviso della delega utente aggiunto. Il token di firma di accesso condiviso di delega utente fornisce autorizzazioni di lettura e scrittura nel BLOB.

https://myaccount.blob.core.windows.net/sascontainer/blob1.txt?sp=rw&st=2023-05-24T01:13:55Z&se=2023-05-24T09:13:55Z&skoid=<object-id>&sktid=<tenant-id>&skt=2023-05-24T01:13:55Z&ske=2023-05-24T09:13:55Z&sks=b&skv=2022-11-02&sip=168.1.5.60-168.1.5.70&spr=https&sv=2022-11-02&sr=b&sig=<signature>

Ogni parte dell'URI è descritta nella tabella seguente:

Nome Parte firma di accesso condiviso Descrizione
URI della risorsa https://myaccount.blob.core.windows.net/sascontainer/blob1.txt Indirizzo del BLOB. È consigliabile usare HTTPS.
Delimitatore ? Delimitatore che precede la stringa di query. Il delimitatore non fa parte del token di firma di accesso condiviso.
Autorizzazioni sp=rw Le autorizzazioni concesse dalla firma di accesso condiviso includono lettura (r) e scrittura (w).
Ora di inizio st=2023-05-24T01:13:55Z Specificata nell'ora UTC. Se si desidera che la firma di accesso condiviso sia immediatamente valida, omettere l'ora di inizio.
Scadenza se=2023-05-24T09:13:55Z Specificata nell'ora UTC.
ID dell'oggetto. skoid=<object-id> Entità di sicurezza Microsoft Entra.
ID tenant sktid=<tenant-id> Tenant Microsoft Entra in cui è registrata l'entità di sicurezza.
Ora di inizio chiave skt=2023-05-24T01:13:55Z Inizio della durata della chiave di delega utente.
Tempo di scadenza della chiave ske=2023-05-24T09:13:55Z Fine della durata della chiave di delega utente.
Servizio chiave sks=b Solo il servizio BLOB è supportato per il valore del servizio.
Versione della chiave skv=2022-11-02 Versione del servizio di archiviazione usata per ottenere la chiave di delega utente.
Intervallo IP sip=168.1.5.60-168.1.5.70 Intervallo di indirizzi IP da cui verrà accettata una richiesta.
Protocollo spr=https Sono consentite solo le richieste che usano HTTPS.
Versione del servizio BLOB sv=2022-11-02 Per Archiviazione di Azure versione 2012-02-12 e successive questo parametro indica la versione da usare.
Risorsa sr=b La risorsa è un BLOB.
Firma sig=<signature> Usata per autorizzare l'accesso al BLOB. La firma è un HMAC calcolato su una stringa da firmare e chiave usando l'algoritmo SHA256 e quindi codificato usando la codifica Base64.

Revocare una firma di accesso condiviso di delega utente

Se si ritiene che una firma di accesso condiviso sia stata compromessa, è necessario revocarla. È possibile revocare una firma di accesso condiviso di delega utente revocando la chiave di delega utente oppure modificando o rimuovendo le assegnazioni di ruolo RBAC per l'entità di sicurezza usata per creare la firma di accesso condiviso.

Importante

Sia la chiave di delega utente che le assegnazioni di ruolo RBAC vengono memorizzate nella cache da Archiviazione di Azure, pertanto potrebbe verificarsi un ritardo tra quando si avvia il processo di revoca e quando una firma di accesso condiviso di delega utente esistente non è valida.

Revocare la chiave di delega utente

È possibile revocare la chiave di delega utente chiamando l'operazione Revoca chiavi di delega utente . Quando si revoca la chiave di delega utente, tutte le firme di accesso condiviso che si basano su tale chiave diventano non valide. È quindi possibile chiamare nuovamente l'operazione Recupera chiave delega utente e usare la chiave per creare nuove firme di accesso condiviso. Si tratta del modo più rapido per revocare una firma di accesso condiviso di delega utente.

Modificare o rimuovere le assegnazioni di ruolo

È possibile modificare o rimuovere l'assegnazione di ruolo RBAC per l'entità di sicurezza usata per creare la firma di accesso condiviso. Quando un client usa la firma di accesso condiviso per accedere a una risorsa, Archiviazione di Azure verifica che l'entità di sicurezza le cui credenziali sono state usate per proteggere la firma di accesso condiviso disponga delle autorizzazioni necessarie per la risorsa.

Vedi anche