Creare una firma di accesso condiviso per la delega utente
Importante
Per una sicurezza ottimale, Microsoft consiglia di usare l'ID Entra di Microsoft con identità gestite per autorizzare le richieste nei dati blob, code e tabelle, quando possibile. L'autorizzazione con l'ID e le identità gestite di Microsoft Entra offre sicurezza e facilità di utilizzo superiori rispetto all'autorizzazione con chiave condivisa. Per altre informazioni, vedere Autorizzare con Microsoft Entra ID. Per altre informazioni sulle identità gestite, vedere Informazioni sulle identità gestite per le risorse di Azure.
Per le risorse ospitate all'esterno di Azure, ad esempio le applicazioni locali, è possibile usare le identità gestite tramite Azure Arc. Ad esempio, le app in esecuzione nei server abilitati per Azure Arc possono usare le identità gestite per connettersi ai servizi di Azure. Per altre informazioni, vedere Eseguire l'autenticazione con le risorse di Azure con i server abilitati per Azure Arc.
È possibile proteggere un token di firma di accesso condiviso per l'accesso a un contenitore, una directory o un BLOB usando le credenziali di Microsoft Entra o una chiave dell'account. Una firma di accesso condiviso protetta con le credenziali di Microsoft Entra viene chiamata delega utente firma di accesso condiviso. Come procedura consigliata per la sicurezza, è consigliabile usare le credenziali di Microsoft Entra quando possibile, anziché 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 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 utente, chiamare l'operazione di get user delegation key (Ottieni chiave di delega utente). È quindi possibile usare la chiave di delega utente per creare la firma di accesso condiviso.
Una firma di accesso condiviso delega utente è supportata per Archiviazione BLOB di Azure e Azure Data Lake Storage. I criteri di accesso archiviati non sono supportati per una firma di accesso condiviso delega utente.
Cautela
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 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. 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 un di 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 di delega utente supporta l'ambito della directory (sr=d
) quando la versione di autorizzazione (sv
) è 2020-02-10 o successiva e uno spazio dei nomi gerarchico (HNS) è abilitato. 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 si specifica sr=d
, è necessario anche il parametro di query sdd
.
Il formato da stringa a segno per l'autorizzazione versione 2020-02-10 rimane 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 incluso nel parametro saoid
o suoid
quando la versione di autorizzazione (sv
) è 2020-02-10 o successiva. I parametri saoid
e suoid
corrispondono all'entità di sicurezza per l'utente finale che usa la firma di accesso condiviso e forniscono 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.
Per altre informazioni sui parametri facoltativi saoid
e suoid
, vedere Specificare un ID oggetto utente firmato.
Autorizzare una firma di accesso condiviso di delega utente
Quando un client accede a una risorsa di archiviazione BLOB con una firma di accesso condiviso delega utente, la richiesta ad Archiviazione di Azure è autorizzata con le credenziali di Microsoft Entra usate per creare la firma di accesso condiviso. L'accesso del client alla risorsa è determinato dalle autorizzazioni seguenti:
- Autorizzazioni di controllo degli accessi in base al ruolo concesse all'entità di sicurezza Microsoft Entra che ha richiesto la chiave di delega utente.
- Autorizzazioni ACL (Access Control List) POSIX concesse all'entità di sicurezza che ha richiesto la chiave di delega utente. Questo controllo aggiuntivo si verifica solo quando le autorizzazioni di controllo degli accessi in base al ruolo non possono concedere l'accesso e solo quando lo spazio dei nomi gerarchico è abilitato nell'account di archiviazione.
- Autorizzazioni concesse in modo esplicito al token di firma di accesso condiviso.
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 le credenziali di Microsoft Entra è 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 campo signedPermissions
(sp
) . Se non viene concessa un'autorizzazione all'entità di sicurezza tramite RBAC o ACL POSIX 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 di delega utente, assicurarsi che le autorizzazioni concesse tramite il controllo degli accessi in base al ruolo e gli ACL POSIX concessi tramite il token di firma di accesso condiviso siano allineati al livello di accesso richiesto dal client.
Per creare una firma di accesso condiviso di delega utente, eseguire le operazioni seguenti:
- Usare il controllo degli accessi in base al ruolo o gli ACL POSIX per concedere le autorizzazioni desiderate all'entità di sicurezza che richiederà la chiave di delega utente.
- Acquisire un token OAuth 2.0 da Microsoft Entra ID.
- Usare il token per richiedere la chiave di delega utente chiamando l'operazione di get user delegation key (Ottieni chiave di delega utente).
- 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 utente deve disporre delle autorizzazioni appropriate per farlo. Un'entità di sicurezza di 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 del controllo degli accessi in base al ruolo seguenti includono l'azione Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey, esplicitamente o come parte di una definizione con caratteri jolly:
- collaboratore
- collaboratore dell'account di archiviazione
- collaboratore ai dati dei BLOB di archiviazione di
- proprietario dei dati dei BLOB di archiviazione
- lettore di dati BLOB di archiviazione
- delegato blob di archiviazione
Poiché l'operazione Get User Delegation Key agisce a livello dell'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 viene assegnato uno dei ruoli predefiniti elencati in precedenza o un ruolo personalizzato che include il Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey azione, 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 ha come ambito il livello di un contenitore, è anche possibile assegnare il ruolo delegante del BLOB di archiviazione ruolo all'entità di sicurezza a livello di account di archiviazione, gruppo di risorse o sottoscrizione. Il delegato del BLOB di archiviazione ruolo concede le autorizzazioni dell'entità di sicurezza per richiedere la chiave di delega utente.
Per altre informazioni sui ruoli controllo degli accessi in base al ruolo per Archiviazione di Azure, vedere Autorizzare con Microsoft Entra.
Acquisire un token OAuth 2.0
Per ottenere la chiave di delega utente, richiedere prima di tutto un token OAuth 2.0 dall'ID Microsoft Entra. Fornire il token con lo schema Bearer per autorizzare la chiamata all'operazione di 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 di 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 nella Ottenere la chiave di delega utente riferimento e nella sezione successiva "Costruire una firma di accesso condiviso di 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 vengono 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 per la delega utente
La tabella seguente riepiloga i campi supportati per un token di firma di accesso condiviso della delega utente. Le sezioni successive forniscono dettagli aggiuntivi su come specificare questi parametri.
Nome campo firma di accesso condiviso | Parametro del token di firma di accesso condiviso | Obbligatorio o facoltativo | Supporto delle versioni | Descrizione |
---|---|---|---|---|
signedVersion |
sv |
Obbligatorio | 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 |
Obbligatorio | Tutto | Specifica le risorse BLOB accessibili tramite la firma di accesso condiviso. |
signedStart |
st |
Opzionale | Tutto | Opzionale. 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 |
Obbligatorio | Tutto | Ora in cui la firma di accesso condiviso 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 |
Obbligatorio | Tutto | Indica le operazioni che un client che possiede la firma di accesso condiviso può eseguire sulla risorsa. Le autorizzazioni possono essere combinate. |
signedIp |
sip |
Opzionale | 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=198.51.100.0 o sip=198.51.100.10-198.51.100.20 . |
signedProtocol |
spr |
Opzionale | 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 |
Obbligatorio | 2018-11-09 e versioni successive | Specifica l'ID oggetto per un'entità di sicurezza Microsoft Entra. Questo ID oggetto corrisponde all'entità di sicurezza che ha richiesto la chiave di delega utente. Prima di autorizzare l'operazione, Archiviazione di Azure controlla le autorizzazioni di controllo degli accessi in base al ruolo per l'ID oggetto. Se le autorizzazioni di controllo degli accessi in base al ruolo non possono concedere l'accesso, Archiviazione di Azure controlla le autorizzazioni ACL POSIX per l'ID oggetto. |
signedTenantId |
sktid |
Obbligatorio | 2018-11-09 e versioni successive | Specifica il tenant di Microsoft Entra in cui è definita un'entità di sicurezza. |
signedKeyStartTime |
skt |
Obbligatorio. | 2018-11-09 e versioni successive | Il valore viene restituito dall'operazione di get user delegation key |
signedKeyExpiryTime |
ske |
Obbligatorio | 2018-11-09 e versioni successive | Il valore viene restituito dall'operazione di get user delegation key |
signedKeyVersion |
skv |
Obbligatorio | 2018-11-09 e versioni successive | Il valore viene restituito dall'operazione di get user delegation key |
signedKeyService |
sks |
Obbligatorio | 2018-11-09 e versioni successive | Indica il servizio per il quale la chiave di delega utente è valida. Attualmente è supportato solo l'archiviazione BLOB. |
signedAuthorizedObjectId |
saoid |
Opzionale | 2020-02-10 e versioni successive | Specifica l'ID oggetto di 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. Questo ID oggetto corrisponde all'entità di sicurezza per l'utente finale della firma di accesso condiviso. Non viene eseguito alcun controllo di autorizzazione aggiuntivo per gli elenchi di controllo di accesso POSIX .No additional permission check on POSIX access control lists (ACL) is performed. |
signedUnauthorizedObjectId |
suoid |
Opzionale | 2020-02-10 e versioni successive | Specifica l'ID oggetto per un'entità di sicurezza Di Microsoft Entra quando è abilitato uno spazio dei nomi gerarchico. Questo ID oggetto corrisponde all'entità di sicurezza per l'utente finale della firma di accesso condiviso. Archiviazione di Azure esegue un controllo ACL POSIX rispetto all'ID oggetto prima di autorizzare l'operazione. |
signedCorrelationId |
scid |
Opzionale | 2020-02-10 e versioni successive | Correlare i log di controllo dell'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 campo canonicalizedResource della stringa da firmare. |
signedEncryptionScope |
ses |
Opzionale | 2020-12-06 e versioni successive | Indica l'ambito di crittografia da usare per crittografare il contenuto della richiesta. |
signature |
sig |
Obbligatorio | Tutto | La firma è un codice HMAC (Hash-Based Message Authentication Code) calcolato sulla stringa da firmare e chiave usando l'algoritmo SHA256 e quindi codificato usando la codifica Base64. |
intestazione della risposta Cache-Control |
rscc |
Opzionale | 2013-08-15 e versioni successive | Archiviazione di Azure imposta l'intestazione di risposta Cache-Control sul valore specificato nel token di firma di accesso condiviso. |
intestazione della risposta Content-Disposition |
rscd |
Opzionale | 2013-08-15 e versioni successive | Archiviazione di Azure imposta l'intestazione di risposta Content-Disposition sul valore specificato nel token di firma di accesso condiviso. |
intestazione della risposta Content-Encoding |
rsce |
Opzionale | 2013-08-15 e versioni successive | Archiviazione di Azure imposta l'intestazione di risposta Content-Encoding sul valore specificato nel token di firma di accesso condiviso. |
intestazione della risposta Content-Language |
rscl |
Opzionale | 2013-08-15 e versioni successive | Archiviazione di Azure imposta l'intestazione di risposta Content-Language sul valore specificato nel token di firma di accesso condiviso. |
intestazione della risposta Content-Type |
rsct |
Opzionale | 2013-08-15 e versioni successive | Archiviazione di Azure imposta l'intestazione di risposta Content-Type 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 campo signature
e specifica la versione del servizio che gestisce una richiesta effettuata con questa firma di accesso condiviso. Il valore del campo sv
deve essere 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 | Tutto | Concede l'accesso al contenuto e ai metadati del BLOB. |
Versione 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 | B | 2018-11-09 e versioni successive | Concede l'accesso al contenuto e ai metadati dello snapshot BLOB, ma non al BLOB di base. |
Contenitore | c | Tutto | 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 viene specificata una directory per il campo signedResource , è necessario anche il parametro signedDirectoryDepth (sdd ). Una directory è sempre all'interno di un contenitore. |
Specificare la durata della validità della firma
I campi signedStart
(st
) e signedExpiry
(se
) indicano le ore di inizio e di 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, l'ora di inizio e di scadenza per la firma di accesso condiviso deve essere compresa nell'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 campo signedPermissions
(sp
) nel token di firma di accesso condiviso indicano quali operazioni 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
, rd
, rl
, wd
, wl
e rl
. Esempi di impostazioni non valide includono wr
, dr
, lr
e dw
. Non è consentito specificare una designazione di autorizzazione più di una volta.
Una firma di accesso condiviso 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 una firma di accesso condiviso dell'account.
Le autorizzazioni supportate per ogni tipo di risorsa sono descritte nella tabella seguente:
Permesso | Simbolo URI | Risorsa | Supporto delle versioni | Operazioni consentite |
---|---|---|---|---|
Leggere | r | Contenitore Directory Blob |
Tutto | 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. |
Aggiungere | un | Contenitore Directory Blob |
Tutto | Aggiungere un blocco a un BLOB di accodamento. |
Creare | c | Contenitore Directory Blob |
Tutto | Scrivere un nuovo BLOB, creare uno snapshot di un BLOB o copiare un BLOB in un nuovo BLOB. |
Scrivere | w | Contenitore Directory Blob |
Tutto | Creare o scrivere contenuto, proprietà, metadati o blocklist. Snapshot o lease del BLOB. Ridimensionare il BLOB (solo BLOB di pagine). Usare il BLOB come destinazione di un'operazione di copia. |
Cancellare | d | Contenitore Directory Blob |
Tutto | 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. |
Lista | l | Contenitore Directory |
Tutto | Elencare i BLOB in modo non ricorsivo. |
Tag | t | Blob | 2019-12-12 e versioni successive | Leggere o scrivere i tag in un BLOB. |
Sposta | 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 figlio, della directory o della directory padre se il parametro saoid è incluso nel token di firma di accesso condiviso e il bit permanente viene impostato nella directory padre. |
Eseguire | e | 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. |
Proprietà | 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 fungere da proprietario quando il chiamante rinomina o elimina una directory o un BLOB all'interno di una directory con il bit permanente 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à | io | Contenitore Blob |
2020-06-12 e versioni successive | Impostare o eliminare i criteri di immutabilità o il blocco legale 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. Ad esempio, specificando sip=198.51.100.0
o sip=198.51.100.10-198.51.100.20
nella firma di accesso condiviso, la richiesta viene limitato a tali indirizzi IP.
La tabella seguente descrive se includere il campo signedIp
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 | Raccomandazione |
---|---|---|
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 campo signedIp . Le richieste effettuate dall'interno della stessa area usando una firma di accesso condiviso con un indirizzo IP in uscita specificato hanno 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 su un indirizzo IP privato. Per altre informazioni, vedere Configurare firewall e 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 campo signedIp . 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 campo signedIp . 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 pubblico in uscita di tale proxy o gateway per il campo signedIp . |
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 sia HTTPS che HTTP (https,http
) o solo HTTPS (https
). Il valore predefinito è https,http
.
Nota
Non è possibile specificare HTTP per il campo spr
.
Specificare l'ID oggetto firmato
Il campo signedObjectId
(skoid
) è necessario per una firma di accesso condiviso della delega utente. L'operazione di Get User Delegation Key
Specificare l'ID tenant firmato
Il campo signedTenantId
(sktid
) è necessario per una firma di accesso condiviso della delega utente. L'operazione di Get User Delegation Key
Specificare l'ora di inizio della chiave firmata
Il campo obbligatorio signedKeyStartTime
(skt
) indica l'inizio della durata della chiave di delega utente in formato data ISO. L'operazione di Get User Delegation Key
Specificare l'ora di scadenza della chiave firmata
Il campo signedKeyExpiryTime
(ske
) è necessario per una firma di accesso condiviso della delega utente in formato data ISO. L'operazione di Get User Delegation Key
Specificare il servizio di chiave firmata
Il campo signedKeyService
(sks
) è necessario per una firma di accesso condiviso della delega utente. L'operazione di Get User Delegation Key b
.
Specificare la versione della chiave firmata
Il campo signedkeyversion
(skv
) è necessario per una firma di accesso condiviso della delega utente. L'operazione di Get User Delegation Key signedkeyversion
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 utente firmato per un'entità di sicurezza
I campi facoltativi signedAuthorizedObjectId
(saoid
) e signedUnauthorizedObjectId
(suoid
) consentono l'integrazione con Apache Hadoop e Apache Ranger per i carichi di lavoro di Azure Data Lake Storage. Usare uno di questi campi nel token di firma di accesso condiviso per specificare l'ID oggetto per un'entità di sicurezza:
- Il campo
saoid
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 conceda l'accesso. Non viene eseguito alcun controllo delle autorizzazioni aggiuntive per gli ACL POSIX. - Il campo
suoid
specifica l'ID oggetto per un'entità di sicurezza Microsoft Entra quando uno spazio dei nomi gerarchico è abilitato per un account di archiviazione. Il camposuoid
è valido solo per gli account con uno spazio dei nomi gerarchico. Quando il camposuoid
è incluso nel token di firma di accesso condiviso, Archiviazione di Azure esegue un controllo ACL POSIX rispetto all'ID oggetto prima di autorizzare l'operazione. Se il controllo ACL non riesce, l'operazione non riesce. Se il camposuoid
è 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.
L'ID oggetto per l'entità di sicurezza che richiede la chiave di delega utente viene acquisito nel campo skoid
obbligatorio. Per specificare un ID oggetto nel token di firma di accesso condiviso con il campo saoid
o suoid
, All'entità di sicurezza identificata nel campo skoid
deve essere assegnato un ruolo controllo degli accessi in base al ruolo 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 campo saoid
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 parametro
skoid
. - Se il bit sticky 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 viene specificata l'intestazione
x-ms-owner
, il valore specificato dall'ID oggetto deve corrispondere al valore specificato dall'intestazionex-ms-owner
. - Se un'operazione imposta il gruppo per una directory o un BLOB e viene specificata l'intestazione
x-ms-group
, il valore specificato dall'ID oggetto deve essere un membro del gruppo specificato dall'intestazionex-ms-group
. - Se un'operazione imposta le autorizzazioni o l'ACL 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
signedPermissions
(sp
) deve includere l'autorizzazioneOwnership
(o
) oltre all'autorizzazionePermissions
(p
).
L'ID oggetto specificato nel campo saoid
o suoid
è incluso nei log di diagnostica quando si effettuano richieste usando il token di firma di accesso condiviso.
Il campo saoid
o suoid
è supportato solo se il campo signedVersion
(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 campo signedCorrelationId
(scid
) specifica un ID di correlazione che può essere usato per correlare i log di controllo dell'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 in genere 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 di correlazione sia nel log di controllo locale che nel log di controllo dell'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 successive.
Specificare la profondità della directory
Se il campo signedResource
specifica una directory (sr=d
), è necessario specificare anche il campo signedDirectoryDepth
(sdd
) per indicare il numero di sottodirectory nella directory radice. Il valore del campo sdd
deve essere un numero intero non negativo.
Ad esempio, la directory radice https://{account}.blob.core.windows.net/{container}/
ha una profondità pari a 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à pari a 2.
Questo campo è supportato con la versione 2020-02-10 e successive.
Specificare i parametri di query per eseguire l'override delle intestazioni di risposta
Per definire i valori per determinate intestazioni di risposta da restituire quando la firma di accesso condiviso viene usata in una richiesta, è possibile specificare le intestazioni di risposta nei parametri di query. Le intestazioni di risposta e i parametri di query corrispondenti sono i seguenti:
Nome intestazione risposta | Parametro di 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 rsct=binary
in un token di firma di accesso condiviso, l'intestazione della risposta Content-Type
è impostata su binary
. Questo valore esegue l'override del valore dell'intestazione Content-Type
archiviato per il BLOB per una richiesta usando solo questa firma di accesso condiviso.
Se si crea una firma di accesso condiviso che specifica le intestazioni di risposta come parametri di query, è necessario includere tali intestazioni di risposta nel segno da stringa a segno usato per costruire la stringa di firma. Per altre informazioni, vedere la sezione "Specificare la firma".
Specificare l'ambito di crittografia
Il campo signed encryption scope
è supportato quando il campo della versione firmata (sv
) nel token di firma di accesso condiviso è 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 (Accesso negato).
Se l'ambito di crittografia predefinito è impostato per il contenitore o il file system, il campo ses
rispetta i criteri di crittografia del contenitore. Se si verifica una mancata corrispondenza tra il parametro di query ses
e l'intestazione x-ms-default-encryption-scope
e l'intestazione x-ms-deny-encryption-scope-override
è impostata su true
, il servizio restituisce il codice di risposta di errore 403 (Accesso negato).
Se l'intestazione x-ms-encryption-scope
e il parametro di query ses
sono entrambi specificati 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 campo signature
(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 sulla stringa da firmare e chiave usando l'algoritmo SHA256 e quindi codificato tramite la codifica Base64.
Per costruire la stringa di firma di una firma di accesso condiviso della 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 tramite URL.
I campi richiesti nella stringa per l'accesso dipendono dalla versione del servizio usata per l'autorizzazione ( camposv
). Le sezioni seguenti descrivono la configurazione da stringa a firma per le versioni che supportano la firma di accesso condiviso della delega utente.
Versione 2020-12-06 e successive
La stringa da firmare per l'autorizzazione versione 2020-12-06 e successive 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 alla versione 2020-02-10
La stringa da firmare per le versioni di autorizzazione precedenti alla 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" +
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 tramite URL. Un percorso BLOB deve includere il relativo contenitore. Un percorso di directory deve includere il numero di sottodirectory che corrispondono al parametro sdd
.
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 parte canonicalizedResource
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 di 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)
URL = https://myaccount.dfs.core.windows.net/music
canonicalizedResource = "/blob/myaccount/music"
Esempio di directory (Azure Data Lake Storage)
URL = https://myaccount.dfs.core.windows.net/music/instruments/guitar/
canonicalizedResource = "/blob/myaccount/music/instruments/guitar/"
Esempio di BLOB (Azure Data Lake Storage)
URL = https://myaccount.dfs.core.windows.net/music/intro.mp3
canonicalizedResource = "/blob/myaccount/music/intro.mp3"
Campi facoltativi
Se un campo è facoltativo e non viene 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 delega utente
L'esempio seguente mostra un URI BLOB con un token di firma di accesso condiviso della delega utente aggiunto. Il token di firma di accesso condiviso della delega utente fornisce autorizzazioni di lettura e scrittura per il 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=198.51.100.10-198.51.100.20&spr=https&sv=2022-11-02&sr=b&sig=<signature>
Ogni parte dell'URI è descritta nella tabella seguente:
Nome | Parte della firma di accesso condiviso | Descrizione |
---|---|---|
URI 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 |
Specificato nell'ora UTC. Se si vuole che la firma di accesso condiviso sia valida immediatamente, omettere l'ora di inizio. |
Scadenza | se=2023-05-24T09:13:55Z |
Specificato nell'ora UTC. |
ID oggetto | skoid=<object-id> |
Un'entità di sicurezza di Microsoft Entra. |
Tenant ID | sktid=<tenant-id> |
Tenant di Microsoft Entra in cui è registrata l'entità di sicurezza. |
Ora di inizio della chiave | skt=2023-05-24T01:13:55Z |
Inizio della durata della chiave di delega utente. |
Ora di scadenza della chiave | ske=2023-05-24T09:13:55Z |
Fine della durata della chiave di delega utente. |
Servizio chiavi | sks=b |
Per il valore del servizio è supportato solo il servizio BLOB. |
Versione chiave | skv=2022-11-02 |
Versione del servizio di archiviazione usata per ottenere la chiave di delega utente. |
Intervallo IP | sip=198.51.100.10-198.51.100.20 |
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> |
Usato per autorizzare l'accesso al BLOB. La firma è un HMAC calcolato su una stringa per firmare e una 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 della delega utente revocando la chiave di delega utente oppure modificando o rimuovendo le assegnazioni di ruolo del controllo degli accessi in base al ruolo e gli ACL POSIX 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 del controllo degli accessi in base al ruolo 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.
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 non sono valide. È quindi possibile chiamare di nuovo l'operazione di Get User Delegation Key e usare la chiave per creare nuove firme di accesso condiviso. Questo è il modo più rapido per revocare una firma di accesso condiviso della delega utente.
Modificare o rimuovere assegnazioni di ruolo o ACL
È possibile modificare o rimuovere l'assegnazione di ruolo controllo degli accessi in base al ruolo e gli ACL POSIX 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.