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
- Se você não estiver familiarizado com as identidades gerenciadas para funcionalidades de recursos do Azure, veja esta visão geral.
- Caso você ainda não tenha uma conta do Azure, inscreva-se em uma conta gratuita antes de continuar.
- Para executar a criação de recursos e o gerenciamento de função necessários, sua conta precisa de permissões "Proprietário" no escopo apropriado (sua assinatura ou grupo de recursos). Se precisar de ajuda com a atribuição de função, confira Atribuir funções do Azure para gerenciar o acesso aos recursos de assinatura do Azure.
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.
Para habilitar a identidade gerenciada atribuída pelo sistema em uma nova VM:
Conceder acesso
Criar Conta de Armazenamento
Nesta seção, você criará uma conta de armazenamento.
Selecione o botão Criar um recurso, localizado no canto superior esquerdo do portal do Azure.
Clique em Armazenamento e, em seguida, Conta de armazenamento – blob, arquivo, tabela, fila.
Sob Nome, insira um nome para a conta de armazenamento.
Modelo de implantação e Tipo de conta devem ser definidos como Resource manager e Armazenamento (uso geral v1) .
Verifique se a Assinatura e o Grupo de Recursos correspondem ao que você especificou quando criou sua VM na etapa anterior.
Selecione Criar.
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.
Navegue de volta para sua conta de armazenamento criado recentemente.
Em Serviço blob, selecione Contêineres.
Selecione + Contêiner na parte superior da página.
Em Novo contêiner, insira um nome para o contêiner e, sob Nível de acesso público, mantenha o valor padrão.
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.
Carregue o arquivo no contêiner recém-criado clicando no nome do contêiner, depois em Carregar
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.
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.
Navegue de volta para sua conta de armazenamento criado recentemente.
Selecione IAM (Controle de acesso) .
Selecione Adicionar>Adicionar atribuição de função para abrir a página Adicionar atribuição de função.
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>
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.
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: