Condividi tramite


Concedere accesso limitato alle risorse di Azure Storage usando firme di accesso condivise

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

  • Risorse a cui il client può accedere.
  • Quali autorizzazioni hanno per quelle risorse.
  • Tempo di validità del SAS.

Tipi di firme di accesso condivisi

Azure Storage supporta tre tipi di firme di access condivise:

Importante

Per gli scenari in cui vengono utilizzate firme di accesso condiviso, Microsoft consiglia di usare un SAS di delega utente. Una firma di accesso condiviso con delega utente è protetta con le credenziali di Microsoft Entra e non dalla chiave dell'account, offrendo una maggiore sicurezza. Per ulteriori informazioni sull'autorizzazione per l'accesso ai dati, vedere Authorize access to data in Azure Storage.

Firma di accesso condiviso di delega utente

Una firma di accesso condiviso con 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 con delega utente è supportata per Blob Storage (inclusi gli endpoint di Data Lake Storage e dfs), Archiviazione di accodamento, Archiviazione di tabelle o File di Azure.

Per ulteriori informazioni sulla firma di accesso condiviso per la delega dell'utente, vedere Creare una firma di accesso condiviso per la delega dell'utente (API REST).

Firma di accesso condiviso del servizio

Una SAS del servizio è protetta con la chiave dell'account di archiviazione. Un Service SAS delega l'accesso a una risorsa solo in uno dei servizi di Azure Storage: Blob Storage (inclusi Data Lake Storage e gli endpoint dfs), Queue Storage, Archiviazione tabelle o Azure Files.

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

Firma di accesso condiviso dell'account

Una firma di accesso condiviso dell'account SAS è protetta con la chiave dell'account di archiviazione. Una SAS 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 ulteriori informazioni sull'account SAS, Creare un account SAS (API REST).

Una firma di access condivisa può assumere una delle due forme seguenti:

  • SAS ad hoc. Quando si crea una firma di accesso condiviso (Shared Access Signature) ad hoc, l'ora di inizio, la scadenza e le autorizzazioni vengono specificate nell'URI SAS. Qualsiasi tipo di firma di accesso condiviso può essere una firma ad hoc.
  • Service SAS con criteri di access 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 condivisone file. La politica di accesso archiviata può essere usata 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 con delega utente o una firma di accesso condiviso dell'account deve essere ad hoc. Le politiche di accesso archiviato non sono supportate per il SAS di delega utente o il SAS dell'account.

Funzionamento di una firma di accesso condiviso

Una firma di access condivisa è un token aggiunto all'URI per una risorsa Azure Storage. ovvero un token contenente un set speciale di parametri di query che indicano come è possibile accedere alle risorse dal client. Uno dei parametri di richiesta, la signature, è costruito dai parametri SAS e viene firmato con la chiave utilizzata per creare il SAS. Questa firma viene usata da Azure Storage per autorizzare accesso alla risorsa di archiviazione.

Nota

Non è possibile verificare la generazione di token SAS. Qualsiasi utente con privilegi per generare un token di firma di accesso condiviso, utilizzando la chiave dell'account o attraverso un'assegnazione di ruolo di Azure, può farlo senza che il proprietario dell'account di archiviazione ne sia a conoscenza. Prestare attenzione a limitare le autorizzazioni che consentono agli utenti di generare token SAS. Per impedire agli utenti di generare un SAS firmato con la chiave dell'account per i carichi di lavoro blob e coda, è possibile impedire l'accesso con chiave condivisa all'account di archiviazione. Per altre informazioni, vedere Impedire l'autorizzazione con chiave condivisa.

Firma e autorizzazione della firma di accesso condiviso (SAS)

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

Firma di un token SAS con una chiave di delega utente

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

Per ottenere la chiave e quindi creare la firma di accesso condiviso (SAS), all'entità di sicurezza di 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 con delega utente (API REST).

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

Sia un SAS di servizio che un SAS di account vengono firmati con la chiave dell'account di archiviazione. Per creare un SAS firmato 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 SAS vengono usate anche da Azure Storage per concedere accesso a un client che possiede il token SAS.

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

Tipo di SAS Tipo di autorizzazione
Firma di accesso condiviso di delega utente Microsoft Entra ID
Firma di accesso condiviso del servizio Chiave condivisa
Firma di accesso condiviso dell'account Chiave condivisa

Microsoft consiglia di usare un SAS con delega utente quando possibile per una maggiore sicurezza.

Token di firma di accesso condiviso

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

Le applicazioni client forniscono l'URI SAS ad Azure Storage come parte di una richiesta. Il servizio controlla quindi i parametri del SAS 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).

Ecco un esempio di URI SAS del servizio, che mostra l'URI della risorsa, il carattere delimitatore ('?') e il token SAS.

Diagramma che mostra i componenti di un URI di risorsa con token sas.

Nota

Il carattere delimitatore ('?') della stringa di query non fa parte del token SAS. Se si genera un token di firma di accesso condiviso dal portale, PowerShell, Azure CLI o uno degli SDK Azure Storage, potrebbe essere necessario aggiungere il carattere delimitatore all'URL della risorsa.

Quando usare una firma di access condivisa

Usare un SAS (firma di accesso condiviso) per concedere accesso sicuro alle risorse nel tuo account di archiviazione a qualsiasi client che altrimenti non dispone di autorizzazioni per le risorse di quel tuo account.

Uno scenario comune in cui una firma di accesso condiviso è utile è un servizio in cui gli utenti leggono e scrivono i propri dati nel tuo account di archiviazione. In uno scenario in cui un account storage archivia i dati utente, esistono due modelli di progettazione tipici:

  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 di scenario: servizio proxy front-end

  2. Un servizio leggero autentica il client secondo le necessità, quindi genera una firma di accesso condiviso (SAS). Quando l'applicazione client riceve la SAS, può accedere direttamente alle risorse dell'account di archiviazione. Le autorizzazioni di accesso sono definite dal SAS e per l'intervallo di tempo consentito dal SAS. La firma di accesso condiviso consente di ridurre la necessità di instradare tutti i dati attraverso il servizio proxy front-end.

    Diagramma scenario: servizio provider SAS

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 SAS.

Inoltre, è necessaria una SAS 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 utilizzare una firma di accesso condiviso (SAS) per autorizzare l'accesso anche al blob di destinazione.
  • Quando si copia un file in un altro file che si trova in un account storage diverso. Facoltativamente, è possibile utilizzare una Shared Access Signature (SAS) per autorizzare anche 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 nello stesso account di archiviazione.

Pratiche consigliate per l'uso di SAS

Quando si usano firme di access condivise nelle applicazioni, è necessario tenere presenti due potenziali rischi:

  • Se una firma di accesso condiviso viene divulgata, può essere usata da chiunque la ottenga, il che può potenzialmente compromettere l'account di archiviazione.
  • Se un SAS fornito a un'applicazione client scade e l'applicazione non è in grado di recuperarne uno nuovo dal servizio, le funzionalità dell'applicazione potrebbero essere compromesse.

Le raccomandazioni seguenti per l'uso di firme di access condivise possono contribuire a ridurre questi rischi:

  • Usare sempre HTTPS per creare o distribuire una firma di accesso condiviso. Se un SAS viene passato tramite HTTP e intercettato, un utente malintenzionato che esegue un attacco man-in-the-middle è in grado di leggere il SAS. È possibile usare quella firma di accesso condiviso proprio come avrebbe potuto l'utente previsto. Ciò può potenzialmente compromettere i dati sensibili o consentire all'utente malintenzionato di danneggiare i dati.

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

  • Predisporre un piano di revoca per una chiave di accesso condiviso. Assicurati di essere pronto a rispondere se un SAS è compromesso.

  • Configurare un criterio di scadenza della SAS (firma di accesso condiviso) per l'account di archiviazione. I criteri di scadenza della firma di accesso condiviso specificano un intervallo di validità consigliato. I criteri di scadenza della firma di accesso condiviso si applicano a una firma di accesso condiviso del servizio o dell'account. Quando un utente genera un SAS del servizio o un SAS dell'account con un intervallo di validità superiore a quello consigliato, vedrà un avviso. Se il logging di Azure Storage con Azure Monitor è abilitato, viene scritta una voce nei log di Azure Storage. Per altre informazioni, vedere Creare un criterio di scadenza per le firme di access condivise.

  • Creare un criterio di accesso archiviato per una firma di accesso condiviso del servizio SAS. I criteri di accesso archiviati consentono di revocare le autorizzazioni per un token SAS di servizio senza dover rigenerare le chiavi dell'account di archiviazione. Imposta la sua scadenza molto lontano nel futuro (o indefinito) e assicurati che venga aggiornata regolarmente per estenderla ulteriormente nel tempo. È previsto un limite di cinque criteri di access archiviati per ogni contenitore.

  • Usare una scadenza a breve termine per una firma di accesso condiviso del servizio o dell'account ad hoc. In questo modo, anche se una firma di accesso condiviso viene compromessa, è valida solo per un breve periodo di tempo. Questa procedura è particolarmente importante se non è possibile fare riferimento a un criterio di access archiviato. Una scadenza breve consente anche di limitare la quantità di dati che è possibile scrivere in un BLOB riducendo il tempo disponibile per il caricamento.

  • Consentire ai client di rinnovare automaticamente la SAS, se necessario. È consigliabile che i clienti rinnovino il SAS ben prima della scadenza, in modo da avere tempo per riprovare qualora il servizio che fornisce il SAS non sia disponibile. Questo potrebbe non essere necessario in alcuni casi. Ad esempio, è possibile destinare la firma di accesso condiviso a 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 il codice di firma di accesso condiviso (SAS) venga rinnovato. Tuttavia, se disponi di un cliente che effettua richieste regolarmente tramite SAS, devi considerare la possibilità che questo scada.

  • Prestare attenzione all'ora di inizio di Shared Access Signature (SAS). Se si imposta l'ora di inizio di una SAS (firma di accesso condiviso) all'orario corrente, potrebbero verificarsi errori in modo intermittente nei 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 SAS (firma di accesso condiviso) che non fa riferimento a un criterio di accesso archiviato è di 1 ora. Tutti i criteri di durata maggiore di un'ora non saranno validi.

  • Prestare attenzione al formato data e ora di SAS. 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 un SAS (firma di accesso condiviso) di sola lettura quando possibile. Se un utente ha bisogno solo di un accesso in lettura a un singolo oggetto, concedere loro 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 SAS viene compromessa in quanto la SAS è meno potente nelle mani di un attaccante.

    Non esiste un modo diretto per identificare quali client hanno eseguito l'accesso a una risorsa. Tuttavia, è possibile usare i campi univoci nel SAS, l'indirizzo IP firmato (sip), l'avvio firmato (st) e la scadenza firmata (se) per tenere traccia degli accessi. Ad esempio, è possibile generare un SAS token con una scadenza univoca che si può quindi correlare al client a cui è stato rilasciato.

  • Tenere presente che all'account verrà fatturato qualsiasi utilizzo, incluso quello tramite una firma di accesso condiviso. Se si forniscono access di scrittura in un BLOB, un utente può scegliere di caricare un BLOB da 200 GB. Se hai concesso loro anche l'accesso in lettura, possono scegliere di scaricarlo 10 volte, con costi di uscita per te di 2 TB. 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 utilizzando un SAS. Quando un'applicazione client scrive i dati nell'account storage, tenere presente che possono verificarsi problemi con tali dati. 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 di un utente che ha acquisito correttamente la firma di accesso condiviso (SAS) o di un utente che sfrutta una firma trapelata.

  • Sapere quando non utilizzare un SAS. A volte i rischi associati a un'operazione specifica sul tuo account di archiviazione superano i vantaggi derivanti dall'uso di un SAS. Per tali operazioni, creare un servizio di livello intermedio che scrive nel vostro account di archiviazione dopo aver eseguito la convalida delle regole aziendali, l'autenticazione e il controllo. Inoltre, a volte è più semplice gestire l'accesso in altri modi. Ad esempio, se si vuole rendere leggibili pubblicamente tutti i blob in un contenitore, è possibile rendere pubblico il contenitore anziché fornire una firma di accesso condiviso a ogni client per l'accesso.

  • Usare Azure Monitoraggio e Azure Storage log per monitorare l'applicazione. Gli errori di autorizzazione possono verificarsi a causa di un'interruzione del servizio del fornitore di SAS. Possono verificarsi anche a causa della rimozione accidentale di un criterio di accesso archiviato. È possibile utilizzare Azure Monitor e la registrazione di analisi di archiviazione per osservare eventuali picchi in questi tipi di errori di autorizzazione. Per ulteriori informazioni, vedere le metriche di Azure Storage in Azure Monitor e i log di Azure Storage Analytics.

  • Configurare un criterio di scadenza per la SAS (firma di accesso condiviso) dell'account di archiviazione. Le procedure consigliate raccomandano di limitare l'intervallo per una firma di accesso condiviso in caso di compromissione. Impostando una politica di scadenza SAS per i tuoi account di archiviazione, puoi fornire un limite di scadenza superiore consigliato quando un utente crea una SAS di servizio o una SAS di account. Per altre informazioni, vedere Creare un criterio di scadenza per le firme di access condivise.

Nota

Storage non tiene traccia del numero di firme di access condivise generate per un account storage 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.

Inizia con SAS

Per iniziare con le firme di accesso condivise, consulta gli articoli seguenti per ciascun tipo di SAS.

Firma di accesso condiviso di delega utente

Firma di accesso condiviso del servizio

Firma di accesso condiviso dell'account

Passaggi successivi