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

Importante

Per gli scenari in cui vengono usate le firme di accesso condiviso, Microsoft consiglia di usare una firma di accesso condiviso di delega utente. Una firma di accesso condiviso di delega utente è protetta con le credenziali di Microsoft Entra e non con la chiave dell'account, in quanto offre una sicurezza superiore. Per altre informazioni sull'autorizzazione per l'accesso ai dati, vedere Autorizzare l'accesso ai dati in Archiviazione di Azure.

Firma di accesso condiviso di delega utente

Una firma di accesso condiviso di 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 di 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).

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, la scadenza e le autorizzazioni vengono specificate nell'URI corrispondente. 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, ovvero 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 criteri di accesso archiviati, la firma eredita i vincoli, ovvero ora di inizio, scadenza e autorizzazioni, definiti 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 di delega utente o dell'account.

Funzionamento di una firma di accesso condiviso

Una firma di accesso condiviso è un token aggiunto all'URI di una risorsa di Archiviazione di Azure, ovvero un token contenente 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 di 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 una 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 di 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 contenente 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

Una firma di accesso condiviso del servizio e una firma di accesso condiviso dell'account, vengono entrambe 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 di 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 di delega utente quando possibile per una maggiore sicurezza.

Token della firma di accesso condiviso

Il token di firma di accesso condiviso è una stringa generata sul lato client, ad esempio usando una delle librerie client di Archiviazione di Azure. Il token di firma di accesso condiviso non viene registrato in alcun modo da Archiviazione di Azure. È 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 della firma di accesso condiviso ad Archiviazione di Azure come parte di una richiesta. Il servizio controlla quindi i parametri della firma di accesso condiviso e la firma per verificarne la validità. 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 un URI della firma di accesso condiviso del servizio, che mostra l'URI della risorsa, il carattere delimitatore ('?') e il token di firma di accesso condiviso.

Diagramma che mostra i componenti dell'URI di una risorsa con token di firma di accesso condiviso.

Nota

Il carattere delimitatore ('?') della 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 di 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.

    Diagramma dello scenario: il servizio proxy front-end

  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.

    Diagramma dello scenario: servizio provider di firma di accesso condiviso

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 risiede 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 risiede 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. Può quindi usare tale firma di accesso condiviso esattamente come l'utente autorizzato. Ciò può potenzialmente compromettere i dati sensibili o consentire all'utente malintenzionato di danneggiare i dati.

  • Usare una firma di accesso condiviso di delega utente, quando possibile. Una firma di accesso condiviso di delega utente offre una sicurezza superiore rispetto a una firma di accesso condiviso del servizio o a una firma di accesso condiviso dell'account. Una firma di accesso condiviso di delega utente è protetta con le credenziali di Microsoft Entra e pertanto non è 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 per la validità della firma di accesso condiviso. 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 la registrazione di Archiviazione di Azure 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 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 una scadenza a breve termine in una firma di accesso condiviso, una firma di accesso condiviso del servizio o una firma di accesso condiviso dell'account 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. Se tuttavia si dispone di client che effettuano normalmente richieste tramite la firma di accesso condiviso, è necessario considerare la possibilità che la firma scada.

  • Prestare attenzione all'ora di inizio della firma di accesso condiviso. Se si imposta l'ora di inizio corrente per una firma di accesso condiviso, 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 di REST precedente la 2012-02-12, la durata massima della firma di accesso condiviso che non fa riferimento a criteri di accesso archiviati è di 1 ora. Tutti i criteri di durata maggiore di un'ora non saranno validi.

  • Prestare attenzione al formato di data/ora della firma di accesso condiviso. Per alcune utilità,ad esempio AzCopy, i valori di data/ora devono avere il formato seguente: '+%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 solo tale tipo di accesso per tale oggetto e non l'accesso in lettura/scrittura/eliminazione per 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 associare al client a cui è stato rilasciato.

  • Comprendere che all'account verrà fatturato qualsiasi tipo di utilizzo, incluso quello effettuato tramite la firma di accesso condiviso. Se si fornisce accesso in scrittura a un BLOB, un utente potrebbe 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 tramite 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. Talvolta i rischi associati a una particolare operazione su un account di archiviazione superano i benefici 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 i log di Monitoraggio di Azure e Archiviazione di Azure per monitorare l'applicazione. Gli errori di autorizzazione possono verificarsi a causa di un'interruzione nel servizio del provider della firma di accesso condiviso. Possono verificarsi anche in seguito a una rimozione accidentale di un criterio di accesso archiviato. È consigliabile 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 Analisi archiviazione di Azure.

  • Configurare un criterio di scadenza della firma di accesso condiviso per l'account di archiviazione. Le procedure consigliate suggeriscono di limitare l'intervallo per una firma di accesso condiviso in caso di compromissione. 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

L'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