Gerenciar o acesso de leitura anônimo aos contêineres e blobsManage anonymous read access to containers and blobs

Você pode habilitar o acesso de leitura anônimo, público para um contêiner e seus blobs no Armazenamento de Blobs do Azure.You can enable anonymous, public read access to a container and its blobs in Azure Blob storage. Ao fazer isso, você pode conceder acesso somente leitura a esses recursos sem compartilhar a chave da conta e sem exigir uma SAS (assinatura de acesso compartilhado).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).

O acesso de leitura público é ideal para cenários em que você quer que determinados blobs sempre estejam disponíveis para acesso de leitura anônimo.Public read access is best for scenarios where you want certain blobs to always be available for anonymous read access. Para ter um controle mais refinado, você pode criar uma assinatura de acesso compartilhado.For more fine-grained control, you can create a shared access signature. As assinaturas de acesso compartilhado permitem fornecer acesso restrito usando permissões diferentes, por um período específico.Shared access signatures enable you to provide restricted access using different permissions, for a specific time period. Para saber mais sobre como criar assinaturas de acesso compartilhado, veja Usando SAS (Assinaturas de Acesso Compartilhado) no Armazenamento do Azure.For more information about creating shared access signatures, see Using shared access signatures (SAS) in Azure Storage.

Conceder permissões de usuários anônimos a contêineres e blobsGrant anonymous users permissions to containers and blobs

Por padrão, um contêiner e todos os BLOBs dentro dele podem ser acessados somente por um usuário que tenha recebido as permissões apropriadas.By default, a container and any blobs within it may be accessed only by a user that has been given appropriate permissions. Para conceder aos usuários anônimos acesso de leitura a um contêiner e seus BLOBs, você pode definir o nível de acesso público do contêiner.To grant anonymous users read access to a container and its blobs, you can set the container public access level. Quando você concede acesso público a um contêiner, os usuários anônimos podem ler BLOBs dentro de um contêiner publicamente acessível sem autorizar a solicitação.When you grant public access to a container, then anonymous users can read blobs within a publicly accessible container without authorizing the request.

Você pode configurar um contêiner com as seguintes permissões:You can configure a container with the following permissions:

  • Sem acesso de leitura público: O contêiner e seus BLOBs podem ser acessados somente pelo proprietário da conta de armazenamento.No public read access: The container and its blobs can be accessed only by the storage account owner. Esse é o padrão para todos os novos contêineres.This is the default for all new containers.
  • Acesso de leitura público somente para BLOBs: Os BLOBs dentro do contêiner podem ser lidos por solicitação anônima, mas os dados do contêiner não estão disponíveis.Public read access for blobs only: Blobs within the container can be read by anonymous request, but container data is not available. Os clientes não podem enumerar os blobs no contêiner.Anonymous clients cannot enumerate the blobs within the container.
  • Acesso de leitura público para contêiner e seus BLOBs: Todos os dados de contêiner e BLOB podem ser lidos por solicitação anônima.Public read access for container and its blobs: All container and blob data can be read by anonymous request. Os clientes podem enumerar os blobs no contêiner por meio solicitação anônima, mas não podem enumerar os contêineres na conta de armazenamento.Clients can enumerate blobs within the container by anonymous request, but cannot enumerate containers within the storage account.

Definir o nível de acesso público do contêiner no portal do AzureSet container public access level in the Azure portal

No portal do Azure, você pode atualizar o nível de acesso público para um ou mais contêineres:From the Azure portal, you can update the public access level for one or more containers:

  1. Navegue até a visão geral da sua conta de armazenamento na portal do Azure.Navigate to your storage account overview in the Azure portal.
  2. Em serviço blob na folha do menu, selecione BLOBs.Under Blob service on the menu blade, select Blobs.
  3. Selecione os contêineres para os quais você deseja definir o nível de acesso público.Select the containers for which you want to set the public access level.
  4. Use o botão alterar nível de acesso para exibir as configurações de acesso público.Use the Change access level button to display the public access settings.
  5. Selecione o nível de acesso público desejado na lista suspensa nível de acesso público e clique no botão OK para aplicar a alteração aos contêineres selecionados.Select the desired public access level from the Public access level dropdown and click the OK button to apply the change to the selected containers.

A captura de tela a seguir mostra como alterar o nível de acesso público para os contêineres selecionados.The following screenshot shows how to change the public access level for the selected containers.

Captura de tela mostrando como definir o nível de acesso público no portal

Observação

Você não pode alterar o nível de acesso público para um blob individual.You cannot change the public access level for an individual blob. O nível de acesso público é definido somente no nível de contêiner.Public access level is set only at the container level.

Definir o nível de acesso público do contêiner com .NETSet container public access level with .NET

Para definir permissões para um contêiner usando a biblioteca de cliente de armazenamento do Azure para .NET, primeiro recupere as permissões existentes do contêiner chamando um dos seguintes métodos:To set permissions for a container using the Azure Storage client library for .NET, first retrieve the container's existing permissions by calling one of the following methods:

Em seguida, defina a propriedade PublicAccess no objeto BlobContainerPermissions que é retornado pelo método getPermissions .Next, set the PublicAccess property on the BlobContainerPermissions object that is returned by the GetPermissions method.

Por fim, chame um dos seguintes métodos para atualizar as permissões do contêiner:Finally, call one of the following methods to update the container's permissions:

O exemplo a seguir define as permissões do contêiner para acesso de leitura público completo.The following example sets the container's permissions to full public read access. Para definir as permissões como acesso de leitura público somente para os blobs, defina a propriedade PublicAccess como BlobContainerPublicAccessType.Blob.To set permissions to public read access for blobs only, set the PublicAccess property to BlobContainerPublicAccessType.Blob. Para remover todas as permissões para usuários anônimos, defina a propriedade como BlobContainerPublicAccessType.Off.To remove all permissions for anonymous users, set the property to BlobContainerPublicAccessType.Off.

private static async Task SetPublicContainerPermissions(CloudBlobContainer container)
{
    BlobContainerPermissions permissions = await container.GetPermissionsAsync();
    permissions.PublicAccess = BlobContainerPublicAccessType.Container;
    await container.SetPermissionsAsync(permissions);

    Console.WriteLine("Container {0} - permissions set to {1}", container.Name, permissions.PublicAccess);
}

Acessar contêineres e blobs anonimamenteAccess containers and blobs anonymously

Um cliente que acessa contêineres e blobs anonimamente pode usar construtores que não necessitam de credenciais.A client that accesses containers and blobs anonymously can use constructors that do not require credentials. Os exemplos a seguir mostram algumas maneiras diferentes de referenciar contêineres e blobs anonimamente.The following examples show a few different ways to reference containers and blobs anonymously.

Criar um objeto de cliente anônimoCreate an anonymous client object

Você pode criar um novo objeto de cliente de serviço para acesso anônimo fornecendo o ponto de extremidade de armazenamento de BLOBs para a conta.You can create a new service client object for anonymous access by providing the Blob storage endpoint for the account. No entanto, você também precisa saber o nome de um contêiner dessa conta que esteja disponível para acesso anônimo.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 storage endpoint for your account.
    CloudBlobClient blobClient = new CloudBlobClient(
        new Uri(@"https://storagesamples.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);
}

Fazer referência a um contêiner anonimamenteReference a container anonymously

Se tiver a URL para um contêiner que está disponível de forma anônima, você pode usá-lo para fazer referência diretamente ao contêiner.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://storagesamples.blob.core.windows.net/sample-container"));

    // List blobs in the container.
    // Note this is only possible when the container supports full public read access.
    foreach (IListBlobItem blobItem in container.ListBlobs())
    {
        Console.WriteLine(blobItem.Uri);
    }
}

Fazer referência a um blob anonimamenteReference a blob anonymously

Se tiver a URL para um blob que está disponível para acesso anônimo, você pode fazer referência ao blob diretamente usando esta 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://storagesamples.blob.core.windows.net/sample-container/logfile.txt"));
    blob.DownloadToFile(@"C:\Temp\logfile.txt", FileMode.Create);
}

Próximas etapasNext steps