Creare una firma di accesso condiviso di delega utente
Importante
Per una sicurezza ottimale, Microsoft consiglia di usare Microsoft Entra ID con identità gestite per autorizzare le richieste sui dati BLOB, code e tabelle, quando possibile. L'autorizzazione con Microsoft Entra ID e identità gestite offre sicurezza e facilità d'uso 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, a una directory o a un BLOB usando le credenziali Microsoft Entra o una chiave dell'account. Una firma di accesso condiviso protetta con credenziali 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 Create una firma di accesso condiviso del servizio e Create 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 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:
- 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.
- Acquisire un token OAuth 2.0 da Microsoft Entra ID.
- 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.
- 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:
- Collaboratore
- Collaboratore account di archiviazione
- Collaboratore ai dati del BLOB di archiviazione
- Proprietario dei dati del BLOB di archiviazione
- Lettore dei dati del BLOB di archiviazione
- Delegante di BLOB di archiviazione
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 Microsoft Entra.
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 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 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 BLOB | Bv | 2018-11-09 e versioni successive | Concede l'accesso al contenuto e ai metadati della versione 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 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 viene specificata una directory per il campo, è necessario anche il signedResource signedDirectoryDepth parametro (sdd ). Una directory è sempre all'interno di un contenitore. |
Specificare la durata della validità della firma
I signedStart
campi () e signedExpiry
(st
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 di delega utente, i tempi di inizio e 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 quali operazioni un client che possiede la firma di accesso condiviso può eseguire nella 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
wd
rl
, , wl
e .rl
Esempi di impostazioni non valide includono wr
, dr
, lr
e dw
. Specificare una designazione di autorizzazione più di una volta non è consentita.
Una firma di accesso condiviso di delega utente non può concedere l'accesso a determinate operazioni:
- I contenitori non possono essere creati, eliminati o elencati.
- I metadati e le proprietà del contenitore non possono essere letti o scritti.
- Non è possibile eseguire 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, uno snapshot di un BLOB o copiare un BLOB in un nuovo BLOB. |
Scrittura | w | Contenitore Directory BLOB |
Tutti | Create 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 successiva, l'autorizzazione Delete consente anche di interrompere un lease in un BLOB. Per altre informazioni, vedere l'operazione BLOB di lease . |
Elimina versione | x | Contenitore BLOB |
2019-12-12 e versioni successive | Eliminare una versione BLOB. |
Eliminazione permanente | y | BLOB | 2020-02-10 e versioni successive | Eliminare definitivamente uno snapshot o una versione 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 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 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 conceda l'accesso. Non viene eseguito alcun controllo di autorizzazione aggiuntivo 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. Ilsuoid
campo è valido solo per gli account con uno spazio dei nomi gerarchico. Quando ilsuoid
campo viene 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 ha esito negativo. Se il campo è incluso nel token di firma di accesso condiviso, è necessario abilitare uno spazio dei nomi gerarchico per l'accountsuoid
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 obbligatorio skoid
. Per specificare un ID oggetto nel token di firma di accesso condiviso con il campo o suoid
, all'entità di sicurezza identificata nel skoid
campo 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.saoid
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 viene specificato, Archiviazione di Azure imposta il proprietario della directory o del BLOB sul valore specificato dal
skoid
parametro . - 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
signedPermissions
campo (sp
) deve includere l'autorizzazioneOwnership
(o
) oltre all'autorizzazionePermissions
(p
).
L'ID oggetto specificato nel saoid
campo o suoid
viene incluso nei 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 dispone in genere di 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 signedResource
campo specifica una directory (sr=d
), è necessario specificare anche il signedDirectoryDepth
campo (sdd
) per indicare il numero di sottodirectory nella directory radice. Il valore del sdd
campo deve essere un numero intero non negativo.
Ad esempio, la directory https://{account}.blob.core.windows.net/{container}/
radice 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à di 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 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 rsct=binary
parametro di query in un token di firma di accesso condiviso, l'intestazione 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 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 signed encryption scope
campo (ses
) specifica un ambito di crittografia usato dall'applicazione client quando si caricano i BLOB usando il token di firma di accesso condiviso tramite l'operazione Put BLOB . Il signed encryption scope
campo è supportato quando il campo 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 (Accesso negato).
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 esiste una mancata corrispondenza tra il ses
parametro di query e x-ms-default-encryption-scope
l'intestazione 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 ses
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 sulla stringa da firmare e sulla chiave usando l'algoritmo SHA256 e quindi codificato usando 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 necessari nella stringa per l'accesso dipendono dalla versione del servizio usata per l'autorizzazione (sv
campo ). 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
Il formato da stringa a firma per l'autorizzazione versione 2020-02-10 è il 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 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 tramite URL. Un percorso BLOB deve includere il relativo contenitore. Un percorso di 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.
Gli esempi seguenti illustrano 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 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 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 di 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 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 della 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 le 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=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.