Creare un SAS di servizio
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.
Per gli scenari in cui vengono usate le firme di accesso condiviso, Microsoft consiglia di usare una firma di accesso condiviso delega utente. Una firma di accesso condiviso della delega utente è protetta con le credenziali Microsoft Entra anziché la chiave dell'account. Per informazioni sulle firme di accesso condiviso, vedere Create una firma di accesso condiviso di delega utente.
Una firma di accesso condiviso del servizio delega l'accesso a una risorsa solo in uno dei servizi di archiviazione: Archiviazione BLOB di Azure, Archiviazione code di Azure, Archiviazione tabelle di Azure o File di Azure. L'URI per una firma di accesso condiviso a livello di servizio è costituito dall'URI alla risorsa per cui la firma di accesso condiviso delega l'accesso, seguito dal token di firma di accesso condiviso.
Il token di firma di accesso condiviso è la stringa di query che include tutte le informazioni necessarie per autorizzare una richiesta. Il token specifica la risorsa a cui un client può accedere, le autorizzazioni concesse e il periodo di tempo durante il quale la firma è valida.
Una firma di accesso condiviso può anche specificare l'indirizzo IP o l'intervallo di indirizzi supportati da cui possono provenire le richieste, il protocollo supportato con cui è possibile effettuare una richiesta o un identificatore di criteri di accesso facoltativo associato alla richiesta.
Infine, ogni token di firma di accesso condiviso include una firma.
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 di firma di accesso condiviso devono essere distribuiti solo in una connessione sicura, ad esempio HTTPS.
Autorizzare una firma di accesso condiviso del servizio
È possibile proteggere una firma di accesso condiviso dell'account usando una chiave dell'account di archiviazione. Quando si crea una firma di accesso condiviso dell'account, l'applicazione client deve possedere la chiave dell'account.
Per usare Microsoft Entra credenziali per proteggere una firma di accesso condiviso per un contenitore o un BLOB, creare una firma di accesso condiviso della delega utente.
Supporto della firma di accesso condiviso del servizio per l'accesso con ambito directory
Una firma di accesso condiviso del servizio supporta l'ambito della directory (sr=d
) quando la versione di autorizzazione (sv
) è 2020-02-10 o successiva e uno spazio dei nomi gerarchico è abilitato. La semantica per l'ambito della directory (sr=d
) è simile a quella per l'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.
Costruire una firma di accesso condiviso del servizio
L'immagine seguente rappresenta le parti dell'URI della firma di accesso condiviso. Le parti necessarie vengono visualizzate in arancione. I campi che costituiscono il token di firma di accesso condiviso sono descritti nelle sezioni successive.
Le sezioni seguenti descrivono come specificare i parametri che costituiscono il token di firma di accesso condiviso del servizio.
Specificare il signedVersion
campo
Il signedVersion
campo (sv
) contiene la versione del servizio della firma di accesso condiviso. Questo valore specifica la versione dell'autorizzazione chiave condivisa usata da questa firma di accesso condiviso (nel signature
campo ). Il valore specifica anche la versione del servizio per le richieste effettuate con questa firma di accesso condiviso.
Per informazioni sulla versione usata quando si eseguono richieste tramite una firma di accesso condiviso, vedere Controllo delle versioni per i servizi di archiviazione di Azure.
Per informazioni su come questo parametro influisce sull'autorizzazione delle richieste effettuate con una firma di accesso condiviso, vedere Delegare l'accesso con una firma di accesso condiviso.
Nome del campo | Query parameter (Parametro di query) | Descrizione |
---|---|---|
signedVersion |
sv |
Obbligatorio. Supportato nella versione 2012-02-12 e successive. Versione del servizio di archiviazione da usare per autorizzare e gestire le richieste eseguite con questa firma di accesso condiviso. Per altre informazioni, vedere Controllo delle versioni per i servizi di archiviazione di Azure. |
Determinare la versione di una richiesta di firma di accesso condiviso legacy
Negli scenari legacy in cui signedVersion
non viene usato, l'archiviazione BLOB applica regole per determinare la versione. Per altre informazioni su queste regole, vedere Controllo delle versioni per i servizi di archiviazione di Azure.
Importante
Il software client potrebbe riscontrare un comportamento imprevisto del protocollo quando si usa un URI di firma di accesso condiviso che usa una versione del servizio di archiviazione più recente del software client. Il codice che costruisce gli URI della firma di accesso condiviso deve basarsi sulle versioni riconosciute dal software client che effettua richieste di servizio di archiviazione.
Specificare la risorsa firmata (solo archiviazione BLOB)
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 o contenitore nel token di firma di accesso condiviso.
Risorsa | Valore del parametro | Versioni supportate | Descrizione |
---|---|---|---|
BLOB | b | Tutti | Concede l'accesso al contenuto e ai metadati del BLOB. |
Versione del BLOB | Bv | 2018-11-09 e versioni successive | Concede l'accesso al contenuto e ai metadati della versione del BLOB, ma non al BLOB di base. |
Snapshot del BLOB | bs | 2018-11-09 e versioni successive | Concede l'accesso al contenuto e ai metadati dello snapshot DEL BLOB, ma non al BLOB di base. |
Contenitore | c | Tutti | Concede l'accesso al contenuto e ai metadati di qualsiasi BLOB nel contenitore e all'elenco di BLOB nel contenitore. |
Directory | d | 2020-02-10 e versioni successive | Concede l'accesso al contenuto e ai metadati di qualsiasi BLOB nella directory e all'elenco di BLOB nella directory, in un account di archiviazione con uno spazio dei nomi gerarchico abilitato. Se per il signedResource campo viene specificata una directory, è necessario anche il signedDirectoryDepth parametro (sdd ). Una directory viene sempre annidata all'interno di un contenitore. |
Specificare la risorsa firmata (File di Azure)
La firma di accesso condiviso è supportata per File di Azure versione 2015-02-21 e successive.
Nel campo signedResource
viene specificato quali risorse sono accessibili tramite la firma di accesso condiviso. Nella tabella seguente viene descritto come fare riferimento a una risorsa di file o condivisione nell'URI.
Nome del campo | Query parameter (Parametro di query) | Descrizione |
---|---|---|
signedResource |
sr |
Obbligatorio. Specificare f se la risorsa condivisa è un file. In questo modo viene concesso l'accesso al contenuto e ai metadati del file.Specificare s se la risorsa condivisa è una condivisione. In questo modo viene concesso l'accesso al contenuto e ai metadati di qualsiasi file nella condivisione e all'elenco di directory e file nella condivisione. |
Specificare i parametri di query per eseguire l'override delle intestazioni di risposta (solo Archiviazione BLOB e File di Azure)
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. Questa funzionalità è supportata a partire dalla versione 2013-08-15 per l'archiviazione BLOB e la versione 2015-02-21 per File di Azure. Le firme di accesso condiviso che usano questa funzionalità devono includere il sv
parametro impostato su 2013-08-15
o versione successiva per l'archiviazione BLOB o su 2015-02-21
o versione successiva per File di Azure.
Le intestazioni di risposta e i parametri di query corrispondenti sono elencati nella tabella seguente:
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 una firma di accesso condiviso creata con la versione 2013-08-15 o successiva, l'intestazione della Content-Type
risposta è impostata su binary
. Questo valore esegue l'override del Content-Type
valore di intestazione archiviato per il BLOB per una richiesta che usa 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 includerle nella stringa da firmare usata per costruire la stringa di firma. Per altre informazioni, vedere la sezione "Costruire la stringa di firma" più avanti in questo articolo. Per altri esempi, vedere Esempi di firma di accesso condiviso del servizio.
Specificare il nome della tabella (solo archiviazione tabelle)
Il campo tableName
specifica il nome della tabella da condividere.
Nome del campo | Query parameter (Parametro di query) | Descrizione |
---|---|---|
tableName |
tn |
Obbligatorio. Nome della tabella da condividere. |
Specificare i criteri di accesso
La parte dei criteri di accesso dell'URI indica il periodo di tempo durante il quale la firma di accesso condiviso è valida e le autorizzazioni da concedere all'utente. Le parti dell'URI che costituiscono i criteri di accesso sono descritte nella tabella seguente:
Nome del campo | Query parameter (Parametro di query) | Descrizione |
---|---|---|
signedStart |
st |
Facoltativa. Ora in cui la firma di accesso condiviso diventa valida, espressa in uno dei formati ISO 8601 UTC accettati. Se questo parametro viene omesso, l'ora UTC corrente viene usata come ora di inizio. Nelle versioni precedenti al 2012-02-12, la durata compresa signedStart tra e signedExpiry non può superare un'ora a meno che non venga usato un criterio contenitore. Per altre informazioni sui formati UTC accettati, vedere Formattare i valori di data/ora. |
signedExpiry |
se |
Obbligatorio. Ora in cui la firma di accesso condiviso diventa non valida, espressa in uno dei formati ISO 8601 UTC accettati. È necessario omettere questo campo se è stato specificato in un criterio di accesso archiviato associato. Per altre informazioni sui formati UTC accettati, vedere Formattare i valori di data/ora. |
signedPermissions
1 |
sp |
Obbligatorio. Autorizzazioni associate alla firma di accesso condiviso. L'utente è limitato alle operazioni consentite dalle autorizzazioni. È necessario omettere questo campo se è stato specificato in un criterio di accesso archiviato associato. |
startPk
2startRk
2 |
spk srk |
Solo archiviazione tabelle. Facoltativo, ma è necessario utilizzare startPk con startRk . La partizione minima e le chiavi di riga accessibili con questa firma di accesso condiviso. I valori di chiave specificati sono inclusi nell'intervallo. Se vengono omessi, non esiste un limite inferiore per le entità di tabella a cui è possibile accedere. |
endPk
2endRk
2 |
epk erk |
Solo archiviazione tabelle. Facoltativo, ma è necessario utilizzare endPk con endRk . La partizione massima e le chiavi di riga accessibili con questa firma di accesso condiviso. I valori di chiave specificati sono inclusi nell'intervallo. Se vengono omessi, non esiste alcun limite superiore per le entità di tabella a cui è possibile accedere. |
1 Il signedPermissions
campo è obbligatorio nell'URI, a meno che non sia specificato come parte di un criterio di accesso archiviato.
2 I startPk
campi , startRk
endPk
, e endRk
possono essere specificati solo nelle risorse di archiviazione tabelle.
Specificare le autorizzazioni
Le autorizzazioni specificate per il signedPermissions
campo (sp
) nel token di firma di accesso condiviso indicano le operazioni che un client può eseguire sulla risorsa.
È possibile combinare le autorizzazioni 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 è possibile specificare più volte una designazione di autorizzazione.
Una firma di accesso condiviso del servizio non può concedere l'accesso a determinate operazioni:
- Non è possibile creare, eliminare o elencare contenitori, code e tabelle.
- I metadati e le proprietà del contenitore non possono essere letti o scritti.
- Le code non possono essere cancellate e i relativi metadati non possono essere scritti.
- Non è possibile effettuare il lease dei contenitori.
Per costruire una firma di accesso condiviso che concede l'accesso a queste operazioni, usare una firma di accesso condiviso dell'account. Per altre informazioni, vedere Creare un SAS dell'account.
Importante
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. Eseguire operazioni che usano firme di accesso condiviso solo tramite una connessione HTTPS e distribuire gli URI della firma di accesso condiviso solo in una connessione sicura, ad esempio HTTPS.
Le autorizzazioni supportate per ogni tipo di risorsa sono descritte nelle sezioni seguenti.
Autorizzazioni per una directory, un contenitore o un BLOB
Le autorizzazioni supportate per ogni tipo di risorsa sono descritte nella tabella seguente:
Autorizzazione | Simbolo URI | Risorsa | Supporto versione | Operazioni consentite |
---|---|---|---|---|
Lettura | r | Contenitore Directory BLOB |
Tutti | Leggere il contenuto, l'elenco di blocchi, le proprietà e i metadati di qualsiasi BLOB nel contenitore o nella directory. Usare un BLOB come origine di un'operazione di copia. |
Add | a | Contenitore Directory BLOB |
Tutti | Aggiungere un blocco a un BLOB di accodamento. |
Crea | c | Contenitore Directory BLOB |
Tutti | Scrivere un nuovo BLOB, creare uno snapshot di un BLOB o copiare un BLOB in un nuovo BLOB. |
Scrittura | w | Contenitore Directory BLOB |
Tutti | Create o scrivere contenuto, proprietà, metadati o elenco di blocchi. Creazione di snapshot o impostazione di lease del BLOB. Ridimensionamento del BLOB (solo BLOB di pagine). Usare il BLOB come destinazione di un'operazione di copia. |
Elimina | d | Contenitore Directory BLOB |
Tutti | Eliminare un BLOB. Per la versione 2017-07-29 e successive, l'autorizzazione Elimina consente anche di interrompere un lease in un BLOB. Per altre informazioni, vedere l'operazione Lease BLOB . |
Eliminare la versione | x | Contenitore BLOB |
2019-12-12 e versioni successive | Eliminare una versione del BLOB. |
Eliminazione permanente | y | BLOB | 2020-02-10 e versioni successive | Eliminare definitivamente uno snapshot o una versione del BLOB. |
Elenco | l | Contenitore Directory |
Tutti | Elencare i BLOB in modo non ricorsivo. |
Tag | t | BLOB | 2019-12-12 e versioni successive | Leggere o scrivere i tag in un BLOB. |
Find | f | Contenitore | 2019-12-12 e versioni successive | Trovare BLOB con tag di indice. |
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 si rinomina o si 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. |
Autorizzazioni per un file
Autorizzazione | Simbolo URI | Operazioni consentite |
---|---|---|
Lettura | r | Leggere il contenuto, le proprietà, i metadati. Usare il file come origine di un'operazione di copia. |
Crea | c | Create un nuovo file o copiare un file in un nuovo file. |
Scrittura | w | Create o scrivere contenuto, proprietà, metadati. Ridimensionare il file. Usare il file come destinazione di un'operazione di copia. |
Elimina | d | Eliminare il file. |
Autorizzazioni per una condivisione
Autorizzazione | Simbolo URI | Operazioni consentite |
---|---|---|
Lettura | r | Leggere il contenuto, le proprietà o i metadati di qualsiasi file nella condivisione. Usare qualsiasi file nella condivisione come origine di un'operazione di copia. |
Crea | c | Create un nuovo file nella condivisione o copiare un file in un nuovo file nella condivisione. |
Scrittura | w | Per qualsiasi file nella condivisione, creare o scrivere contenuto, proprietà o metadati. Ridimensionare il file. Usare il file come destinazione di un'operazione di copia. Nota: non è possibile concedere autorizzazioni per la lettura o la scrittura di proprietà o metadati di condivisione tramite una firma di accesso condiviso del servizio. Usare invece una firma di accesso condiviso dell'account. |
Elimina | d | Eliminare qualsiasi file nella condivisione. Nota: non è possibile concedere autorizzazioni per eliminare una condivisione usando una firma di accesso condiviso del servizio. Usare invece una firma di accesso condiviso dell'account. |
Elenco | l | Elencare file e directory nella condivisione. |
Autorizzazioni per una coda
Autorizzazione | Simbolo URI | Operazioni consentite |
---|---|---|
Lettura | r | Lettura dei metadati e delle proprietà, incluso il numero di messaggi. Visualizzazione dei messaggi. |
Add | a | Aggiunta di messaggi alla coda. |
Aggiornamento | u | Aggiornamento dei messaggi nella coda. Nota: usare l'autorizzazione Process con Update in modo che sia prima possibile ottenere il messaggio da aggiornare. |
Processo | p | Recupero ed eliminazione dei messaggi dalla coda. |
Autorizzazioni per una tabella
Autorizzazione | Simbolo URI | Operazioni consentite |
---|---|---|
Query | r | Recupero delle entità ed esecuzione di query sulle entità. |
Add | a | Aggiunta di entità. Nota: è necessario aggiungere e aggiornare le autorizzazioni per le operazioni upsert. |
Aggiornamento | u | Aggiornamento delle entità. Nota: è necessario aggiungere e aggiornare le autorizzazioni per le operazioni upsert. |
Elimina | d | Eliminazione delle entità. |
Specificare un indirizzo IP o un intervallo IP
A partire dalla versione 2015-04-05, 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 proviene la richiesta non corrisponde all'indirizzo IP o all'intervallo di indirizzi specificato nel token sas, la richiesta non è autorizzata. Sono supportati solo gli indirizzi IPv4.
Quando si specifica un intervallo di indirizzi IP, si noti che l'intervallo è inclusivo. Ad esempio, la specifica sip=168.1.5.65
o sip=168.1.5.60-168.1.5.70
nella firma di accesso condiviso limita la richiesta a tali indirizzi IP.
La tabella seguente descrive se includere il signedIp
campo in un token di firma di accesso condiviso per uno scenario specificato, 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 che usano una firma di accesso condiviso con un indirizzo IP in uscita specificato avranno esito negativo.Usare invece una rete virtuale di Azure per gestire le restrizioni di sicurezza di rete. Le richieste ad Archiviazione di Azure dall'interno della stessa area si svolgono 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. Una richiesta effettuata con la firma di accesso condiviso deve derivare dall'indirizzo IP specificato o dall'intervallo di indirizzi. |
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. Una richiesta effettuata con la firma di accesso condiviso deve derivare dall'indirizzo IP specificato o dall'intervallo di indirizzi.Se la richiesta passa attraverso un proxy o un gateway, specificare l'indirizzo IP in uscita pubblico di tale proxy o gateway per il signedIp campo. |
Specificare il protocollo HTTP
A partire dalla versione 2015-04-05, il campo facoltativo (spr
) specifica il protocollo consentito signedProtocol
per una richiesta effettuata con la firma di accesso condiviso. I valori possibili sono solo HTTPS e HTTP (https,http
) o HTTPS (https
). Il valore predefinito è https,http
. Si noti che solo HTTP non è un valore consentito.
Specificare gli intervalli di accesso alle tabelle
I startPk
campi , startRk
, endPk
e definiscono un intervallo endRk
di entità di tabella associate a una firma di accesso condiviso. Le query di tabella restituiscono solo risultati all'interno dell'intervallo e tenta di usare la firma di accesso condiviso per aggiungere, aggiornare o eliminare entità all'esterno di questo intervallo.
Se startPk
è uguale endPk
, la firma di accesso condiviso autorizza l'accesso alle entità in una sola partizione della tabella.
Se startPk
è uguale a endPk
e startRk
uguale endRk
a , la firma di accesso condiviso può accedere a una sola entità in una partizione.
Per comprendere in che modo questi campi vincolano l'accesso alle entità in una tabella, fare riferimento alla tabella seguente:
Campi presenti | Ambito del vincolo |
---|---|
startPk |
partitionKey >= startPk |
endPk |
partitionKey <= endPk |
startPk , startRk |
(partitionKey >startPk ) || (partitionKey == startPk && rowKey >= startRk ) |
endPk , endRk |
(partitionKey <endPk ) || (partitionKey == endPk && rowKey <= endRk ) |
Specificare la profondità della directory
Quando uno spazio dei nomi gerarchico è abilitato e 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 o successiva.
Specificare l'identificatore firmato
Quando si specifica il signedIdentifier
campo nell'URI, la firma di accesso condiviso specificata viene correlata a un criterio di accesso archiviato corrispondente. I criteri di accesso archiviati offrono una misura di controllo aggiuntiva su una o più firme di accesso condiviso, oltre a fornire la possibilità di revocare una firma se necessario. Ogni contenitore, coda, tabella o condivisione può avere fino a cinque criteri di accesso archiviati.
La tabella seguente descrive come fare riferimento a un identificatore firmato nell'URI:
Nome del campo | Query parameter (Parametro di query) | Descrizione |
---|---|---|
signedIdentifier |
si |
Facoltativa. Valore univoco di un massimo di 64 caratteri correlato a un criterio di accesso specificato per il contenitore, la coda o la tabella. |
Un criterio di accesso archiviato include un identificatore firmato, un valore di un massimo di 64 caratteri univoco all'interno della risorsa. È possibile specificare il valore di questo identificatore firmato per il signedidentifier
campo nell'URI per la firma di accesso condiviso. Quando si specifica un identificatore firmato nell'URI, associare la firma ai criteri di accesso archiviati. Per stabilire criteri di accesso a livello di contenitore usando l'API REST, vedere Delegare l'accesso con una firma di accesso condiviso.
Specificare l'ambito di crittografia
Usando il campo nell'URI signedEncryptionScope
, è possibile specificare l'ambito di crittografia che l'applicazione client può usare. Applica la crittografia lato server con l'ambito di crittografia specificato quando si caricano BLOB (PUT) con il token di firma di accesso condiviso. Get e HEAD non saranno limitati e eseguiti come in precedenza.
La tabella seguente descrive come fare riferimento a un ambito di crittografia firmato nell'URI:
Nome del campo | Query parameter (Parametro di query) | Descrizione |
---|---|---|
signedEncryptionScope |
ses |
Facoltativa. Indica l'ambito di crittografia da usare per crittografare il contenuto della richiesta. |
Questo campo è supportato con la versione 2020-12-06 o successiva. Se si aggiunge prima ses
della versione supportata, il servizio restituisce il codice di risposta di errore 403 (Accesso negato).
Se si imposta l'ambito di crittografia predefinito per il contenitore o il file system, il ses
parametro di query 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).
Quando si specifica l'intestazione x-ms-encryption-scope
e il ses
parametro di query nella richiesta PUT, il servizio restituisce il codice di risposta di errore 400 (richiesta non valida) in caso di mancata corrispondenza.
Specificare la firma
Usare la parte della firma dell'URI per autorizzare la richiesta effettuata con la firma di accesso condiviso. Archiviazione di Azure usa uno schema di autorizzazione con chiave condivisa per autorizzare una firma di accesso condiviso del servizio.
Nella tabella seguente viene descritto come specificare la firma nell'URI:
Nome del campo | Query parameter (Parametro di query) | Descrizione |
---|---|---|
signature |
sig |
La stringa da firmare è una stringa univoca costruita dai campi e che deve essere verificata per autorizzare la richiesta. La firma è un codice HMAC (Hash-Based Message Authentication Code) calcolato tramite la stringa da firmare e la chiave usando l'algoritmo SHA256 e quindi codifica tramite codifica Base64. |
Creare la stringa di firma
Per costruire la stringa di firma di una firma di accesso condiviso, creare innanzitutto 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.
Versione 2020-12-06 e successive
La versione 2020-12-06 aggiunge il supporto per il campo ambito di crittografia firmato. Per costruire la stringa per firmare le risorse di archiviazione BLOB, usare il formato seguente:
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedIP + "\n" +
signedProtocol + "\n" +
signedVersion + "\n" +
signedResource + "\n" +
signedSnapshotTime + "\n" +
signedEncryptionScope + "\n" +
rscc + "\n" +
rscd + "\n" +
rsce + "\n" +
rscl + "\n" +
Versione 2018-11-09 e successive
La versione 2018-11-09 aggiunge il supporto per i campi ora di snapshot del BLOB firmati e della risorsa firmata. Questi campi devono essere inclusi nella stringa da firmare. Per costruire la stringa per firmare le risorse di archiviazione BLOB, usare il formato seguente:
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedIP + "\n" +
signedProtocol + "\n" +
signedVersion + "\n" +
signedResource + "\n"
signedSnapshotTime + "\n" +
rscc + "\n" +
rscd + "\n" +
rsce + "\n" +
rscl + "\n" +
rsct
Versione 2015-04-05 e successive
La versione 2015-04-05 aggiunge il supporto per i campi di protocollo firmati e IP firmati. Questi campi devono essere inclusi nella stringa da firmare. Per costruire la stringa per l'archiviazione BLOB o le risorse File di Azure, usare il formato seguente:
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedIP + "\n" +
signedProtocol + "\n" +
signedVersion + "\n" +
rscc + "\n" +
rscd + "\n" +
rsce + "\n" +
rscl + "\n" +
rsct
Per costruire la stringa da firmare per le risorse di archiviazione tabelle, usare il formato seguente:
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedIP + "\n" +
signedProtocol + "\n" +
signedVersion + "\n" +
startingPartitionKey + "\n"
startingRowKey + "\n"
endingPartitionKey + "\n"
endingRowKey
Per costruire la stringa per firmare le risorse di archiviazione code, usare il formato seguente:
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedIP + "\n" +
signedProtocol + "\n" +
signedVersion
Versione da 2013-08-15 a 2015-02-21
Per costruire la stringa per l'archiviazione BLOB o File di Azure risorse usando la versione 2013-08-15-2015-02-21, usare il formato seguente. Per File di Azure, la firma di accesso condiviso è supportata a partire dalla versione 2015-02-21.
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedVersion + "\n" +
rscc + "\n" +
rscd + "\n" +
rsce + "\n" +
rscl + "\n" +
rsct
Per creare la stringa da firmare per una tabella, utilizzare il formato seguente:
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedVersion + "\n" +
startPk + "\n" +
startRk + "\n" +
endPk + "\n" +
endRk
Per costruire la stringa da firmare per una coda, usare il formato seguente:
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedVersion
Versione 2012-02-12
Per costruire la stringa per firmare le risorse di archiviazione BLOB per la versione 2012-02-12, usare il formato seguente:
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedVersion
Versioni precedenti alla versione 2012-02-12
Per costruire le risorse di archiviazione BLOB da stringa a firma per le versioni precedenti alla versione 2012-02-12, usare il formato seguente:
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier
Quando si costruisce la stringa da firmare, tenere presente quanto segue:
Se un campo è facoltativo e non è fornito come parte della richiesta, specificare una stringa vuota per il campo. Assicurarsi di includere il carattere di nuova riga (\n) dopo la stringa vuota.
La stringa da firmare per una tabella deve includere i parametri aggiuntivi, anche se sono stringhe vuote.
La
signedpermission
parte della stringa deve includere le designazioni di autorizzazione in un ordine fisso specifico per ogni tipo di risorsa. Qualsiasi combinazione di queste autorizzazioni è accettabile, ma l'ordine delle lettere delle autorizzazioni deve corrispondere a quello della tabella seguente.Tipo di risorsa Ordine delle autorizzazioni BLOB racwd Contenitore racwdl Coda raup File rcwd Condivisione rcwdl Tabella raud Ad esempio, esempi di impostazioni di autorizzazioni valide per un contenitore includono
rw
,rd
,rl
,wd
,wl
erl
. Esempi di impostazioni non valide includonowr
,dr
,lr
edw
. La specifica di una designazione di autorizzazione più volte non è consentita.Specificare un valore per la
signedIdentifier
parte della stringa se si associa la richiesta a un criterio di accesso archiviato.Una firma di accesso condiviso che specifica una versione del servizio di archiviazione precedente alla versione 2012-02-12 può condividere solo un BLOB o un contenitore e deve omettere
signedVersion
e il carattere di nuova riga prima.La parte
canonicalizedResource
della stringa è un percorso canonico della risorsa firmata. Deve includere il nome del servizio (archiviazione BLOB, archiviazione tabelle, archiviazione code o File di Azure) per la versione 2015-02-21 o successiva, il nome dell'account di archiviazione e il nome della risorsa e deve essere decodificato tramite URL. I nomi dei BLOB devono includere il contenitore del BLOB. I nomi delle tabelle devono essere minuscoli.
La stringa di risorsa canonica per un contenitore, una coda, una tabella o una condivisione file deve omettere la barra finale (/) per una firma di accesso condiviso che fornisce l'accesso a tale oggetto.
Gli esempi seguenti illustrano come costruire la canonicalizedResource
parte della stringa, a seconda del tipo di risorsa.
Contenitori
Per la versione 2015-02-21 e successive:
URL = https://myaccount.blob.core.windows.net/music
canonicalizedResource = "/blob/myaccount/music"
Per le versioni precedenti al 2015-02-21:
URL = https://myaccount.blob.core.windows.net/music
canonicalizedResource = "/myaccount/music"
BLOB
Per la versione 2015-02-21 e successive:
URL = https://myaccount.blob.core.windows.net/music/intro.mp3
canonicalizedResource = "/blob/myaccount/music/intro.mp3"
Per le versioni precedenti al 2015-02-21:
URL = https://myaccount.blob.core.windows.net/music/intro.mp3
canonicalizedResource = "/myaccount/music/intro.mp3"
Condivisioni file
URL = https://myaccount.file.core.windows.net/music
canonicalizedResource = "/file/myaccount/music"
File
URL = https://myaccount.file.core.windows.net/music/intro.mp3
canonicalizedResource = "/file/myaccount/music/intro.mp3"
Code
Per la versione 2015-02-21 e successive:
URL = https://myaccount.queue.core.windows.net/thumbnails
canonicalizedResource = "/queue/myaccount/thumbnails"
Per le versioni precedenti al 2015-02-21:
URL = https://myaccount.queue.core.windows.net/thumbnails
canonicalizedResource = "/myaccount/thumbnails"
Tabelle
Se la risorsa firmata è una tabella, verificare che il nome della tabella sia in lettere minuscole nel formato canonico.
Per la versione 2015-02-21 e successive:
URL = https://myaccount.table.core.windows.net/Employees(PartitionKey='Jeff',RowKey='Price')
canonicalizedResource = "/table/myaccount/employees"
Per le versioni precedenti al 2015-02-21:
URL = https://myaccount.table.core.windows.net/Employees(PartitionKey='Jeff',RowKey='Price')
canonicalizedResource = "/myaccount/employees"
Durata e revoca di una firma di accesso condiviso
Con le firme di accesso condiviso è possibile concedere agli utenti i diritti di accesso alle risorse dell'account di archiviazione. Quando si prevede di usare una firma di accesso condiviso, valutare la durata della firma di accesso condiviso e se l'applicazione potrebbe dover revocare i diritti di accesso in determinate circostanze.
Firma di accesso condiviso ad hoc e criteri di accesso archiviati
Una firma di accesso condiviso del servizio può assumere una delle due forme seguenti:
Firma di accesso condiviso ad hoc: quando si crea una firma di accesso condiviso ad hoc, l'ora di inizio, l'ora di scadenza e le autorizzazioni per la firma di accesso condiviso vengono tutte specificate nell'URI di firma di accesso condiviso (o implicito, se l'ora di inizio viene omessa). Qualsiasi tipo di firma di accesso condiviso può essere una firma di accesso condiviso ad hoc.
È possibile gestire la durata di una firma di accesso condiviso ad hoc usando il
signedExpiry
campo . Se si vuole continuare a concedere a un client l'accesso alla risorsa dopo la scadenza, è necessario rilasciare una nuova firma. È consigliabile mantenere breve la durata di una firma di accesso condiviso. Prima della versione 2012-02-12, una firma di accesso condiviso non associata a un criterio di accesso archiviato non poteva avere un periodo attivo che superava un'ora.Firma di accesso condiviso con criteri di accesso archiviati: un criterio di accesso archiviato viene definito in un contenitore di risorse, che può essere un contenitore BLOB, una tabella, una coda o una condivisione file. È possibile usare i criteri di accesso archiviati per gestire i vincoli per una o più firme di accesso condiviso. Quando si associa una firma di accesso condiviso a un criterio di accesso archiviato, la firma di accesso condiviso eredita i vincoli( ovvero l'ora di inizio, l'ora di scadenza e le autorizzazioni) definiti per i criteri di accesso archiviati.
I criteri di accesso archiviati sono rappresentati dal campo
signedIdentifier
nell'URI. I criteri di accesso archiviati offrono una misura di controllo aggiuntiva su una o più firme di accesso condiviso, oltre a fornire la possibilità di revocare una firma se necessario.
Revocare una firma di accesso condiviso
Poiché un URI di firma di accesso condiviso è un URL, chiunque ottenga la firma di accesso condiviso può usarlo, indipendentemente da chi l'ha originariamente creato. Se la firma di accesso condiviso è stata pubblicata e resa pubblica, può essere usata da chiunque in tutto il mondo. Una firma di accesso condiviso concede l'accesso alle risorse a chiunque lo possiede fino a quando non si verifica una delle quattro cose seguenti:
Viene raggiunta l'ora di scadenza specificata in una firma di accesso condiviso ad hoc.
Viene raggiunta l'ora di scadenza specificata nei criteri di accesso archiviati a cui fa riferimento la firma di accesso condiviso, se viene fatto riferimento a un criterio di accesso archiviato e il criterio di accesso specifica una scadenza.
È possibile raggiungere l'ora di scadenza perché l'intervallo scade o perché i criteri di accesso archiviati sono stati modificati in modo da avere una scadenza in passato, un modo per revocare la firma di accesso condiviso.
I criteri di accesso archiviati a cui fa riferimento la firma di accesso condiviso vengono eliminati, che revocano la firma di accesso condiviso. Se Archiviazione di Azure non riesce a individuare i criteri di accesso archiviati specificati nella firma di accesso condiviso, il client non può accedere alla risorsa indicata dall'URI.
Se si ricreano i criteri di accesso archiviati con esattamente lo stesso nome del criterio eliminato, tutti i token di firma di accesso condiviso esistenti saranno nuovamente validi, in base alle autorizzazioni associate a tale criterio di accesso archiviato. Si presuppone che l'ora di scadenza della firma di accesso condiviso non sia passata. Se si intende revocare la firma di accesso condiviso, assicurarsi di usare un nome diverso quando si ricreano i criteri di accesso con una scadenza futura.
La chiave dell'account utilizzata per creare la firma di accesso condiviso viene rigenerata. La rigenerazione di una chiave dell'account fa sì che tutti i componenti dell'applicazione che usano tale chiave non riescano ad autorizzare finché non vengono aggiornati per usare l'altra chiave dell'account valida o la chiave dell'account appena rigenerata. La rigenerazione della chiave dell'account è l'unico modo per revocare immediatamente una firma di accesso condiviso ad hoc.
Importante
Un URI della firma di accesso condiviso è associato alla chiave dell'account usata per creare la firma e i criteri di accesso archiviati associati, se applicabile. Se non sono specificati criteri di accesso archiviati, l'unico modo per revocare una firma di accesso condiviso consiste nel modificare la chiave dell'account.
Come procedura consigliata, è consigliabile usare criteri di accesso archiviati con una firma di accesso condiviso del servizio. Se si sceglie di non usare un criterio di accesso archiviato, assicurarsi di mantenere il periodo durante il quale la firma di accesso condiviso ad hoc è valida. Per altre informazioni sull'associazione di una firma di accesso condiviso del servizio a un criterio di accesso archiviato, vedere Definire un criterio di accesso archiviato.
Esempio di firma di accesso condiviso del servizio
L'esempio seguente mostra un URI BLOB con un token di firma di accesso condiviso del servizio aggiunto. Il token di firma di accesso condiviso del servizio 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&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. |
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 di Archiviazione di Azure | sv=2023-05-24 |
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 una chiave usando l'algoritmo SHA256 e quindi codificato usando la codifica Base64. |