Tutorial: Usar uma identidade gerenciada atribuída pelo sistema da VM do Windows para acessar o Armazenamento do Azure

Identidades gerenciadas para recursos do Azure é um recurso do Microsoft Entra ID. Cada um dos serviços do Azure que dão suporte a identidades gerenciadas para recursos do Azure está sujeito à própria linha do tempo. Não deixe de examinar o status de disponibilidade das identidades gerenciadas do seu recurso e os problemas conhecidos antes de começar.

Este tutorial mostra como usar uma identidade gerenciada atribuída pelo sistema para uma VM (máquina virtual) do Windows para acessar o Armazenamento do Azure. Você aprenderá como:

  • Criar um contêiner de blobs em uma conta de armazenamento
  • Conceder à identidade gerenciada atribuída pelo sistema da VM do Windows acesso a uma conta de armazenamento
  • Obter um acesso e usá-lo para chamar o Armazenamento do Azure

Observação

A autenticação do Microsoft Entra para Armazenamento do Azure está em versão prévia.

Pré-requisitos

Habilitar

Habilitar uma identidade gerenciada atribuída pelo sistema é uma experiência de um clique. Você pode habilitá-la durante a criação de uma VM ou nas propriedades de uma VM existente.

A captura de tela mostra a guia Atribuído ao sistema para uma máquina virtual na qual você pode desativar o status Atribuído ao sistema.

Para habilitar a identidade gerenciada atribuída pelo sistema em uma nova VM:

  1. Entre no Portal do Azure

  2. Criar uma máquina virtual com identidade atribuída pelo sistema habilitada

Conceder acesso

Criar Conta de Armazenamento

Nesta seção, você criará uma conta de armazenamento.

  1. Selecione o botão Criar um recurso, localizado no canto superior esquerdo do portal do Azure.

  2. Clique em Armazenamento e, em seguida, Conta de armazenamento – blob, arquivo, tabela, fila.

  3. Sob Nome, insira um nome para a conta de armazenamento.

  4. Modelo de implantação e Tipo de conta devem ser definidos como Resource manager e Armazenamento (uso geral v1) .

  5. Verifique se a Assinatura e o Grupo de Recursos correspondem ao que você especificou quando criou sua VM na etapa anterior.

  6. Selecione Criar.

    Captura de tela mostrando como criar uma conta de armazenamento.

Criar um contêiner de blob e carregar um arquivo na conta de armazenamento

Arquivos exigem armazenamento de blobs, então é preciso criar um contêiner de blobs para armazenar o arquivo. Em seguida, você carrega um arquivo no contêiner de blobs na nova conta de armazenamento.

  1. Navegue de volta para sua conta de armazenamento criado recentemente.

  2. Em Serviço blob, selecione Contêineres.

  3. Selecione + Contêiner na parte superior da página.

  4. Em Novo contêiner, insira um nome para o contêiner e, sob Nível de acesso público, mantenha o valor padrão.

    Captura de tela mostrando como criar o contêiner de armazenamento.

  5. Usando um editor de sua escolha, crie um arquivo denominado hello world.txt em seu computador local. Abra o arquivo e adicione o texto (sem as aspas) "Hello world! :)" e salve-o.

  6. Carregue o arquivo no contêiner recém-criado clicando no nome do contêiner, depois em Carregar

  7. No painel Carregar blob, em Arquivos, clique no ícone de pasta e navegue até o arquivo hello_world.txt em seu computador local, selecione o arquivo e clique em Carregar. Captura de tela mostrando a tela de upload do arquivo de texto.

Conceder acesso

Esta seção mostra como conceder à sua VM acesso a um contêiner do Armazenamento do Azure. Você pode usar a identidade gerenciada atribuída pelo sistema da VM para recuperar os dados no Azure Storage Blob.

  1. Navegue de volta para sua conta de armazenamento criado recentemente.

  2. Selecione IAM (Controle de acesso) .

  3. Selecione Adicionar>Adicionar atribuição de função para abrir a página Adicionar atribuição de função.

  4. Atribua a função a seguir. Para ver as etapas detalhadas, confira Atribuir funções do Azure usando o portal do Azure.

    Configuração Valor
    Função Leitor de Dados do Blob de Armazenamento
    Atribuir acesso a Identidade gerenciada
    Atribuída pelo sistema Máquina Virtual
    Selecionar <sua máquina virtual>

    Captura de tela que mostra a página para adicionar uma atribuição de função.

Acessar dados

O Armazenamento do Azure tem suporte nativo para autenticação do Microsoft Entra, de modo que ele pode aceitar diretamente os tokens de acesso obtidos por meio da identidade gerenciada. Essa abordagem usa a integração do Armazenamento do Azure com o Microsoft Entra ID, e é diferente de fornecer as credenciais na cadeia de conexão.

Aqui está um exemplo de código .NET de abertura de uma conexão com o Armazenamento do Microsoft Azure. O exemplo usa um token de acesso e, em seguida, lê o conteúdo do arquivo que você criou anteriormente. Esse código deve ser executado na VM para poder acessar o ponto de extremidade da identidade gerenciada da VM. É necessário ter o .NET Framework 4.6 ou superior para usar o método de token de acesso. Substitua o valor de <URI to blob file> adequadamente. Você pode obter esse valor navegando até o arquivo criado e carregado no armazenamento de blobs e copiando a URL sob Propriedades, na página Visão geral.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Net;
using System.Web.Script.Serialization;
using Microsoft.WindowsAzure.Storage.Auth;
using Microsoft.WindowsAzure.Storage.Blob;

namespace StorageOAuthToken
{
    class Program
    {
        static void Main(string[] args)
        {
            //get token
            string accessToken = GetMSIToken("https://storage.azure.com/");

            //create token credential
            TokenCredential tokenCredential = new TokenCredential(accessToken);

            //create storage credentials
            StorageCredentials storageCredentials = new StorageCredentials(tokenCredential);

            Uri blobAddress = new Uri("<URI to blob file>");

            //create block blob using storage credentials
            CloudBlockBlob blob = new CloudBlockBlob(blobAddress, storageCredentials);

            //retrieve blob contents
            Console.WriteLine(blob.DownloadText());
            Console.ReadLine();
        }

        static string GetMSIToken(string resourceID)
        {
            string accessToken = string.Empty;
            // Build request to acquire MSI token
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=" + resourceID);
            request.Headers["Metadata"] = "true";
            request.Method = "GET";

            try
            {
                // Call /token endpoint
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

                // Pipe response Stream to a StreamReader, and extract access token
                StreamReader streamResponse = new StreamReader(response.GetResponseStream());
                string stringResponse = streamResponse.ReadToEnd();
                JavaScriptSerializer j = new JavaScriptSerializer();
                Dictionary<string, string> list = (Dictionary<string, string>)j.Deserialize(stringResponse, typeof(Dictionary<string, string>));
                accessToken = list["access_token"];
                return accessToken;
            }
            catch (Exception e)
            {
                string errorText = String.Format("{0} \n\n{1}", e.Message, e.InnerException != null ? e.InnerException.Message : "Acquire token failed");
                return accessToken;
            }
        }
    }
}

A resposta tem o conteúdo do arquivo:

Hello world! :)

Desabilitar

Para desabilitar a identidade atribuída pelo sistema em sua VM, configure o status da identidade atribuída pelo sistema como Desativado.

Captura de tela que mostra a guia Atribuído ao sistema para uma máquina virtual na qual você pode desativar o status Atribuído ao sistema.

Próximas etapas

Neste tutorial, você aprendeu a habilitar uma identidade atribuída pelo sistema da VM do Windows para acessar o Armazenamento do Azure. Para saber mais sobre o Armazenamento do Azure, confira: