Tutorial: Utilizar uma identidade gerida atribuída pelo sistema de uma VM do Windows, para aceder ao Armazenamento do Azure

Identidades gerenciadas para recursos do Azure é um recurso do Microsoft Entra ID. Cada um dos serviços do Azure que suportam as identidades geridas para os recursos do Azure estão sujeitos à sua própria linha de tempo. Certifique-se de que revê o estado de disponibilidade das identidades geridas para o seu recurso e problemas conhecidos antes de começar.

Este tutorial mostra-lhe como utilizar uma identidade gerida atribuída pelo sistema da máquina virtual (VM) do Windows para aceder ao Armazenamento do Azure. Sabe como:

  • Criar um contentor de blobs numa conta de armazenamento
  • Conceder à sua identidade gerida atribuída pelo sistema de uma VM do Windows acesso a uma conta de armazenamento
  • Obter um token de acesso e utilizá-lo para chamar o Armazenamento do Azure

Nota

A autenticação do Microsoft Entra para o Armazenamento do Azure está em visualização pública.

Pré-requisitos

Ativar

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

A captura de tela mostra a guia Sistema atribuído para uma máquina virtual onde você pode ativar o status Sistema atribuído.

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

  1. Inicie sessão no portal do Azure

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

Conceder acesso

Criar conta de armazenamento

Nesta secção, vai criar uma conta de armazenamento.

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

  2. Selecione Armazenamento e, em seguida , Conta de armazenamento - blob, arquivo, tabela, fila.

  3. Em Nome, introduza um nome para a conta de armazenamento.

  4. O Modelo de implementação e o Tipo de conta devem ser definidos como Gestor de recursos e Armazenamento (fins gerais v1).

  5. Certifique-se de que a Subscrição e o Grupo de Recursos correspondem aos perfis que especificou quando criou a VM no passo anterior.

  6. Selecione Criar.

    Captura de ecrã a mostrar como criar uma nova conta de armazenamento.

Criar um contentor de blobs e carregar um ficheiro para a conta de armazenamento

Os ficheiros requerem armazenamento de blobs, por isso tem de criar um contentor de blobs para armazenar o ficheiro. Em seguida, carregue um ficheiro para o contentor de blobs na nova conta de armazenamento.

  1. Navegue de volta para a sua conta de armazenamento recentemente criada.

  2. Em Serviço de Blob, selecione Contêineres.

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

  4. Em Novo contentor, introduza um nome para o contentor e, em Nível de acesso público, mantenha o valor predefinido.

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

  5. Com um editor à sua escolha, crie um ficheiro com o nome hello world.txt no seu computador local. Abra o ficheiro e adicione o texto (sem as aspas) "Hello world! :) "e, em seguida, guarde-o.

  6. Carregue o ficheiro para o contentor recentemente criado ao clicar no nome do contentor e, em seguida, em Carregar

  7. No painel Carregar blob, em Ficheiros, selecione o ícone de pasta e navegue até ao hello_world.txt de ficheiros na sua máquina local, selecione o ficheiro e, em seguida, selecione Carregar. Captura de tela mostrando a tela de upload do arquivo de texto.

Conceder acesso

Esta seção mostra como conceder acesso à sua VM a um contêiner de Armazenamento do Azure. Pode utilizar a identidade gerida atribuída pelo sistema da VM para obter os dados no blob de armazenamento do Azure.

  1. Navegue de volta para a sua conta de armazenamento recentemente criada.

  2. Selecione Controlo de acesso (IAM) .

  3. Selecione Adicionar>Adicionar atribuição de funções para abrir o painel Adicionar atribuição de funções.

  4. Atribua a seguinte função. Para obter os passos detalhados, veja o artigo Atribuir funções do Azure com o portal do Azure.

    Definição Value
    Função Leitor de Dados de Blobs de Armazenamento
    Atribuir acesso a Identidade gerida
    Atribuída pelo sistema Máquina Virtual
    Selecione <sua máquina virtual>

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

Dados de acesso

O Armazenamento do Azure dá suporte nativo à autenticação do Microsoft Entra, para que ele possa aceitar diretamente tokens de acesso obtidos usando uma identidade gerenciada. Essa abordagem usa a integração do Armazenamento do Azure com o Microsoft Entra ID e é diferente de fornecer credenciais na cadeia de conexão.

Aqui está um exemplo de código .NET de abertura de uma conexão com o Armazenamento do Azure. O exemplo usa um token de acesso e, em seguida, lê o conteúdo do arquivo criado anteriormente. Este código tem de ser executado na VM para poder aceder ao ponto final da identidade gerida da VM. O .NET Framework 4.6 ou superior é necessário para usar o método de token de acesso. Substitua o valor de <URI to blob file> em conformidade. Pode obter este valor ao navegar para o ficheiro que criou e carregou para o armazenamento de blobs e copiar o URL em Propriedades para a página Descriçã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 inclui o conteúdo do ficheiro:

Hello world! :)

Desativar

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

A captura de tela mostra a guia Sistema atribuído para uma máquina virtual onde você pode desativar o status Sistema atribuído.

Próximos passos

Neste tutorial, aprendeu a ativar uma identidade gerida atribuída pelo sistema de uma VM do Windows para aceder ao Armazenamento do Azure. Para saber mais sobre o Armazenamento do Azure, consulte: