Compartilhar via


Acessar o Armazenamento do Azure de um aplicativo Web usando identidades gerenciadas

Saiba como acessar o Armazenamento do Azure para um aplicativo Web (não um usuário conectado) em execução no Serviço de Aplicativo do Azure usando identidades gerenciadas.

Diagrama que mostra como acessar o armazenamento.

Você deseja adicionar o acesso ao plano de dados do Azure (Armazenamento do Azure, Banco de Dados SQL do Azure, Azure Key Vault ou outros serviços) no aplicativo Web. Você pode usar uma chave compartilhada, mas precisa se preocupar com a segurança operacional de quem pode criar, implantar e gerenciar o segredo. Também é possível que a chave possa ser verificada no GitHub, pelo qual os hackers sabem como procurar. Um modo mais seguro de permitir o acesso do aplicativo Web aos dados é pelo uso de identidades gerenciadas.

Uma identidade gerenciada da ID do Microsoft Entra permite que o Serviço de Aplicativo acesse recursos pelo controle de acesso baseado em função (RBAC), sem a necessidade de credenciais do aplicativo. Depois de atribuir uma identidade gerenciada ao seu aplicativo Web, o Azure cuida da criação e da distribuição de um certificado. As pessoas não precisam se preocupar em gerenciar segredos nem credenciais de aplicativo.

Neste tutorial, você aprenderá como:

  • Criar uma identidade gerenciada atribuída ao sistema em um aplicativo Web.
  • Criar uma conta de armazenamento e um contêiner do Armazenamento de Blobs do Azure.
  • Acessar o armazenamento por meio de um aplicativo Web usando identidades gerenciadas.

Caso você não tenha uma assinatura do Azure, crie uma conta gratuita do Azure antes de começar.

Pré-requisitos

Habilitar a identidade gerenciada em um aplicativo

Se você criar e publicar o aplicativo Web por meio do Visual Studio, a identidade gerenciada foi habilitada no aplicativo para você. No serviço de aplicativo, selecione Identidade no painel esquerdo e escolha Atribuído ao sistema. Verifique se o Status está definido como Ativado. Caso contrário, selecione Salvar e Sim para habilitar a identidade gerenciada atribuída ao sistema. Quando a identidade gerenciada é habilitada, o status é definido como Ativado e a ID do objeto fica disponível.

Captura de tela que mostra a opção Identidade atribuída ao sistema.

Essa etapa cria uma ID do objeto diferente da ID do aplicativo criada no painel Autenticação/Autorização. Copie a ID do objeto da identidade gerenciada atribuída ao sistema. Você precisará dela mais tarde.

Criar uma conta de armazenamento e um contêiner do Armazenamento de Blobs

Agora você está pronto para criar uma conta de armazenamento e um contêiner do Armazenamento de Blobs.

Cada conta de armazenamento deve pertencer a um grupo de recursos do Azure. Um grupo de recursos é um contêiner lógico para agrupar seus serviços do Azure. Quando você cria uma conta de armazenamento, tem a opção de criar um novo grupo de recursos ou usar um grupo de recursos existente. Este artigo mostra como criar um grupo de recursos.

Uma conta de armazenamento de uso geral v2 fornece acesso a todos os serviços de Armazenamento do Azure: blobs, arquivos, filas, tabelas e discos. As etapas descritas aqui criam uma conta de armazenamento de uso geral v2, mas as etapas para a criação de qualquer tipo de conta de armazenamento são semelhantes.

Os blobs no Armazenamento do Azure são organizados em contêineres. Para carregar um blob posteriormente neste tutorial, crie primeiro um contêiner.

Para criar uma conta de armazenamento de uso geral v2 no portal do Azure, siga estas etapas.

  1. No menu do portal do Azure, selecione Todos os serviços. Na lista de recursos, insira Contas de Armazenamento. Quando você começa a digitar, a lista é filtrada com base em sua entrada. Selecione Contas de Armazenamento.

  2. Na janela Contas de Armazenamento que é exibida, escolha Criar.

  3. Selecione a assinatura na qual você deseja criar a conta de armazenamento.

  4. No campo Grupo de recursos, selecione o grupo de recursos que contém o aplicativo Web no menu suspenso.

  5. Em seguida, insira um nome para sua conta de armazenamento. O nome escolhido deve ser exclusivo no Azure. O nome também precisa ter entre 3 e 24 caracteres e só pode incluir números e letras minúsculas.

  6. Selecione um local para sua conta de armazenamento ou use o local padrão.

  7. Para Desempenho, selecione a opção Padrão.

  8. Para Redundância, selecione a opção Armazenamento com redundância local (LRS) a partir da lista suspensa.

  9. Selecione Revisão para examinar suas configurações da conta de armazenamento e criar a conta.

  10. Selecione Criar.

Para criar um contêiner do Armazenamento de Blobs no Armazenamento do Azure, siga estas etapas.

  1. Acesse sua nova conta de armazenamento no portal do Azure.

  2. No menu à esquerda da conta de armazenamento, role até a seção Armazenamento de dados e selecione Contêineres.

  3. Selecione o botão + Contêiner.

  4. Digite um nome para o novo contêiner. O nome do contêiner deve estar com letras minúsculas, começar com uma letra ou número e pode incluir apenas letras, números e o caractere traço (-).

  5. Defina o nível de acesso público ao contêiner. O nível padrão é Privado (sem acesso anônimo) .

  6. Selecione Criar para criar o contêiner.

Permitir acesso à conta de armazenamento

Você precisa permitir ao aplicativo Web acesso à conta de armazenamento antes de poder criar, ler ou excluir blobs. Em uma etapa anterior, você configurou o aplicativo Web em execução no Serviço de Aplicativo com uma identidade gerenciada. Usando o RBAC do Azure, você pode fornecer à identidade gerenciada o acesso a outro recurso, assim como qualquer entidade de segurança. A função Colaborador de Dados do Storage Blob fornece ao aplicativo Web (representado pela identidade gerenciada atribuída ao sistema) acesso de leitura, gravação e exclusão no contêiner de blob e nos dados.

Observação

Algumas operações em contêineres de blob privado não têm suporte do RBAC do Azure, como exibir blobs ou copiar blobs entre contas. Um contêiner de blob com nível de acesso privado requer um token SAS para qualquer operação que não seja autorizada pelo RBAC do Azure. Para obter mais informações, confira Quando usar uma assinatura de acesso compartilhado.

No portal do Azure, acesse a conta de armazenamento para permitir acesso ao aplicativo Web. Selecione Controle de acesso (IAM) no painel esquerdo e escolha Atribuições de função. Você verá uma lista de quem tem acesso à conta de armazenamento. Agora você deseja adicionar uma atribuição de função a um robô, o serviço de aplicativo que precisa de acesso à conta de armazenamento. Selecione Adicionar>Adicionar atribuição de função para abrir a página Adicionar atribuição de função.

  1. Na guia Tipo de atribuição, selecione Tipo de função de trabalho e depois em Avançar.

  2. Na guia Função, selecione a função Colaborador de Dados de Armazenamento Blob a partir da lista suspensa e depois selecione Avançar.

  3. Na guia Membros, selecione Atribuir acesso para ->Identidade Gerenciada e depois selecione Membros ->Selecionar membros. Na janela Selecionar identidades gerenciadas, localize e selecione a identidade gerenciada criada para seu Serviço de Aplicativo a partir da lista suspensa Identidade gerenciada. Escolha o botão Selecionar.

  4. Selecione Examinar e atribuir e depois selecione Examinar e atribuir mais uma vez.

Para ver as etapas detalhadas, confira Atribuir funções do Azure usando o portal do Azure.

O aplicativo Web agora tem acesso à conta de armazenamento.

Acessar o Armazenamento de Blobs

A classe DefaultAzureCredential é usada para obtenção de uma credencial de token para o código destinada à autorização de solicitações ao Armazenamento do Azure. Crie uma instância da classe DefaultAzureCredential, que usa a identidade gerenciada para buscar tokens e anexá-los ao cliente do serviço. O exemplo de código a seguir obtém a credencial de token autenticada e a usa para criar um objeto de cliente de serviço que, por sua vez, carrega um novo blob.

Para ver esse código como parte de um aplicativo de exemplo, confira o exemplo no GitHub.

Instalar os pacotes da biblioteca de clientes

Instale o Pacote NuGet do Armazenamento de Blobs para trabalhar com o Armazenamento de Blobs e o Pacote NuGet da biblioteca de clientes da Identidade do Azure para .NET para se autenticar com as credenciais do Microsoft Entra. Instale as bibliotecas de clientes usando a interface de linha de comando do .NET (CLI) ou o Console do Gerenciador de Pacotes no Visual Studio.

CLI do .NET

Abra uma linha de comando e alterne para o diretório que contém o arquivo de projeto.

Execute os comandos de instalação.

dotnet add package Azure.Storage.Blobs

dotnet add package Azure.Identity

Console do Gerenciador de Pacotes

Abra o projeto ou a solução no Visual Studio e abra o console usando o comando Ferramentas>Gerenciador de Pacotes NuGet>Console do Gerenciador de Pacotes.

Execute os comandos de instalação.

Install-Package Azure.Storage.Blobs

Install-Package Azure.Identity

Exemplo

using System;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Text;
using System.IO;
using Azure.Identity;

// Some code omitted for brevity.

static public async Task UploadBlob(string accountName, string containerName, string blobName, string blobContents)
{
    // Construct the blob container endpoint from the arguments.
    string containerEndpoint = string.Format("https://{0}.blob.core.windows.net/{1}",
                                                accountName,
                                                containerName);

    // Get a credential and create a client object for the blob container.
    BlobContainerClient containerClient = new BlobContainerClient(new Uri(containerEndpoint),
                                                                    new DefaultAzureCredential());

    try
    {
        // Create the container if it does not exist.
        await containerClient.CreateIfNotExistsAsync();

        // Upload text to a new block blob.
        byte[] byteArray = Encoding.ASCII.GetBytes(blobContents);

        using (MemoryStream stream = new MemoryStream(byteArray))
        {
            await containerClient.UploadBlobAsync(blobName, stream);
        }
    }
    catch (Exception e)
    {
        throw e;
    }
}

Limpar recursos

Se você concluiu este tutorial e não precisa mais do aplicativo Web nem dos recursos associados, limpe os recursos que você criou.

Próximas etapas