Share via


Acessar o Armazenamento do Azure a partir 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.

Diagram that shows how to access storage.

Você deseja adicionar acesso ao plano de dados do Azure (Armazenamento do Azure, Banco de Dados SQL do Azure, Cofre da Chave do Azure ou outros serviços) do seu aplicativo Web. Você pode usar uma chave compartilhada, mas então você tem que 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, que os hackers sabem como verificar. Uma maneira mais segura de dar ao seu aplicativo Web acesso aos dados é usar identidades gerenciadas.

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

Neste tutorial, irá aprender a:

  • Crie uma identidade gerenciada atribuída ao sistema em um aplicativo Web.
  • Crie uma conta de armazenamento e um contêiner de Armazenamento de Blob do Azure.
  • Acesse o armazenamento de um aplicativo Web usando identidades gerenciadas.

Se não tiver uma subscrição do Azure, crie uma conta gratuita do Azure antes de começar.

Pré-requisitos

Habilitar identidade gerenciada em um aplicativo

Se você criar e publicar seu aplicativo Web por meio do Visual Studio, a identidade gerenciada será habilitada em seu aplicativo para você. No seu serviço de aplicação, selecione Identidade no painel esquerdo e, em seguida, selecione Sistema atribuído. Verifique se o Status está definido como Ativado. Caso contrário, selecione Salvar e, em seguida, selecione 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 está disponível.

Screenshot that shows the System assigned identity option.

Esta etapa cria uma nova ID de objeto, diferente da ID do aplicativo criada no painel Autenticação/Autorização . Copie o ID do objeto da identidade gerenciada atribuída ao sistema. Precisará dele mais tarde.

Criar uma conta de armazenamento e um contêiner de Armazenamento de Blob

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

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

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

Os blobs no Armazenamento do Azure são organizados em contêineres. Antes de carregar um blob mais adiante neste tutorial, você deve primeiro criar um contêiner.

Para criar uma conta de armazenamento v2 de uso geral 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. À medida que começa a escrever, a lista filtra com base na sua entrada. Selecione Contas do Storage.

  2. Na janela Contas de armazenamento exibida, selecione Criar.

  3. Selecione a subscrição na qua pretende criar a conta de armazenamento.

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

  5. A seguir, introduza um nome para a sua conta de armazenamento. O nome que escolher tem de ser exclusivo em todo o Azure. O nome também deve ter entre 3 e 24 caracteres e pode incluir apenas números e letras minúsculas.

  6. Selecione uma localização para a sua conta de armazenamento ou utilize a localização predefinida.

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

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

  9. Selecione Rever para rever as definições da sua conta de armazenamento e criar a conta.

  10. Selecione Criar.

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

  1. Aceda à sua nova conta de armazenamento no portal do Azure.

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

  3. Selecione o botão + Contentor.

  4. Escreva um nome para o novo contentor. O nome do contentor tem estar em minúsculas, tem de começar com uma letra ou um número e só pode incluir letras, números e o caráter de travessão (-).

  5. Defina o nível de acesso público ao contentor. O nível predefinido é Privado (sem acesso anónimo).

  6. Selecione Criar para criar o contentor.

Conceder acesso à conta de armazenamento

Você precisa conceder ao seu 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 conceder à identidade gerenciada acesso a outro recurso, assim como qualquer entidade de segurança. A função de Colaborador de Dados de Blob de Armazenamento dá ao aplicativo Web (representado pela identidade gerenciada atribuída ao sistema) acesso de leitura, gravação e exclusão ao contêiner de blob e aos dados.

Nota

Algumas operações em contêineres de blob privados não são suportadas pelo 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 não autorizada pelo RBAC do Azure. Para obter mais informações, consulte Quando usar uma assinatura de acesso compartilhado.

No portal do Azure, entre em sua conta de armazenamento para conceder acesso ao seu aplicativo Web. Selecione Controle de acesso (IAM) no painel esquerdo e, em seguida, selecione 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 acessar a conta de armazenamento. Selecione 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, em seguida, Avançar.

  2. Na guia Função, selecione Função de Colaborador de Dados de Blob de Armazenamento na lista suspensa e selecione Avançar.

  3. No separador Membros, selecione Atribuir acesso a -Managed identity e, em seguida, selecione Membros ->>Selecionar membros. Na janela Selecionar identidades gerenciadas, localize e selecione a identidade gerenciada criada para seu Serviço de Aplicativo na lista suspensa Identidade gerenciada. Selecione o botão Selecionar.

  4. Selecione Rever e atribuir e, em seguida, selecione Rever e atribuir mais uma vez.

Para obter os passos detalhados, veja o artigo Atribuir funções do Azure com o portal do Azure.

Seu aplicativo Web agora tem acesso à sua conta de armazenamento.

Acessar armazenamento de Blob

A classe DefaultAzureCredential é usada para obter uma credencial de token para seu código para autorizar 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 de 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 carrega um novo blob.

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

Instalar pacotes de biblioteca cliente

Instale o pacote NuGet de Armazenamento de Blob para trabalhar com o Armazenamento de Blob e a biblioteca de cliente do Azure Identity para o pacote NuGet do .NET para autenticação com credenciais do Microsoft Entra. Instale as bibliotecas de cliente usando a interface de linha de comando (CLI) do .NET ou o Console do Gerenciador de Pacotes no Visual Studio.

CLI de .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

Consola do Gestor de Pacotes

Abra o projeto ou a solução no Visual Studio e abra o console usando o comando Tools>NuGet Package Manager>Package Manager Console.

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;
    }
}

Clean up resources (Limpar recursos)

Se você tiver terminado este tutorial e não precisar mais do aplicativo Web ou dos recursos associados, limpe os recursos criados.

Próximos passos