Creare un SAS di servizio

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.

Diagramma degli elementi del parametro di un URL della firma di accesso condiviso.

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.
signedPermissions1 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.
startPk2

startRk2
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.
endPk2

endRk2
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 startPkcampi , startRkendPk, 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, , rdrl, wd, wle rl. Esempi di impostazioni non valide includono wr, dr, lre 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 Creare o scrivere contenuto, proprietà, metadati o blocklist. Creazione di snapshot o impostazione di lease del BLOB. Ridimensionamento del BLOB (solo BLOB di pagine). Usare il BLOB come destinazione di un'operazione di copia.
Elimina d Contenitore
Directory
BLOB
Tutti Eliminare un BLOB. Per la versione 2017-07-29 e 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 non ricorsivi.
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 figlio, della directory o della directory padre se il parametro è incluso nel token di firma di accesso condiviso e ilbito saoid è 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 POSIX ACL 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 set di bit bastone.
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 criteri di non modificabilità i Contenitore
BLOB
2020-06-12 e versioni successive Impostare o eliminare i criteri di non modificabilità o il blocco legale 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 Creare un nuovo file o copiare un file in un nuovo file.
Scrittura w Creare 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 Creare 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 usando 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 Processo con Update in modo da poter prima ricevere il messaggio che si vuole 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: per le operazioni upsert sono necessarie le autorizzazioni di aggiunta e aggiornamento.
Aggiornamento u Aggiornamento delle entità. Nota: per le operazioni upsert sono necessarie le autorizzazioni di aggiunta e aggiornamento.
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 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, si noti che 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 specificato, in base all'ambiente client e al percorso 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 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. Una richiesta effettuata con la firma di accesso condiviso deve 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. Una richiesta effettuata con la firma di accesso condiviso deve 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

A partire dalla versione 2015-04-05, il campo facoltativo signedProtocol (spr) specifica il protocollo consentito 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 startPkcampi , startRk, endPke endRk definiscono un intervallo di entità di tabella associate a una firma di accesso condiviso. Le query di tabella restituiscono solo i risultati compresi nell'intervallo e tenta di usare la firma di accesso condiviso per aggiungere, aggiornare o eliminare entità esterne a questo intervallo avranno esito negativo.

Se startPk è uguale a 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 endRka , 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, wle rl. Esempi di impostazioni non valide includono wr, dr, lre dw. 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.

Vedi anche