Gestire l'accesso in lettura anonimo a contenitori e BLOBManage anonymous read access to containers and blobs

È possibile abilitare l'accesso in lettura pubblico anonimo a un contenitore e ai relativi BLOB in Archiviazione BLOB di Azure.You can enable anonymous, public read access to a container and its blobs in Azure Blob storage. Ciò permette di concedere l'accesso in sola lettura a queste risorse senza condividere la chiave dell'account e senza richiedere una firma di accesso condiviso (SAS).By doing so, you can grant read-only access to these resources without sharing your account key, and without requiring a shared access signature (SAS).

L'accesso in lettura pubblico è ideale per scenari in cui si vuole che BLOB specifici siano sempre disponibili per l'accesso in lettura anonimo.Public read access is best for scenarios where you want certain blobs to always be available for anonymous read access. Per un controllo più accurato, è possibile creare una firma di accesso condiviso.For more fine-grained control, you can create a shared access signature. Le firme di accesso condiviso consentono di fornire accesso limitato usando autorizzazioni diverse, per un periodo di tempo specifico.Shared access signatures enable you to provide restricted access using different permissions, for a specific time period. Per altre informazioni sulla creazione di firme di accesso condiviso, vedere Uso delle firme di accesso condiviso.For more information about creating shared access signatures, see Using shared access signatures (SAS) in Azure Storage.

Concedere le autorizzazioni agli utenti anonimi per contenitori e BLOBGrant anonymous users permissions to containers and blobs

Per impostazione predefinita, solo il proprietario dell'account di archiviazione può accedere a un contenitore e ai BLOB in esso contenuti.By default, a container and any blobs within it may be accessed only by the owner of the storage account. Se si desidera assegnare a utenti anonimi autorizzazioni di lettura per un contenitore e i relativi BLOB, è possibile impostare le autorizzazioni del contenitore per consentire l'accesso pubblico.To give anonymous users read permissions to a container and its blobs, you can set the container permissions to allow public access. Gli utenti anonimi possono leggere i BLOB presenti in un contenitore accessibile pubblicamente senza effettuare l'autenticazione della richiesta.Anonymous users can read blobs within a publicly accessible container without authenticating the request.

È possibile configurare un contenitore con le autorizzazioni seguenti:You can configure a container with the following permissions:

  • Nessun accesso in lettura pubblico: solo il proprietario dell'account di archiviazione può accedere al contenitore e ai relativi BLOB.No public read access: The container and its blobs can be accessed only by the storage account owner. Questa è l'impostazione predefinita per tutti i nuovi contenitori.This is the default for all new containers.
  • Accesso in lettura pubblico solo per i BLOB: i dati del BLOB all'interno del contenitore possono essere letti tramite richiesta anonima, ma i dati del contenitore non sono disponibili.Public read access for blobs only: Blobs within the container can be read by anonymous request, but container data is not available. I client anonimi non possono enumerare i BLOB all'interno del contenitore.Anonymous clients cannot enumerate the blobs within the container.
  • Accesso in lettura pubblico completo: i dati del BLOB e del contenitore possono essere letti tramite richiesta anonima.Full public read access: All container and blob data can be read by anonymous request. I client possono enumerare i BLOB all'interno del contenitore tramite richiesta anonima, ma non sono in grado di enumerare i contenitori all'interno dell'account di archiviazione.Clients can enumerate blobs within the container by anonymous request, but cannot enumerate containers within the storage account.

È possibile impostare le autorizzazioni per il contenitore usando gli strumenti seguenti:You can use the following to set container permissions:

Impostare le autorizzazioni per in contenitore nel portale di AzureSet container permissions in the Azure portal

Per impostare le autorizzazioni per il contenitore nel portale di Azure, seguire questa procedura:To set container permissions in the Azure portal, follow these steps:

  1. Selezionare il pannello Account di archiviazione nel portale di Azure.Open your Storage account blade in the portal. È possibile trovare l'account di archiviazione selezionando Account di archiviazione nel pannello del menu principale del portale.You can find your storage account by selecting Storage accounts in the main portal menu blade.
  2. Nel pannello del menu in SERVIZIO BLOB selezionare BLOB.Under BLOB SERVICE on the menu blade, select Blobs.
  3. Fare clic con il pulsante destro del mouse sulla riga del contenitore o selezionare i puntini di sospensione per aprire il menu di scelta rapida del contenitore.Right-click on the container row or select the ellipsis to open the container's Context menu.
  4. In questo menu selezionare Criteri di accesso.Select Access policy in the context menu.
  5. Nel menu a discesa selezionare un Tipo di accesso.Select an Access type from the drop down menu.

    Finestra di dialogo Modifica metadati contenitore

Impostare le autorizzazioni per il contenitore con .NETSet container permissions with .NET

Per impostare le autorizzazioni per un contenitore con C# e la libreria client di archiviazione per .NET, recuperare prima di tutto le autorizzazioni esistenti per il contenitore eseguendo una chiamata al metodo GetPermissions.To set permissions for a container using C# and the Storage Client Library for .NET, first retrieve the container's existing permissions by calling the GetPermissions method. Impostare quindi la proprietà PublicAccess per l'oggetto BlobContainerPermissions restituito dal metodo GetPermissions.Then set the PublicAccess property for the BlobContainerPermissions object that is returned by the GetPermissions method. Infine, chiamare il metodo SetPermissions con le autorizzazioni aggiornate.Finally, call the SetPermissions method with the updated permissions.

L'esempio seguente imposta le autorizzazioni per il contenitore per l'accesso in lettura pubblico completo.The following example sets the container's permissions to full public read access. Per impostare le autorizzazioni per l'accesso in lettura pubblico solo per i BLOB, impostare la proprietà PublicAccess su BlobContainerPublicAccessType.Blob.To set permissions to public read access for blobs only, set the PublicAccess property to BlobContainerPublicAccessType.Blob. Per rimuovere tutte le autorizzazioni per gli utenti anonimi, impostare la proprietà su BlobContainerPublicAccessType.Off.To remove all permissions for anonymous users, set the property to BlobContainerPublicAccessType.Off.

public static void SetPublicContainerPermissions(CloudBlobContainer container)
{
    BlobContainerPermissions permissions = container.GetPermissions();
    permissions.PublicAccess = BlobContainerPublicAccessType.Container;
    container.SetPermissions(permissions);
}

Accesso anonimo a contenitori e BLOBAccess containers and blobs anonymously

Un client che accede a contenitori e BLOB in modo anonimo può usare costruttori che non richiedono credenziali.A client that accesses containers and blobs anonymously can use constructors that do not require credentials. L'esempio seguente mostra alcuni modi diversi per fare riferimento a risorse del servizio BLOB in modo anonimo.The following examples show a few different ways to reference Blob service resources anonymously.

Creare un oggetto client anonimoCreate an anonymous client object

È possibile creare un nuovo oggetto client del servizio per l'accesso anonimo, specificando l'endpoint del servizio BLOB per l'account.You can create a new service client object for anonymous access by providing the Blob service endpoint for the account. Tuttavia, è necessario conoscere anche il nome di un contenitore in tale account disponibile per l'accesso anonimo.However, you must also know the name of a container in that account that's available for anonymous access.

public static void CreateAnonymousBlobClient()
{
    // Create the client object using the Blob service endpoint.
    CloudBlobClient blobClient = new CloudBlobClient(new Uri(@"https://storagesample.blob.core.windows.net"));

    // Get a reference to a container that's available for anonymous access.
    CloudBlobContainer container = blobClient.GetContainerReference("sample-container");

    // Read the container's properties. Note this is only possible when the container supports full public read access.
    container.FetchAttributes();
    Console.WriteLine(container.Properties.LastModified);
    Console.WriteLine(container.Properties.ETag);
}

Fare riferimento a un contenitore in modo anonimoReference a container anonymously

Se si conosce l'URL per un contenitore disponibile in modo anonimo, è possibile usarlo per fare riferimento direttamente al contenitore.If you have the URL to a container that is anonymously available, you can use it to reference the container directly.

public static void ListBlobsAnonymously()
{
    // Get a reference to a container that's available for anonymous access.
    CloudBlobContainer container = new CloudBlobContainer(new Uri(@"https://storagesample.blob.core.windows.net/sample-container"));

    // List blobs in the container.
    foreach (IListBlobItem blobItem in container.ListBlobs())
    {
        Console.WriteLine(blobItem.Uri);
    }
}

Fare riferimento a un BLOB in modo anonimoReference a blob anonymously

Se si conosce l'URL per un BLOB disponibile per l'accesso anonimo, è possibile fare riferimento direttamente al BLOB con tale URL:If you have the URL to a blob that is available for anonymous access, you can reference the blob directly using that URL:

public static void DownloadBlobAnonymously()
{
    CloudBlockBlob blob = new CloudBlockBlob(new Uri(@"https://storagesample.blob.core.windows.net/sample-container/logfile.txt"));
    blob.DownloadToFile(@"C:\Temp\logfile.txt", System.IO.FileMode.Create);
}

Funzionalità disponibili per utenti anonimiFeatures available to anonymous users

Nella tabella seguente sono riportate le operazioni che possono essere richiamate da utenti anonimi quando l'ACL di un contenitore è impostato per consentire l'accesso pubblico.The following table shows which operations may be called by anonymous users when a container's ACL is set to allow public access.

Operazione RESTREST Operation Autorizzazione con accesso in lettura pubblico completoPermission with full public read access Autorizzazione con accesso in lettura pubblico solo per BLOBPermission with public read access for blobs only
List ContainersList Containers Solo proprietarioOwner only Solo proprietarioOwner only
Create ContainerCreate Container Solo proprietarioOwner only Solo proprietarioOwner only
Get Container PropertiesGet Container Properties TuttiAll Solo proprietarioOwner only
Get Container MetadataGet Container Metadata TuttiAll Solo proprietarioOwner only
Set Container MetadataSet Container Metadata Solo proprietarioOwner only Solo proprietarioOwner only
Get Container ACLGet Container ACL Solo proprietarioOwner only Solo proprietarioOwner only
Set Container ACLSet Container ACL Solo proprietarioOwner only Solo proprietarioOwner only
Delete ContainerDelete Container Solo proprietarioOwner only Solo proprietarioOwner only
List BlobsList Blobs TuttiAll Solo proprietarioOwner only
Put BlobPut Blob Solo proprietarioOwner only Solo proprietarioOwner only
Get BlobGet Blob TuttiAll TuttiAll
Get Blob PropertiesGet Blob Properties TuttiAll TuttiAll
Set Blob PropertiesSet Blob Properties Solo proprietarioOwner only Solo proprietarioOwner only
Get Blob MetadataGet Blob Metadata TuttiAll TuttiAll
Set Blob MetadataSet Blob Metadata Solo proprietarioOwner only Solo proprietarioOwner only
Put BlockPut Block Solo proprietarioOwner only Solo proprietarioOwner only
Get Block List (solo blocchi con commit)Get Block List (committed blocks only) TuttiAll TuttiAll
Get Block List (solo blocchi senza commit o tutti i blocchi)Get Block List (uncommitted blocks only or all blocks) Solo proprietarioOwner only Solo proprietarioOwner only
Put Block ListPut Block List Solo proprietarioOwner only Solo proprietarioOwner only
Delete BlobDelete Blob Solo proprietarioOwner only Solo proprietarioOwner only
Copy BlobCopy Blob Solo proprietarioOwner only Solo proprietarioOwner only
Snapshot BlobSnapshot Blob Solo proprietarioOwner only Solo proprietarioOwner only
Lease BlobLease Blob Solo proprietarioOwner only Solo proprietarioOwner only
Put PagePut Page Solo proprietarioOwner only Solo proprietarioOwner only
Get Page RangesGet Page Ranges TuttiAll TuttiAll
Append BlobAppend Blob Solo proprietarioOwner only Solo proprietarioOwner only

Passaggi successiviNext steps