Usare criteri di accesso archiviati per delegare l'accesso all'archiviazione di Azure

Completato

Una firma di accesso condiviso rappresenta un modo sicuro per concedere l'accesso ai client senza dover condividere le credenziali di Azure. Questa facilità d'uso presenta però uno svantaggio, ovvero chiunque disponga della firma di accesso condiviso corretta può accedere al file durante il periodo di validità. L'unico modo per revocare l'accesso alla risorsa di archiviazione consiste nel rigenerare le chiavi di accesso. Per la rigenerazione è necessario aggiornare tutte le app che usano la vecchia chiave condivisa in modo che ne usino una nuova. Un'altra opzione è associare le firme di accesso condiviso a criteri di accesso archiviati.

Dopo aver aggiunto la funzionalità di firma di accesso condiviso all'app, è risultato evidente quanto sia poco flessibile dover creare una firma di accesso condiviso per ogni immagine, con relativi controlli di accesso e scadenza. Si vuole aggiornare l'app per usare un criterio di accesso archiviato nel contenitore di archiviazione. Dopo aver definito il criterio si vuole verificare che sia possibile aggiornare la scadenza con applicazione a tutti i token di firma di accesso condiviso creati.

Contenuto dell'unità:

  • Usare un criterio di accesso archiviato.
  • Usare l'API Archiviazione C# per creare token di firma di accesso condiviso associati ai nuovi criteri di accesso.
  • Verificare la possibilità di modificare tutti i token di firma di accesso condiviso aggiornando il criterio di accesso archiviato nel portale di Azure.

Che cosa sono i criteri di accesso archiviati?

È possibile creare criteri di accesso archiviati per quattro tipi di risorse di archiviazione:

  • Contenitori BLOB
  • Condivisioni file
  • Code
  • Tabelle

Il criterio di accesso archiviato creato per un contenitore BLOB può essere usato per tutti i BLOB in esso contenuti e per il contenitore stesso. Il criterio di accesso archiviato viene creato con le proprietà seguenti:

  • Identificatore: nome che verrà usato per fare riferimento al criterio di accesso archiviato.
  • Ora di inizio: valore DateTimeOffset per la data e l'ora in cui il criterio può iniziare a essere usato. Questo valore può essere Null.
  • Ora di scadenza: valore DateTimeOffset per la data e l'ora di scadenza del criterio. Dopo questo periodo di tempo, le richieste di archiviazione avranno esito negativo con codice di errore 403.
  • Autorizzazioni: elenco di autorizzazioni in forma di stringa che può includere uno o tutti i valori acdlrw.

Screenshot del portale di Azure che mostra un criterio di accesso archiviato.

Creare criteri di accesso archiviati

È possibile creare un criterio di accesso archiviato con codice C#, usando il portale di Azure o i comandi dell'interfaccia della riga di comando di Azure.

Con codice .NET C#

BlobSignedIdentifier identifier = new BlobSignedIdentifier
{
    Id = "stored access policy identifier",
    AccessPolicy = new BlobAccessPolicy
    {
        ExpiresOn = DateTimeOffset.UtcNow.AddHours(1),
        Permissions = "rw"
    }
};

blobContainer.SetAccessPolicy(permissions: new BlobSignedIdentifier[] { identifier });

Con il portale

Nel portale passare all'account di archiviazione e quindi al contenitore di archiviazione BLOB. A sinistra selezionare Criterio di accesso. Per aggiungere un nuovo criterio di accesso archiviato, selezionare + Aggiungi criteri.

È quindi possibile immettere tutti i parametri richiesti.

Screenshot delle opzioni per l'aggiunta di un criterio di accesso.

Con comandi dell'interfaccia della riga di comando di Azure

az storage container policy create \
    --name <stored access policy identifier> \
    --container-name <container name> \
    --start <start time UTC datetime> \
    --expiry <expiry time UTC datetime> \
    --permissions <(a)dd, (c)reate, (d)elete, (l)ist, (r)ead, or (w)rite> \
    --account-key <storage account key> \
    --account-name <storage account name> \

Creare token di firma di accesso condiviso e associarli ai criteri di accesso archiviati

Ora si associerà il criterio di accesso archiviato creato agli eventuali nuovi token di firma di accesso condiviso necessari. Per l'app Web per le immagini di diagnostica dei pazienti dell'azienda, sarà necessario aggiornare il codice esistente per aggiungere il codice precedente. Nel metodo che crea il token di firma di accesso condiviso si fa quindi riferimento al nuovo criterio di accesso archiviato.

Tutto il codice esistente necessario per creare il token di firma di accesso condiviso è:

BlobSasBuilder sas = new BlobSasBuilder
{
    BlobContainerName = blob.BlobContainerName,
    BlobName = blob.Name,
    Resource = "b",
    ExpiresOn = DateTimeOffset.UtcNow.AddMinutes(1)
};
// Allow read access
sas.SetPermissions(BlobSasPermissions.Read);

e può essere sostituito facendo riferimento al nuovo criterio di accesso.

// Create a user SAS that only allows reading for a minute
BlobSasBuilder sas = new BlobSasBuilder
{
    Identifier = "stored access policy identifier"
};

È possibile avere fino a cinque criteri di accesso archiviati per un singolo contenitore BLOB.