Tutorial: acessar serviços do Azure a partir de um aplicativo Web .NET

Saiba como acessar serviços do Azure como o Armazenamento do Azure a partir de um aplicativo Web (e não de um usuário conectado) em execução no Serviço de Aplicativo do Azure usando identidades gerenciadas. Este tutorial demonstra como se conectar ao Azure Armazenamento como exemplo.

Qualquer serviço que dê suporte à identidade gerenciada (B na imagem a seguir) pode ser acessado com segurança usando este tutorial:

  • Armazenamento do Azure
  • Banco de Dados SQL do Azure
  • Cofre de Chave do Azure

Diagram that shows how to access storage.

Você deseja adicionar acesso seguro aos serviços 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 Ativado e Salvar. Selecione Sim na caixa de diálogo de confirmação para habilitar a identidade gerenciada atribuída pelo sistema. Quando a identidade gerenciada é habilitada, o status é definido como Ativado e a ID do objeto fica disponível.

Screenshot that shows the System assigned identity option.

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 (região) para a conta de armazenamento ou use o valor padrão.

  7. Deixe esses campos definidos como seus valores padrão:

    Campo Valor
    Modelo de implantação Gerenciador de Recursos
    Desempenho Standard
    Tipo de conta StorageV2 (uso geral v2)
    Replicação RA-GRS (armazenamento com redundância geográfica com acesso de leitura)
    Camada de acesso Frequente
  8. Selecione Revisar + Criar para examinar as configurações da conta de armazenamento e criar a conta.

  9. 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 OK 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.

Atribua a função Colaborador de dados de blob de armazenamento ao Serviço de Aplicativo no escopo da assinatura. 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 Core ou o Console do Gerenciador de Pacotes no Visual Studio.

Linha de comando do .NET Core

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

  2. Execute os comandos de instalação.

    dotnet add package Azure.Storage.Blobs
    
    dotnet add package Azure.Identity
    

Console do Gerenciador de Pacotes

  1. 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.

  2. Execute os comandos de instalação.

    Install-Package Azure.Storage.Blobs
    
    Install-Package Azure.Identity
    

Exemplo de .NET

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 os recursos

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

Exclua o grupo de recursos

No portal do Azure, selecione Grupos de recursos no menu do portal e selecione o grupo de recursos que contém o serviço de aplicativo e o plano do serviço de aplicativo.

Selecione Excluir grupo de recursos para excluir o grupo de recursos e todos os recursos que ele contém.

Screenshot that shows deleting the resource group.

Esse comando pode levar vários minutos para ser executado.

Próximas etapas

Neste tutorial, você aprendeu a:

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