Esporta (0) Stampa
Espandi tutto

Creare e utilizzare una firma di accesso condiviso

Aggiornamento: gennaio 2015

Una firma di accesso condiviso è un URI che concede diritti di accesso limitati a contenitori, Blob, code e tabelle per un intervallo di tempo specifico. Fornendo a un client una firma di accesso condiviso è possibile consentire l'accesso a risorse nell'account di archiviazione senza condividere la chiave dell'account.

noteNota
Per una panoramica dei concetti e un'esercitazione sulle firme di accesso condiviso, vedere la pagina relativa alle firme di accesso condiviso.

Tra le operazioni supportate mediante le firme di accesso condiviso sono incluse:

  • Lettura e scrittura del contenuto di Blob di pagine o in blocchi, elenchi di blocchi, proprietà e metadati

  • Eliminazione, impostazione di lease e creazione di uno snapshot di un Blob

  • Elenco dei Blob in un contenitore

  • Aggiunta, rimozione, aggiornamento ed eliminazione dei messaggi in coda (libreria del client di archiviazione 2.0 e versioni successive)

  • Recupero dei metadati della coda, incluso il conteggio messaggi (libreria del client di archiviazione 2.0 e versioni successive)

  • Esecuzione di query, aggiunta, aggiornamento, eliminazione e upserting delle entità tabella (libreria del client di archiviazione 2.0 e versioni successive)

I parametri di query dell'URI della firma di accesso condiviso incorporano tutte le informazioni necessarie per concedere l'accesso controllato a una risorsa di archiviazione. I parametri di query dell'URI consentono di specificare il periodo di validità della firma di accesso condiviso, le autorizzazioni concesse, la risorsa che deve essere resa disponibile e la firma che i servizi di archiviazione devono utilizzare per autenticare la richiesta.

L'URI della firma di accesso condiviso può inoltre fare riferimento a criteri di accesso archiviati che offrono un livello di controllo aggiuntivo su un set di firme, inclusa la possibilità di modificare o revocare l'accesso alla risorsa qualora diventi necessario. Per ulteriori informazioni sui criteri di accesso archiviati, vedere Utilizzare un criterio di accesso archiviato.

Per informazioni sul formato URI di una firma di accesso condiviso, vedere Delega dell'accesso con una firma di accesso condiviso.

Una firma di accesso condiviso concede l'accesso alla risorsa specificata dalle autorizzazioni concesse dell'URI. Utilizzare sempre HTTPS per creare un URI con firma di accesso condiviso. L'utilizzo di HTTP con firme di accesso condiviso può rendere vulnerabile l'account di archiviazione a utenti malintenzionati.

Se una firma di accesso condiviso concede un accesso non destinato al pubblico generale, è necessario crearla con il minor numero possibile di autorizzazioni. Inoltre, è necessario distribuire ai client una firma di accesso condiviso in modo sicuro su una connessione sicura, associarla a criteri di accesso archiviati ai fini di revoca e specificare la durata più breve possibile per la firma.

ImportantImportante
Un URI con firma di accesso condiviso è associata alla chiave dell'account utilizzata per creare la firma e a eventuali criteri di accesso archiviati associati. Se non si specifica alcun criterio di accesso archiviato, l'unico modo per revocare una firma di accesso condiviso consiste nel modificare la chiave dell'account.

Nel codice di esempio riportato di seguito viene creato un criterio di accesso in un contenitore, quindi viene generata una firma di accesso condiviso per il contenitore. È quindi possibile assegnare ai client questa firma di accesso condiviso:

// The connection string for the storage account.  Modify for your account.
string storageConnectionString =
   "DefaultEndpointsProtocol=https;" +
   "AccountName=myaccount;" +
   "AccountKey=<account-key>";

// As an alternative, you can retrieve storage account information from an app.config file. 
// This is one way to store and retrieve a connection string if you are 
// writing an application that will run locally, rather than in Windows Azure.

// string storageConnectionString = ConfigurationManager.AppSettings["StorageAccountConnectionString"];

// Create the storage account with the connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storageConnectionString);
                                               
// Create the blob client object.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

// Get a reference to the container for which shared access signature will be created.
CloudBlobContainer container = blobClient.GetContainerReference("mycontainer");
container.CreateIfNotExists();

// Create blob container permissions, consisting of a shared access policy 
// and a public access setting. 
BlobContainerPermissions blobPermissions = new BlobContainerPermissions();

// The shared access policy provides 
// read/write access to the container for 10 hours.
blobPermissions.SharedAccessPolicies.Add("mypolicy", new SharedAccessBlobPolicy()
{
   // To ensure SAS is valid immediately, don’t set start time.
   // This way, you can avoid failures caused by small clock differences.
   SharedAccessExpiryTime = DateTime.UtcNow.AddHours(10),
   Permissions = SharedAccessBlobPermissions.Write |
      SharedAccessBlobPermissions.Read
});

// The public access setting explicitly specifies that 
// the container is private, so that it can't be accessed anonymously.
blobPermissions.PublicAccess = BlobContainerPublicAccessType.Off;

// Set the permission policy on the container.
container.SetPermissions(blobPermissions);

// Get the shared access signature to share with users.
string sasToken =
   container.GetSharedAccessSignature(new SharedAccessBlobPolicy(), "mypolicy");

Un client che riceve una firma di accesso condiviso può essere utilizzato nel codice per costruire un oggetto di tipo StorageCredentials. Tali credenziali possono quindi essere utilizzate per creare un oggetto CloudStorageAccount o CloudBlobClient da utilizzare con la risorsa, come illustrato in questo esempio:

Uri blobUri = new Uri("https://myaccount.blob.core.windows.net/mycontainer/myblob.txt");
            
// Create credentials with the SAS token. The SAS token was created in previous example.
StorageCredentials credentials = new StorageCredentials(sasToken);

// Create a new blob.
CloudBlockBlob blob = new CloudBlockBlob(blobUri, credentials);

// Upload the blob. 
// If the blob does not yet exist, it will be created. 
// If the blob does exist, its existing content will be overwritten.
using (var fileStream = System.IO.File.OpenRead(@"c:\Test\myblob.txt"))
{
    blob.UploadFromStream(fileStream);
}

Vedere anche

Mostra:
© 2015 Microsoft