Concedere accesso limitato alle risorse di Archiviazione di Azure tramite firme di accesso condiviso

Una firma di accesso condiviso (SAS) fornisce accesso delegato sicuro alle risorse nell'account di archiviazione. Con una firma di accesso condiviso è possibile controllare in modo granulare il modo in cui un client può accedere ai dati. Ad esempio:

  • A quali risorse può accedere il client.

  • Autorizzazioni per le risorse.

  • Durata della validità della firma di accesso condiviso.

Tipi di firme di accesso condiviso

Archiviazione di Azure supporta tre tipi di firme di accesso condiviso:

  • Firma di accesso condiviso di delega utente

  • Firma di accesso condiviso del servizio

  • Firma di accesso condiviso dell'account

Firma di accesso condiviso di delega utente

Una firma di accesso condiviso della delega utente è protetta con le credenziali di Microsoft Entra e anche dalle autorizzazioni specificate per la firma di accesso condiviso. Una firma di accesso condiviso di delega utente si applica solo all'archiviazione BLOB.

Per altre informazioni sulla firma di accesso condiviso della delega utente, vedere Creare una firma di accesso condiviso di delega utente (API REST).

Firma di accesso condiviso del servizio

Una firma di accesso condiviso del servizio è protetta con la chiave dell'account di archiviazione. Una firma di accesso condiviso del servizio delega l'accesso a una risorsa solo in uno dei servizi di Archiviazione di Azure: archiviazione BLOB, archiviazione code, archiviazione tabelle o File di Azure.

Per altre informazioni sulla firma di accesso condiviso del servizio, vedere Creare una firma di accesso condiviso del servizio (API REST).

Firma di accesso condiviso dell'account

Una firma di accesso condiviso dell'account è protetta con la chiave dell'account di archiviazione. Una firma di accesso condiviso dell'account delega l'accesso alle risorse in uno o più servizi di archiviazione. Tutte le operazioni disponibili tramite una firma di accesso condiviso del servizio o di delega utente sono disponibili anche tramite una firma di accesso condiviso dell'account.

È anche possibile delegare l'accesso agli elementi seguenti:

  • Operazioni a livello di servizio( ad esempio, le operazioni Get/Set Service Properties e Get Service Stats ).

  • Operazioni di lettura, scrittura ed eliminazione non consentite con una firma di accesso condiviso del servizio.

Per altre informazioni sulla firma di accesso condiviso dell'account, creare una firma di accesso condiviso dell'account (API REST).

Nota

Microsoft consiglia di usare le credenziali di Microsoft Entra quando possibile come procedura consigliata per la sicurezza, anziché usare la chiave dell'account, che può essere compromessa più facilmente. Quando la progettazione dell'applicazione richiede firme di accesso condiviso per l'accesso all'archiviazione BLOB, usare le credenziali di Microsoft Entra per creare una firma di accesso condiviso di delega utente quando possibile per una maggiore sicurezza. Per altre informazioni, vedere Autorizzare l'accesso ai dati in Archiviazione di Azure.

Una firma di accesso condiviso 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 vengono specificate nell'URI di firma di accesso condiviso. Qualsiasi tipo di firma di accesso condiviso può essere una firma di accesso condiviso ad hoc.

  • Firma di accesso condiviso del servizio con criteri di accesso archiviati. I criteri di accesso archiviati vengono definiti in un contenitore di risorse, che può essere un contenitore BLOB, una tabella, una coda o una condivisione file. I criteri di accesso archiviati possono essere usati per gestire i vincoli per una o più firme di accesso condiviso del servizio. Quando si associa una firma di accesso condiviso del servizio 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 definite per i criteri di accesso archiviati.

Nota

Una firma di accesso condiviso di delega utente o una firma di accesso condiviso dell'account deve essere una firma di accesso condiviso ad hoc. I criteri di accesso archiviati non sono supportati per la firma di accesso condiviso della delega utente o la firma di accesso condiviso dell'account.

Funzionamento della firma di accesso condiviso

Una firma di accesso condiviso è un token aggiunto all'URI per una risorsa Archiviazione di Azure. Token che contiene un set speciale di parametri di query che indicano come è possibile accedere alle risorse dal client. Uno dei parametri di query, ovvero la firma, viene creato dai parametri della firma di accesso condiviso e viene firmato con la chiave usata per creare la firma di accesso condiviso. Questa firma viene usata da Archiviazione di Azure per autorizzare l'accesso alla risorsa di archiviazione.

Nota

Non è possibile controllare la generazione di token di firma di accesso condiviso. Qualsiasi utente con privilegi per generare un token di firma di accesso condiviso, usando la chiave dell'account o tramite un'assegnazione di ruolo di Azure, può farlo senza conoscere il proprietario dell'account di archiviazione. Prestare attenzione a limitare le autorizzazioni che consentono agli utenti di generare token di firma di accesso condiviso. Per impedire agli utenti di generare una firma di accesso condiviso firmata con la chiave dell'account per i carichi di lavoro BLOB e code, è possibile impedire l'accesso con chiave condivisa all'account di archiviazione. Per altre informazioni, vedere Impedire l'autorizzazione con chiave condivisa.

Firma di accesso condiviso e autorizzazione

È possibile firmare un token di firma di accesso condiviso con una chiave di delega utente o con una chiave dell'account di archiviazione (chiave condivisa).

Firma di un token di firma di accesso condiviso con una chiave di delega utente

È possibile firmare un token di firma di accesso condiviso usando una chiave di delega utente creata usando le credenziali di Microsoft Entra. Una firma di accesso condiviso della delega utente viene firmata con la chiave di delega utente.

Per ottenere la chiave e quindi creare la firma di accesso condiviso, all'entità di sicurezza Microsoft Entra deve essere assegnato un ruolo di Azure che include l'azione Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey . Per altre informazioni, vedere Creare una firma di accesso condiviso di delega utente (API REST).

Firma di un token di firma di accesso condiviso con una chiave dell'account

Sia una firma di accesso condiviso del servizio che una firma di accesso condiviso dell'account di archiviazione sono firmate con la chiave dell'account di archiviazione. Per creare una firma di accesso condiviso firmata con la chiave dell'account, un'applicazione deve avere accesso alla chiave dell'account.

Quando una richiesta include un token di firma di accesso condiviso, tale richiesta viene autorizzata in base alla modalità di firma del token di firma di accesso condiviso. La chiave di accesso o le credenziali usate per creare un token di firma di accesso condiviso vengono usate anche da Archiviazione di Azure per concedere l'accesso a un client che possiede la firma di accesso condiviso.

Nella tabella seguente viene riepilogato il modo in cui ogni tipo di token di firma di accesso condiviso è autorizzato.

Tipo di firma di accesso condiviso Tipo di autorizzazione
Firma di accesso condiviso delega utente (solo archiviazione BLOB) Microsoft Entra ID
Firma di accesso condiviso del servizio Chiave condivisa
Firma di accesso condiviso dell'account Chiave condivisa

Microsoft consiglia di usare una firma di accesso condiviso della delega utente quando possibile per una maggiore sicurezza.

Token di firma di accesso condiviso

Il token di firma di accesso condiviso è una stringa generata sul lato client, ad esempio usando una delle librerie client Archiviazione di Azure. Il token di firma di accesso condiviso non viene rilevato da Archiviazione di Azure in alcun modo. È possibile creare un numero illimitato di token di firma di accesso condiviso sul lato client. Dopo aver creato una firma di accesso condiviso, è possibile distribuirla alle applicazioni client che richiedono l'accesso alle risorse nell'account di archiviazione.

Le applicazioni client forniscono l'URI di firma di accesso condiviso per Archiviazione di Azure come parte di una richiesta. Il servizio controlla quindi i parametri di firma di accesso condiviso e la firma per verificare che sia valido. Se il servizio conferma che la firma è valida, la richiesta viene autorizzata. In caso contrario, la richiesta viene rifiutata con il codice errore 403 (accesso negato).

Di seguito è riportato un esempio di URI di firma di accesso condiviso del servizio, che mostra l'URI della risorsa, il carattere delimitatore ('?') e il token di firma di accesso condiviso.

Diagram showing the components of a resource URI with SAS token.

Nota

Il carattere delimitatore ('?') per la stringa di query non fa parte del token di firma di accesso condiviso. Se si genera un token di firma di accesso condiviso dal portale, Da PowerShell, dall'interfaccia della riga di comando di Azure o da uno degli SDK Archiviazione di Azure, potrebbe essere necessario aggiungere il carattere delimitatore all'URL della risorsa.

Quando usare una firma di accesso condiviso

Usare una firma di accesso condiviso per concedere l'accesso sicuro alle risorse nell'account di archiviazione a qualsiasi client che altrimenti non avrebbe le autorizzazioni per tali risorse.

Uno scenario comune in cui la firma di accesso condiviso risulta utile è costituito da un servizio in cui gli utenti leggono e scrivono i propri dati nell'account di archiviazione di un utente specifico. Uno scenario in cui i dati utente vengono archiviati nell'account di archiviazione è caratterizzato da due modelli di progettazione standard:

  1. I client caricano e scaricano dati usando un servizio proxy front-end che esegue l'autenticazione. Il servizio proxy front-end consente la convalida delle regole business. Tuttavia, per grandi quantità di dati o transazioni a volume elevato, la creazione di un servizio in grado di dimensionarsi in base alla domanda può risultare oneroso o complesso.

    Scenario diagram: Front-end proxy service

  2. Un servizio semplificato autentica il client in base alle necessità e quindi genera una firma di accesso condiviso. Dopo che l'applicazione client riceve la firma di accesso condiviso, può accedere direttamente alle risorse dell'account di archiviazione. Le autorizzazioni di accesso sono definite dalla firma di accesso condiviso e per l'intervallo consentito dalla firma di accesso condiviso. La firma di accesso condiviso consente di ridurre la necessità di instradare tutti i dati attraverso il servizio proxy front-end.

    Scenario diagram: SAS provider service

Molti servizi reali possono usare una combinazione di questi due approcci. Ad esempio, alcuni dati possono essere elaborati e convalidati tramite il proxy front-end. Altri dati vengono salvati e/o letti direttamente usando la firma di accesso condiviso.

Una firma di accesso condiviso è necessaria anche per autorizzare l'accesso all'oggetto di origine in un'operazione di copia in determinati scenari:

  • Quando si copia un BLOB in un altro BLOB che si trova in un account di archiviazione diverso.

    Facoltativamente, è possibile usare una firma di accesso condiviso anche per autorizzare l'accesso al BLOB di destinazione.

  • Quando si copia un file in un altro file che si trova in un account di archiviazione diverso.

    Facoltativamente, è possibile usare una firma di accesso condiviso anche per autorizzare l'accesso al file di destinazione.

  • Quando si copia un BLOB in un file o un file in un BLOB.

    È necessario usare una firma di accesso condiviso anche se gli oggetti di origine e di destinazione si trovano all'interno dello stesso account di archiviazione.

Procedure consigliate per l'uso della firma di accesso condiviso

Quando si utilizzano le firme di accesso condiviso nell'applicazione, è necessario essere consapevoli di due rischi potenziali:

  • In caso di diffusione di una firma di accesso condiviso, chiunque la ottiene può usarla e questo potrebbe compromettere l'account di archiviazione.

  • Se una firma di accesso condiviso fornita a un'applicazione client scade e l'applicazione non è in grado di recuperarne una nuova dal servizio, è possibile che le funzionalità dell'applicazione potrebbero risentirne.

Per mitigare questi rischi, è consigliabile attenersi ai consigli seguenti relativi all'utilizzo di firme di accesso condiviso:

  • Usare sempre HTTPS per creare o distribuire una firma di accesso condiviso. Se una firma di accesso condiviso viene passata tramite HTTP e intercettata, un utente malintenzionato che esegue un attacco man-in-the-middle è in grado di leggere la firma di accesso condiviso. Possono quindi usare tale firma di accesso condiviso esattamente come l'utente previsto potrebbe avere. Ciò può potenzialmente compromettere i dati sensibili o consentire il danneggiamento dei dati da parte dell'utente malintenzionato.

  • Usare una firma di accesso condiviso delega utente, quando possibile. Una firma di accesso condiviso della delega utente offre una sicurezza superiore a una firma di accesso condiviso del servizio o a una firma di accesso condiviso dell'account. Una firma di accesso condiviso della delega utente è protetta con le credenziali di Microsoft Entra, in modo che non sia necessario archiviare la chiave dell'account con il codice.

  • Disporre di un piano di revoca per una firma di accesso condiviso. Assicurarsi di essere pronti a rispondere se una firma di accesso condiviso è compromessa.

  • Configurare un criterio di scadenza della firma di accesso condiviso per l'account di archiviazione. Un criterio di scadenza della firma di accesso condiviso specifica un intervallo consigliato in base al quale la firma di accesso condiviso è valida. I criteri di scadenza della firma di accesso condiviso si applicano a una firma di accesso condiviso del servizio o a una firma di accesso condiviso dell'account. Quando un utente genera una firma di accesso condiviso del servizio o una firma di accesso condiviso dell'account con un intervallo di validità superiore all'intervallo consigliato, verrà visualizzato un avviso. Se Archiviazione di Azure registrazione con Monitoraggio di Azure è abilitata, viene scritta una voce nei log di Archiviazione di Azure. Per altre informazioni, vedere Creare criteri di scadenza per le firme di accesso condiviso.

  • Creare un criterio di accesso archiviato per una firma di accesso condiviso del servizio. I criteri di accesso archiviati consentono di revocare le autorizzazioni per una firma di accesso condiviso del servizio senza dover rigenerare le chiavi dell'account di archiviazione. Impostare la loro scadenza a un momento molto lontano nel futuro (o infinito) e assicurarsi che venga aggiornata regolarmente in modo che ricorra nel futuro. È previsto un limite di cinque criteri di accesso archiviati per ogni contenitore.

  • Usare i tempi di scadenza a breve termine per una firma di accesso condiviso o una firma di accesso condiviso del servizio sas ad hoc. In questo modo, anche se una firma di accesso condiviso viene compromessa, è valida solo per un breve periodo di tempo. Questo consiglio è particolarmente importante se non è possibile fare riferimento a criteri di accesso archiviati Una scadenza breve consente anche di limitare la quantità di dati che è possibile scrivere in un BLOB riducendo il tempo disponibile per il caricamento.

  • Se necessario, chiedere ai client di rinnovare automaticamente la firma di accesso condiviso. È consigliabile rinnovare la firma di accesso condiviso nei client prima della scadenza in modo da avere la possibilità di effettuare altri tentativi qualora il servizio che fornisce la firma di accesso condiviso non sia disponibile. Questo potrebbe non essere necessario in alcuni casi. Ad esempio, è possibile che la firma di accesso condiviso venga usata per un numero ridotto di operazioni immediate e di breve durata. Queste operazioni devono essere completate entro il periodo di scadenza. Di conseguenza, non si prevede che la firma di accesso condiviso venga rinnovata. Tuttavia, se si dispone di un client che effettua regolarmente richieste tramite firma di accesso condiviso, la possibilità di scadenza entra in gioco.

  • Prestare attenzione all'ora di inizio della firma di accesso condiviso. Se si imposta l'ora di inizio per una firma di accesso condiviso sull'ora corrente, gli errori potrebbero verificarsi in modo intermittente per i primi minuti. Ciò è dovuto a computer diversi con tempi correnti leggermente diversi (noto come asimmetria dell'orologio). In generale, impostare l'ora di inizio ad almeno 15 minuti prima. Oppure evitare di impostarla, in modo che la firma diventi immediatamente valida in tutti i casi. Le stesse considerazioni sono valide anche per la scadenza, pertanto è consigliabile osservare fino a 15 minuti di sfasamento di orario in entrambe le direzioni per qualsiasi richiesta. Per i client che usano una versione REST precedente al 2012-02-12, la durata massima per una firma di accesso condiviso che non fa riferimento a un criterio di accesso archiviato è di 1 ora. Tutti i criteri che specificano un periodo più lungo di 1 ora avranno esito negativo.

  • Prestare attenzione al formato datetime della firma di accesso condiviso. Per alcune utilità,ad esempio AzCopy, i valori di data/ora devono essere formattati come '+%Y-%m-%dT%H:%M:%SZ'. Questo formato include in particolare i secondi.

  • Concedere i privilegi minimi possibili con la firma di accesso condiviso. Una procedura consigliata per la sicurezza consiste nel fornire a un utente i privilegi minimi necessari per il minor numero possibile di risorse. Usare una firma di accesso condiviso di sola lettura quando possibile. Se un utente necessita solo dell'accesso in lettura a un singolo oggetto, concedere l'accesso in lettura a tale singolo oggetto e non l'accesso in lettura/scrittura/eliminazione a tutti gli oggetti. Ciò consente anche di ridurre i danni se una firma di accesso condiviso viene compromessa in quanto la firma è meno potente nelle mani di un utente malintenzionato.

    Non esiste un modo diretto per identificare quali client hanno eseguito l'accesso a una risorsa. Tuttavia, è possibile usare i campi univoci nella firma di accesso condiviso, l'indirizzo IP firmato (sip), l'inizio firmato (st) e i campi di scadenza firmati (se) per tenere traccia dell'accesso. Ad esempio, è possibile generare un token di firma di accesso condiviso con una scadenza univoca che è possibile correlare con il client a cui è stato rilasciato.

  • Comprendere che l'account verrà fatturato per qualsiasi utilizzo, incluso tramite una firma di accesso condiviso. Se si fornisce l'accesso in scrittura a un BLOB, un utente può scegliere di caricare un BLOB da 200 GB. Se si offre anche l'accesso in lettura, l'utente potrebbe scegliere di scaricarlo 10 volte e ciò potrebbe comportare 2 TB di costi in uscita. Anche in questo caso, fornire autorizzazioni limitate per ridurre l'impatto potenziale delle azioni di utenti malintenzionati. Per ridurre questa minaccia, usare firme di accesso condiviso di breve durata, prestando però attenzione allo sfasamento di orario per la scadenza.

  • Convalidare i dati scritti usando una firma di accesso condiviso. Quando un'applicazione client scrive i dati nell'account di archiviazione, tenere presente che tali dati potrebbero causare problemi. Se si prevede di convalidare i dati, eseguire la convalida dopo la scrittura dei dati e prima che vengano usati dall'applicazione. Questa procedura consente inoltre di evitare la scrittura di dati danneggiati o dannosi nell'account da parte da un utente che ha acquisito correttamente la firma di accesso condiviso o di un utente che sfrutta una firma diffusa per errore.

  • Sapere quando non usare una firma di accesso condiviso. A volte i rischi associati a una determinata operazione rispetto all'account di archiviazione superano i vantaggi derivanti dall'uso di una firma di accesso condiviso. Per tali operazioni creare un servizio di livello intermedio che effettui operazioni di scrittura nell'account di archiviazione dopo autenticazione, controllo e convalida di regole di business. Talvolta è inoltre più semplice gestire l'accesso in modi diversi. Se ad esempio si vogliono rendere pubblicamente leggibili tutti i BLOB di un contenitore, è possibile rendere pubblico il contenitore anziché fornire una firma di accesso condiviso a ogni client per l'accesso.

  • Usare Monitoraggio di Azure e Archiviazione di Azure log per monitorare l'applicazione. Gli errori di autorizzazione possono verificarsi a causa di un'interruzione nel servizio del provider di firma di accesso condiviso. Possono verificarsi anche da una rimozione accidentale di un criterio di accesso archiviato. È possibile usare Monitoraggio di Azure e la registrazione dell'analisi dell'archiviazione per osservare eventuali picchi in questi tipi di errori di autorizzazione. Per altre informazioni, vedere metriche di Archiviazione di Azure in Monitoraggio di Azure e registrazione di Archiviazione di Azure Analytics.

  • Configurare un criterio di scadenza della firma di accesso condiviso per l'account di archiviazione. Le procedure consigliate consigliano di limitare l'intervallo per una firma di accesso condiviso nel caso in cui venga compromessa. Impostando un criterio di scadenza della firma di accesso condiviso per gli account di archiviazione, è possibile fornire un limite di scadenza superiore consigliato quando un utente crea una firma di accesso condiviso del servizio o una firma di accesso condiviso dell'account. Per altre informazioni, vedere Creare criteri di scadenza per le firme di accesso condiviso.

Nota

Archiviazione non tiene traccia del numero di firme di accesso condiviso generate per un account di archiviazione e nessuna API può fornire questo dettaglio. Se è necessario conoscere il numero di firme di accesso condiviso generate per un account di archiviazione, è necessario tenere traccia del numero manualmente.

Introduzione alla firma di accesso condiviso

Per iniziare a usare le firme di accesso condiviso, vedere gli articoli seguenti per ogni tipo di firma di accesso condiviso.

Firma di accesso condiviso di delega utente

Firma di accesso condiviso del servizio

Firma di accesso condiviso dell'account

Passaggi successivi