Tutorial: usar uma VM/VMSS do Windows para acessar os recursos 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.

Pré-requisitos

Usar uma identidade gerenciada atribuída pelo sistema da VM do Windows para acessar o Azure Data Lake Storage

Este tutorial mostra como usar uma identidade gerenciada atribuída pelo sistema para uma VM (máquina virtual) do Windows para acessar um Azure Data Lake Store. As identidades gerenciadas são gerenciadas automaticamente pelo Azure. Você pode usá-las para autenticar serviços compatíveis com a autenticação do Microsoft Entra sem precisar inserir as credenciais no seu código.

Neste artigo, você aprenderá a:

  • Conceder acesso a um Azure Data Lake Store à sua VM
  • Obter um token de acesso usando a identidade da VM e usá-lo para acessar um Azure Data Lake Store

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.

Permitir acesso

É possível conceder o acesso a arquivos e pastas em um Azure Data Lake Store à sua VM. Para esta etapa, é possível usar um Data Lake Store existente ou criar um novo.

Para criar um novo Data Lake Store usando o portal do Azure, consulte o Início rápido do Azure Data Lake Store. Também há guias de início rápido que usam a CLI do Azure e o Azure PowerShell na documentação do Azure Data Lake Store.

No Data Lake Store, crie uma nova pasta e conceda a permissão de identidade atribuída pelo sistema da VM. A identidade precisa de direitos para ler, gravar e executar arquivos nesta pasta:

  1. No portal do Azure, clique em Data Lake Store na navegação à esquerda.
  2. Clique no Data Lake Store que você deseja usar neste tutorial.
  3. Clique em Data Explorer na barra de comandos.
  4. A pasta raiz do Data Lake Store é selecionada. Selecione Acesso na barra de comandos.
  5. Selecione Adicionar. No campo Selecionar, insira o nome da sua VM, por exemplo DevTestVM. Selecione sua VM nos resultados da pesquisa e escolha Selecionar.
  6. Selecione Selecionar Permissões e, em seguida , Leitura e Executar. Adicione a Esta pastae, em seguida, selecione Uma permissão de acesso único.
  7. Selecione Ok e feche a folha de Acesso. A permissão deverá ser adicionada com êxito.
  8. Em seguida, crie uma nova pasta. Selecione Nova Pasta na barra de comandos e dê um nome à nova pasta. Por exemplo, TestFolder e, em seguida, selecione Ok.
  9. Selecione a pasta criada e escolha Acesso na barra de comandos.
  10. Selecione Adicionar e, em seguida, no campo Selecionar, insira o nome da VM e escolha Selecionar.
  11. Escolha Selecionar Permissões e, em seguida Leitura, Gravar e Executar. Adicione a Esta pasta, em seguida, adicione como Uma entrada de permissão de acesso e uma entrada de permissão padrão.
  12. Selecione OK. A permissão deverá ser adicionada corretamente.

A identidade gerenciada atribuída pelo sistema da VM agora pode executar todas as operações nos arquivos da pasta que você criou. Para obter informações sobre como gerenciar acesso ao Data Lake Store, confira Controle de Acesso no Data Lake Store.

Acessar dados

O Azure Data Lake Store tem compatibilidade nativa com a autenticação do Microsoft Entra, para que ele possa aceitar diretamente tokens de acesso obtidos usando identidades gerenciadas para recursos do Azure. Para autenticar para o sistema de arquivos do Data Lake Store, você envia um token de acesso emitido pelo Microsoft Entra ID para o ponto de extremidade do sistema de arquivos do Data Lake Store em um cabeçalho de autorização. O cabeçalho tem o formato Bearer <ACCESS_TOKEN_VALUE>.

Para saber mais sobre o suporte do Data Lake Store à autenticação do Microsoft Entra ID, confira Autenticação com o Data Lake Store usando o Microsoft Entra ID.

Observação

Os SDKs do cliente de sistema de arquivos do Data Lake Storage SDKs ainda não têm suporte para identidades gerenciadas para recursos do Azure.

Neste tutorial, você se autenticará na API REST do sistema de arquivos do Data Lake Store usando o PowerShell para fazer solicitações REST. Para usar a identidade gerenciada atribuída pelo sistema da VM para autenticação, você precisa fazer as solicitações da VM.

  1. No portal, navegue até Máquinas Virtuais, acesse sua VM do Windows. Em seguida, na Visão geral, selecione Conectar.

  2. Insira seu Nome de usuário e Senha que você adicionou quando criou a VM do Windows.

  3. Agora que você criou uma Conexão de Área de Trabalho Remota com a VM, abra o PowerShell na sessão remota.

  4. Usando o cmdlet Invoke-WebRequest do PowerShell, faça uma solicitação para as identidades gerenciadas locais para o ponto de extremidade do Azure para obter um token de acesso ao Azure Data Lake Store. O identificador de recursos para Data Lake Storage é https://datalake.azure.net/. O Data Lake faz uma correspondência exata no identificador de recursos, por isso a barra à direita é importante.

    $response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fdatalake.azure.net%2F' -Method GET -Headers @{Metadata="true"}
    

    Converta a resposta de um objeto JSON para um objeto do PowerShell.

    $content = $response.Content | ConvertFrom-Json
    

    Extraia o token de acesso da resposta.

    $AccessToken = $content.access_token
    
  5. Verifique se tudo está configurado corretamente. Usando o cmdlet Invoke-WebRequest do PowerShell, faça uma solicitação para o ponto de extremidade REST do Data Lake Store para listar as pastas na pasta raiz. É importante que a cadeia de caracteres Bearer no cabeçalho de autorização tenha um “B” maiúsculo. Você pode encontrar o nome do seu Data Lake Store na seção Visão geral da folha Data Lake Store.

    Invoke-WebRequest -Uri https://<YOUR_ADLS_NAME>.azuredatalakestore.net/webhdfs/v1/?op=LISTSTATUS -Headers @{Authorization="Bearer $AccessToken"}
    

    Uma resposta bem-sucedida tem a seguinte aparência:

    StatusCode        : 200
    StatusDescription : OK
    Content           : {"FileStatuses":{"FileStatus":[{"length":0,"pathSuffix":"TestFolder","type":"DIRECTORY", "blockSize":0,"accessTime":1507934941392, "modificationTime":1507944835699,"replication":0, "permission":"770","ow..."
    RawContent        : HTTP/1.1 200 OK
                        Pragma: no-cache
                        x-ms-request-id: b4b31e16-e968-46a1-879a-3474aa7d4528
                        x-ms-webhdfs-version: 17.04.22.00
                        Status: 0x0
                        X-Content-Type-Options: nosniff
                        Strict-Transport-Security: ma...
    Forms             : {}
    Headers           : {[Pragma, no-cache], [x-ms-request-id, b4b31e16-e968-46a1-879a-3474aa7d4528],
                        [x-ms-webhdfs-version, 17.04.22.00], [Status, 0x0]...}
    Images            : {}
    InputFields       : {}
    Links             : {}
    ParsedHtml        : System.__ComObject
    RawContentLength  : 556
    
  6. Agora tente carregar um arquivo para seu Data Lake Store. Primeiramente, crie um arquivo para ser carregado.

    echo "Test file." > Test1.txt
    
  7. Usando o cmdlet Invoke-WebRequest do PowerShell, faça uma solicitação para o ponto de extremidade REST do Data Lake Store para carregar o arquivo para a pasta criada que você criou anteriormente. Duas etapas são necessárias para essa solicitação.

    1. Faça uma solicitação e receba um redirecionamento para onde o arquivo deve ser carregado.
    2. Carregue o arquivo. Lembre-se de definir o nome da pasta e do arquivo corretamente se tiver usado valores diferentes dos indicados neste tutorial.
    $HdfsRedirectResponse = Invoke-WebRequest -Uri https://<YOUR_ADLS_NAME>.azuredatalakestore.net/webhdfs/v1/TestFolder/Test1.txt?op=CREATE -Method PUT -Headers @{Authorization="Bearer $AccessToken"} -Infile Test1.txt -MaximumRedirection 0
    

    Se você inspecionar o valor de $HdfsRedirectResponse, ele deverá se parecer com a seguinte resposta:

    PS C:\> $HdfsRedirectResponse
    
    StatusCode        : 307
    StatusDescription : Temporary Redirect
    Content           : {}
    RawContent        : HTTP/1.1 307 Temporary Redirect
                        Pragma: no-cache
                        x-ms-request-id: b7ab492f-b514-4483-aada-4aa0611d12b3
                        ContentLength: 0
                        x-ms-webhdfs-version: 17.04.22.00
                        Status: 0x0
                        X-Content-Type-Options: nosn...
    Headers           : {[Pragma, no-cache], [x-ms-request-id, b7ab492f-b514-4483-aada-4aa0611d12b3], 
                        [ContentLength, 0], [x-ms-webhdfs-version, 17.04.22.00]...}
    RawContentLength  : 0
    

    Conclua o upload enviando uma solicitação para o ponto de extremidade de redirecionamento:

    Invoke-WebRequest -Uri $HdfsRedirectResponse.Headers.Location -Method PUT -Headers @{Authorization="Bearer $AccessToken"} -Infile Test1.txt -MaximumRedirection 0
    

    Uma resposta bem-sucedida tem a seguinte aparência:

    StatusCode        : 201
    StatusDescription : Created
    Content           : {}
    RawContent        : HTTP/1.1 201 Created
                        Pragma: no-cache
                        x-ms-request-id: 1e70f36f-ead1-4566-acfa-d0c3ec1e2307
                        ContentLength: 0
                        x-ms-webhdfs-version: 17.04.22.00
                        Status: 0x0
                        X-Content-Type-Options: nosniff
                        Strict...
    Headers           : {[Pragma, no-cache], [x-ms-request-id, 1e70f36f-ead1-4566-acfa-d0c3ec1e2307],
                        [ContentLength, 0], [x-ms-webhdfs-version, 17.04.22.00]...}
    RawContentLength  : 0
    

Por fim, use outras APIs de sistema de arquivos do Data Lake Store para acrescentar e baixar arquivos e muito mais.

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.

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

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

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.

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. No campo 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 para a sua conta de armazenamento recém-criada.

  2. Na seção Serviço Blob, selecione Contêineres.

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

  4. No campo Novo contêiner, insira um nome para o contêiner e, na opção 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 Olá, mundo!, em seguida, salve-o.

  6. Selecione o nome do contêiner para carregar o arquivo no contêiner recém-criado e selecione Carregar.

  7. No painel Carregar blob, na seção Arquivos, selecione o ícone de pasta e navegue até o arquivo hello_world.txt no computador local. Em seguida, selecione o arquivo e 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 para a sua conta de armazenamento recém-criada.

  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.

Use uma identidade gerenciada atribuída pelo sistema VM do Windows para acessar o Armazenamento do Microsoft Azure por meio de uma credencial SAS

Este tutorial mostra como usar uma identidade atribuída pelo sistema para uma VM (máquina virtual) do Windows, para obter uma credencial SAS (Assinatura de Acesso Compartilhado) de armazenamento.

Uma SAS de serviço fornece a capacidade de conceder acesso limitado a objetos em uma conta de armazenamento por tempo limitado e para um serviço específico (nesse caso, um serviço de blob). A SAS faz isso sem expor uma chave de acesso de conta. Use a credencial SAS normalmente para operações de armazenamento, por exemplo, ao usar um SDK de Armazenamento. Este tutorial demonstra o upload e o download de um blob usando o PowerShell do Armazenamento do Microsoft Azure.

Você aprenderá a:

  • Criar uma conta de armazenamento
  • Conceda à sua VM acesso a SAS de conta de armazenamento no Resource Manager
  • Obter um token de acesso usando a identidade da VM e usá-lo para recuperar SAS do Resource Manager

Observação

Recomendamos que você use o módulo Az PowerShell do Azure para interagir com o Azure. Confira Instalar o Azure PowerShell para começar. Para saber como migrar para o módulo Az PowerShell, confira Migrar o Azure PowerShell do AzureRM para o Az.

Criar uma conta de armazenamento

Caso ainda não tenha uma, você precisará criar uma conta de armazenamento. Caso contrário, siga estas etapas para conceder acesso de identidade gerenciada atribuído pelo sistema da VM à credencial SAS de uma conta de armazenamento existente.

  1. Selecione Armazenamento e Conta de Armazenamento.

  2. No painel Criar conta de armazenamento, insira um nome para a conta de armazenamento.

  3. Garanta que o Modelo de implantação e o Tipo de conta estão definidos como Resource Manager e Uso Geral.

  4. Verifique se a Assinatura e o Grupo de Recursos correspondem aos itens especificados quando criou sua VM na etapa anterior.

  5. Selecione Criar para criar sua conta de armazenamento.

    Captura de tela mostrando como criar uma conta de armazenamento.

Criar um contêiner de blobs na conta de armazenamento

Posteriormente, no tutorial, você executará o upload e download de um arquivo para a nova conta de armazenamento. Como arquivos exigem armazenamento de blobs, é preciso criar um contêiner de blobs para armazenar o arquivo.

  1. Navegue para a sua conta de armazenamento recém-criada.

  2. Selecione o link Contêineres no painel esquerdo, em serviço Blob.

  3. Selecione + Contêiner na parte superior da página e, em seguida, um painel Novo contêiner deve aparecer.

  4. Dê um nome ao contêiner, determine o nível de acesso e selecione OK. O nome especificado aqui é usado posteriormente no tutorial.

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

Conceder à identidade gerenciada atribuída pelo sistema da VM acesso para usar um SAS de armazenamento

O Armazenamento do Azure não dá suporte nativo à autenticação do Microsoft Entra. No entanto, você pode usar uma identidade gerenciada para recuperar um SAS de armazenamento do Resource Manager e usar o SAS para acessar o armazenamento. Nesta etapa, você concede o acesso à identidade gerenciada atribuída pelo sistema da VM à sua conta de armazenamento SAS.

  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 Colaborador da conta de armazenamento
    Atribuir acesso a Identidade gerenciada
    Atribuída pelo sistema Máquina virtual
    Selecionar <sua máquina virtual do Windows>

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

Obter um token de acesso usando a identidade da máquina virtual e usá-la para chamar o Azure Resource Manager

Para o restante deste tutorial, você trabalha a partir de sua VM. É necessário usar os cmdlets do PowerShell do Azure Resource Manager nesta parte. Caso não tenha o PowerShell instalado, baixe a versão mais recente antes de continuar.

  1. No portal do Azure, navegue até Máquinas Virtuais, acesse sua máquina virtual do Windows e, na página Visão geral, selecione Conectar na parte superior.

  2. Insira seu Nome de usuário e Senha que você adicionou ao criar sua VM do Windows.

  3. Estabeleça uma Conexão de Área de Trabalho Remota com a máquina virtual.

  4. Abra o PowerShell na sessão remota e, em seguida, use o cmdlet Invoke-WebRequest do PowerShell para obter um token do Azure Resource Manager da identidade gerenciada local para o ponto de extremidade de recursos do Azure.

       $response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F' -Method GET -Headers @{Metadata="true"}
    

    Observação

    O valor do parâmetro resource deve ser uma correspondência exata para o que é esperado pela ID do Microfone Entra. Ao usar a ID de recurso do Azure Resource Manager, você deve incluir a barra à direita no URI.

    Em seguida, extraia o elemento content, que é armazenado como uma cadeia de caracteres formatada em JavaScript Object Notation (JSON) no objeto $response.

    $content = $response.Content | ConvertFrom-Json
    

    Em seguida, extraia o token de acesso da resposta.

    $ArmToken = $content.access_token
    

Obter uma credencial SAS do Azure Resource Manager para fazer chamadas de armazenamento

Por fim, use o PowerShell para chamar o Resource Manager usando o token de acesso recuperado na seção anterior. Você usa esse token para criar uma credencial SAS de armazenamento. Após ter a credencial SAS, você poderá chamar outras operações de armazenamento.

Para esta solicitação, use os seguintes parâmetros de solicitação HTTP para criar a credencial SAS:

{
    "canonicalizedResource":"/blob/<STORAGE ACCOUNT NAME>/<CONTAINER NAME>",
    "signedResource":"c",              // The kind of resource accessible with the SAS, in this case a container (c).
    "signedPermission":"rcw",          // Permissions for this SAS, in this case (r)ead, (c)reate, and (w)rite. Order is important.
    "signedProtocol":"https",          // Require the SAS be used on https protocol.
    "signedExpiry":"<EXPIRATION TIME>" // UTC expiration time for SAS in ISO 8601 format, for example 2017-09-22T00:06:00Z.
}

Os parâmetros aqui são incluídos no corpo do POST da solicitação para a credencial SAS. Para obter mais informações sobre os parâmetros para a criação de uma credencial SAS, consulte Referência REST de SAS do Serviço de Lista.

  1. Converta os parâmetros em JSON e, em seguida, chame o ponto de extremidade listServiceSas de armazenamento para criar a credencial SAS:

    $params = @{canonicalizedResource="/blob/<STORAGE-ACCOUNT-NAME>/<CONTAINER-NAME>";signedResource="c";signedPermission="rcw";signedProtocol="https";signedExpiry="2017-09-23T00:00:00Z"}
    $jsonParams = $params | ConvertTo-Json
    
    $sasResponse = Invoke-WebRequest -Uri https://management.azure.com/subscriptions/<SUBSCRIPTION-ID>/resourceGroups/<RESOURCE-GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE-ACCOUNT-NAME>/listServiceSas/?api-version=2017-06-01 -Method POST -Body $jsonParams -Headers @{Authorization="Bearer $ArmToken"}
    

    Observação

    O URL diferencia maiúsculas de minúsculas, portanto, certifique-se de usar letras maiúsculas e minúsculas exatamente da mesma forma usadas ao nomear o grupo de recursos, incluindo a letra maiúscula "G" em resourceGroups.

  2. Em seguida, extraia a credencial SAS da resposta:

    $sasContent = $sasResponse.Content | ConvertFrom-Json
    $sasCred = $sasContent.serviceSasToken
    
  3. Caso inspecione a credencial SAS, visualizará algo assim:

    PS C:\> $sasCred
    sv=2015-04-05&sr=c&spr=https&se=2017-09-23T00%3A00%3A00Z&sp=rcw&sig=JVhIWG48nmxqhTIuN0uiFBppdzhwHdehdYan1W%2F4O0E%3D
    
  4. Crie um arquivo chamado test.txt. Em seguida, use a credencial SAS para autenticar-se com o cmdlet New-AzStorageContent, carregar o arquivo para o contêiner de blob e então baixar o arquivo.

    echo "This is a test text file." > test.txt
    
  5. Certifique-se instalar os cmdlets do Armazenamento do Azure primeiro, usando Install-Module Azure.Storage. Então carregue o blob recém-criado usando o cmdlet Set-AzStorageBlobContent do PowerShell:

    $ctx = New-AzStorageContext -StorageAccountName <STORAGE-ACCOUNT-NAME> -SasToken $sasCred
    Set-AzStorageBlobContent -File test.txt -Container <CONTAINER-NAME> -Blob testblob -Context $ctx
    

    Resposta:

    ICloudBlob        : Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob
    BlobType          : BlockBlob
    Length            : 56
    ContentType       : application/octet-stream
    LastModified      : 9/21/2017 6:14:25 PM +00:00
    SnapshotTime      :
    ContinuationToken :
    Context           : Microsoft.WindowsAzure.Commands.Storage.AzureStorageContext
    Name              : testblob
    
  6. Você também pode baixar o blob que carregou, usando o cmdlet do PowerShell Get-AzStorageBlobContent:

    Get-AzStorageBlobContent -Blob testblob -Container <CONTAINER-NAME> -Destination test2.txt -Context $ctx
    

    Resposta:

    ICloudBlob        : Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob
    BlobType          : BlockBlob
    Length            : 56
    ContentType       : application/octet-stream
    LastModified      : 9/21/2017 6:14:25 PM +00:00
    SnapshotTime      :
    ContinuationToken :
    Context           : Microsoft.WindowsAzure.Commands.Storage.AzureStorageContext
    Name              : testblob
    

Usar uma identidade gerenciada atribuída pelo sistema da VM do Windows para acessar o Banco de Dados SQL do Azure

Este tutorial mostra como usar uma identidade atribuída ao sistema em uma VM (máquina virtual) do Windows para acessar o Banco de Dados SQL do Azure. As Identidades de Serviço Gerenciadas são gerenciadas automaticamente pelo Azure e permitem a você autenticar os serviços compatíveis com a autenticação do Microsoft Entra sem necessidade de inserir as credenciais em seu código.

Você aprenderá a:

  • Permitir acesso à sua VM a um Banco de Dados SQL do Azure
  • Habilitar a autenticação do Microsoft Entra
  • Crie um usuário contido no banco de dados que represente a identidade atribuída do sistema da VM
  • Obter um token de acesso usando a identidade da VM e usá-lo para consultar o Banco de Dados SQL 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.

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.

Permitir acesso

Para permitir acesso à VM a um banco de dados no Banco de Dados SQL do Azure, use um servidor SQL lógico existente ou crie um. Para criar um novo servidor e banco de dados usando o portal do Azure, siga o início rápido do SQL do Azure. Também há inícios rápidos que usam a CLI do Azure e o Azure PowerShell na documentação do SQL Azure.

Siga estas etapas para conceder acesso à VM a um banco de dados:

  1. Habilitar a autenticação do Microsoft Entra para o servidor.
  2. Crie um usuário contido no banco de dados que represente a identidade atribuída do sistema da VM.

Habilitar a autenticação do Microsoft Entra

Para configurar a autenticação do Microsoft Entra:

  1. No portal do Azure, selecione servidor SQL na navegação à esquerda.
  2. Selecione o servidor SQL a ser habilitado para a autenticação do Microsoft Entra.
  3. Na seção Configurações da folha, selecione Administrador do Active Directory.
  4. Na barra de comandos, selecione Definir administrador.
  5. Selecione uma conta de usuário do Microsoft Entra para ser um administrador do servidor e escolhaSelecionar.
  6. Na barra de comandos, selecione Salvar.

Criar um usuário contido

Esta seção mostra a você como criar um usuário contido no banco de dados que representa a identidade atribuída do sistema da VM. Para esta etapa, você precisará do SSMS (Microsoft SQL Server Management Studio) instalado. Antes de começar, poderá ser útil examinar os seguintes artigos para obter informações sobre a integração do Microsoft Entra:

Os bancos de dados SQL exigem nomes de exibição exclusivos do Microsoft Entra ID. Com isso, contas do Microsoft Entra, como usuários, grupos e entidades de serviço (aplicativos) e nomes de VM habilitados para identidade gerenciada precisam ser definidos exclusivamente no Microsoft Entra ID específico para seus nomes de exibição correspondentes. O SQL verifica os nomes de exibição do Microsoft Entra ID durante a criação do T-SQL desses usuários. Se os nomes de exibição não forem exclusivos, o comando falhará e solicitará que você forneça um nome de exibição exclusivo do Microsoft Entra ID para cada conta fornecida.

Para criar um usuário contido

  1. Abra o SQL Server Management Studio.

  2. Na caixa de diálogo Conectar-se ao Servidor, insira o nome do servidor no campo Nome do servidor.

  3. No campo Autenticação, selecione Active Directory – Universal com suporte para MFA.

  4. No campo Nome de usuário, digite o nome da conta do Microsoft Entra que você definir como administrador do servidor; por exemplo, cjensen@fabrikam.com.

  5. Selecione Opções.

  6. No campo Conectar-se ao banco de dados, digite o nome do banco de dados não são do sistema que você deseja configurar.

  7. Selecione Conectar e, em seguida, conclua o processo de entrada.

  8. No Pesquisador de Objetos, expanda a pasta Bancos de Dados.

  9. Clique com o botão direito do mouse no banco de dados de usuário e selecione Nova consulta.

  10. Na janela de consulta, insira a linha a seguir e selecione Executar na barra de ferramentas:

    Observação

    VMName no comando a seguir é o nome da VM para a qual você habilitou o sistema de identidade atribuído na seção de pré-requisitos.

    CREATE USER [VMName] FROM EXTERNAL PROVIDER
    

    O comando deve ser concluído com êxito, criando o usuário independente para a identidade atribuída ao sistema da VM.

  11. Limpe a janela de consulta, insira a linha a seguir e selecione Executar na barra de ferramentas:

    Observação

    VMName no comando a seguir é o nome da VM para a qual você habilitou o sistema de identidade atribuído na seção de pré-requisitos.

    Se você encontrar o erro "Principal VMName tem um nome de exibição duplicado", anexe a instrução CREATE USER com WITH OBJECT_ID='xxx'.

    ALTER ROLE db_datareader ADD MEMBER [VMName]
    

    O comando deve ser concluído com êxito, concedendo ao usuário independente a capacidade de ler todo o banco de dados.

O código em execução na VM agora pode obter um token usando a identidade gerenciada atribuída ao sistema e usar o token para se autenticar no servidor.

Acessar dados

Esta seção mostra a você como obter um token de acesso usando a identidade gerenciada atribuída pelo sistema da VM e usá-lo para chamar o SQL do Azure. O SQL do Azure tem suporte nativo para autenticação do Microsoft Entra, de modo que pode aceitar diretamente os tokens de acesso obtidos usando identidades gerenciadas para recursos do Azure. Esse método não requer o fornecimento de credenciais na cadeia de conexão.

Confira um exemplo de código .NET para abertura de uma conexão com o SQL usando a autenticação de Identidade Gerenciada do Active Directory. O código precisa ser executado na VM para ser capaz de acessar o ponto de extremidade da identidade gerenciada atribuída pelo sistema da VM.

É necessário ter o .NET Framework 4.6.2 ou superior ou o .NET Core 3.1 ou superior para usar esse método. Substitua os valores de AZURE-SQL-SERVERNAME e DATABASE adequadamente e adicione uma referência do NuGet à biblioteca Microsoft.Data.SqlClient.

using Microsoft.Data.SqlClient;

try
{
//
// Open a connection to the server using Active Directory Managed Identity authentication.
//
string connectionString = "Data Source=<AZURE-SQL-SERVERNAME>; Initial Catalog=<DATABASE>; Authentication=Active Directory Managed Identity; Encrypt=True";
SqlConnection conn = new SqlConnection(connectionString);
conn.Open();

Observação

Você pode usar identidades gerenciadas enquanto trabalha com outras opções de programação usando nossos SDKs.

Ou use o PowerShell para testar a configuração de ponta a ponta sem precisar gravar e implantar um aplicativo na VM.

  1. No portal, navegue até Máquinas Virtuais, acesse a VM do Windows e, em Visão geral, selecioneConectar.

  2. Insira a credencial de administrador da VM que você adicionou quando criou a VM do Windows.

  3. Agora que você criou uma Conexão de Área de Trabalho Remota com a VM, abra o PowerShell em uma sessão remota.

  4. Usando o cmdlet Invoke-WebRequest do PowerShell, faça uma solicitação para o ponto de extremidade da identidade gerenciada local para obter um token de acesso ao SQL do Azure.

        $response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fdatabase.windows.net%2F' -Method GET -Headers @{Metadata="true"}
    

    Converta a resposta de um objeto JSON para um objeto do PowerShell.

    $content = $response.Content | ConvertFrom-Json
    

    Extraia o token de acesso da resposta.

    $AccessToken = $content.access_token
    
  5. Abra uma conexão com o servidor. Lembre-se de substituir os valores para AZURE-SQL-SERVERNAME e DATABASE.

    $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
    $SqlConnection.ConnectionString = "Data Source = <AZURE-SQL-SERVERNAME>; Initial Catalog = <DATABASE>; Encrypt=True;"
    $SqlConnection.AccessToken = $AccessToken
    $SqlConnection.Open()
    

    Em seguida, crie e envie uma consulta para o servidor. Lembre-se de substituir o valor para TABLE.

    $SqlCmd = New-Object System.Data.SqlClient.SqlCommand
    $SqlCmd.CommandText = "SELECT * from <TABLE>;"
    $SqlCmd.Connection = $SqlConnection
    $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
    $SqlAdapter.SelectCommand = $SqlCmd
    $DataSet = New-Object System.Data.DataSet
    $SqlAdapter.Fill($DataSet)
    

Por fim, examine o valor de $DataSet.Tables[0] para exibir os resultados da consulta.

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.

Usar uma identidade gerenciada atribuída pelo sistema da VM do Windows para acessar o Azure Key Vault

Este tutorial mostra como uma VM (máquina virtual) do Windows pode usar uma identidade gerenciada atribuída pelo sistema para acessar o Azure Key Vault. O Key Vault possibilita que o aplicativo cliente use um segredo para acessar recursos não protegidos pelo Microsoft Entra ID. As identidades gerenciadas são gerenciadas automaticamente pelo Azure. Isso permite que você se autentique em serviços que oferecem suporte à autenticação do Microsoft Entra sem incluir informações de autenticação no seu código.

Você aprenderá a:

  • Conceda o acesso da máquina virtual a um segredo armazenado em um Key Vault
  • Obter um token de acesso usando a identidade da máquina virtual e usá-la para recuperar o segredo do Key Vault

Criar um cofre de chaves

Dica

As etapas neste artigo podem variar ligeiramente com base no portal do qual você começa.

Esta seção mostra como conceder à sua VM acesso a um segredo armazenado em um Key Vault. Ao usar as identidades gerenciadas para recursos do Azure, seu código pode obter tokens de acesso para se autenticar nos recursos que dão suporte à autenticação do Microsoft Entra. 

No entanto, nem todos os serviços do Azure dão suporte à autenticação do Microsoft Entra. Para usar identidades gerenciadas para recursos do Azure com esses serviços, armazene as credenciais de serviço no Azure Key Vault e use a identidade gerenciada da VM para acessar o Key Vault para recuperar as credenciais.

Primeiro, é necessário criar um cofre de chaves e conceder à sua identidade gerenciada atribuída ao sistema da VM acesso ao cofre de chaves.

  1. Entre no portal do Azure.

  2. Na parte superior da barra de navegação esquerda, selecione Criar um recurso.

  3. Na caixa Pesquisar no Marketplace, digite Key Vault e pressione Enter.

  4. Selecione Key Vault nos resultados e escolha Criar.

  5. Forneça um Nome para o novo cofre de chaves.

    Captura de tela da tela Criar um cofre de chaves.

  6. Preencha todas as informações necessárias. Certifique-se de escolher a assinatura e o grupo de recursos que você está usando para este tutorial.

  7. Selecione Revisar+ criar.

  8. Selecione Criar.

Criar um segredo

Em seguida, adicione um segredo ao Key Vault, para que você possa recuperá-lo posteriormente usando o código em execução na sua VM. Nesta seção, você usará o PowerShell, mas os mesmos conceitos se aplicam a qualquer código executado em sua VM.

  1. Navegue até o Key Vault recém-criado.

  2. Selecione Segredos e, em seguida, Ações.

  3. Selecione Gerar/Importar.

  4. Da tela Criar um segredo, nasOpções de upload deixe Manual selecionado.

  5. Insira um nome e um valor para o segredo. O valor pode ser qualquer coisa que você desejar. 

  6. Deixe a data de ativação e a data de validade em branco e deixe Habilitado como Sim

  7. Selecione Criar para criar o segredo.

    Captura de tela mostrando como criar um segredo.

Conceder acesso

A identidade gerenciada usada pela VM precisa ter acesso para fazer a leitura do segredo que o Key Vault armazena.

  1. Navegue até o Key Vault recém-criado.

  2. Selecione Política de Acesso no menu no lado esquerdo.

  3. Selecione Adicionar Política de Acesso.

    Captura de tela mostrando a tela de política de acesso do cofre de chaves.

  4. Na seção Adicionar política de acesso, em Configurar com base no modelo (opcional), escolha Gerenciamento de Segredo no menu suspenso.

  5. Escolha Selecionar Entidade de Segurança e no campo de pesquisa insira o nome da VM criada anteriormente. 

  6. Selecione a VM na lista de resultados, em seguida, escolha Selecionar.

  7. Selecione Adicionar.

  8. Clique em Salvar.

Acessar dados

Esta seção mostra a você como obter um token de acesso usando a identidade da VM e como usá-lo para recuperar o segredo do Key Vault. Se você não tiver o PowerShell 4.3.1 ou superior instalado, você precisará baixar e instalar a versão mais recente.

Observação

O método de usar o PowerShell para autenticar e recuperar o segredo é preferencial nos cenários em que as identidades gerenciadas são especificamente necessárias ou ao inserir o processo no código de um aplicativo.

Primeiro, use a identidade gerenciada atribuída pelo sistema da VM para obter um token de acesso para autenticar o para o Key Vault:

  1. No portal, navegue até Máquinas Virtuais e acesse a VM do Windows e, em Visão geral, selecione Conectar.
  2. Insira o seu Nome de usuário e Senha que você adicionou quando criou a VM do Windows.
  3. Agora que você criou uma Conexão de Área de Trabalho Remota com a máquina virtual, abra o PowerShell na sessão remota.
  4. No PowerShell, invoque a solicitação Web no locatário para obter o token para o host local na porta específica para a máquina virtual.

Observação

Caso esteja usando uma nuvem soberana, como GCC-H, use o ponto de extremidade vault.usgovcloudapi.net em vez de vault.azure.net no cmdlet do PowerShell.

Exemplo de solicitação do PowerShell:

$Response = Invoke-RestMethod -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -Method GET -Headers @{Metadata="true"} 

Observação

Ao trabalhar com nuvens soberanas, é necessário fazer ajustes no ponto de extremidade especificado no final do cmdlet.

Por exemplo, o vault.usgovcloudapi.net deve ser usado ao trabalhar com a Nuvem do Azure Governamental, sendo este o resultado final:

$Response = Invoke-RestMethod -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.usgovcloudapi.net' -Method GET -Headers @{Metadata="true"

Para confirmar se o sufixo corresponde ao seu ambiente, examine o artigo Visão geral de segurança do Azure Key Vault.

A resposta deve ser semelhante a:

Captura de tela mostrando uma solicitação com resposta de token.

Em seguida, extraia o token de acesso da resposta.

   $KeyVaultToken = $Response.access_token

Por fim, use o cmdlet Invoke-WebRequest do PowerShell para recuperar o segredo criado anteriormente no Key Vault, passando o token de acesso no cabeçalho de Autorização. Você precisará da URL de seu Key Vault, que está na seção Essentials da página Visão geral do Key Vault.

Invoke-RestMethod -Uri https://<your-key-vault-URL>/secrets/<secret-name>?api-version=2016-10-01 -Method GET -Headers @{Authorization="Bearer $KeyVaultToken"}

A resposta deve se parecer com esta:

  value       id                                                                                    attributes
  -----       --                                                                                    ----------
  'My Secret' https://mi-lab-vault.vault.azure.net/secrets/mi-test/50644e90b13249b584c44b9f712f2e51 @{enabled=True; created=16…

Depois de recuperar o segredo do Key Vault, você pode usá-lo para autenticar um serviço que requer um nome e uma senha.

Limpar os recursos

Por fim, ao querer limpar recursos, entre no portal do Azure, selecione Grupos de recursos , em seguida, localize e selecione o grupo de recursos que foi criado no processo deste tutorial (como mi-test). Em seguida, use o comando Excluir grupo de recursos.

Ou você também pode limpar recursos usando o PowerShell ou a CLI.

Usar uma identidade gerenciada atribuída pelo sistema de VM do Windows para acessar o gerenciador de recursos

Dica

As etapas neste artigo podem variar ligeiramente com base no portal do qual você começa.

Este tutorial explica como criar uma identidade atribuída pelo sistema, atribuí-la a uma VM (Máquina Virtual) do Windows e, em seguida, usar essa identidade para acessar a API do Azure Resource Manager. Identidade do Serviço Gerenciado são gerenciadas automaticamente pelo Azure. Elas permitem que a autenticação para serviços compatíveis com a autenticação do Microsoft Entra, sem a necessidade de inserir as credenciais em seu código.

Você aprenderá a:

  • Conceda à sua VM acesso ao Azure Resource Manager.
  • Obtenha um token de acesso usando a identidade gerenciada atribuída pelo sistema da VM para acessar o Resource Manager.
  1. Entre no Portal do Azure com sua conta de administrador.

  2. Navegue até a guia Grupos de Recursos.

  3. Selecione o Grupo de Recursos que você quer conceder acesso à identidade gerenciada da VM.

  4. No painel esquerdo, selecione Controle de acesso (IAM).

  5. Selecione Adicionar e Adicionar atribuição de função.

  6. Na guia Função, selecione Leitor. Essa função permite exibir todos os recursos, mas não permite que você faça alterações.

  7. No guia Membros, para a opção Atribuir acesso a, selecione Identidade gerenciada e escolha + Selecionar membros.

  8. Certifique-se de que a assinatura correta esteja listada na lista suspensa Assinatura. Quanto ao Grupo de Recursos, selecione Todos os grupos de recursos.

  9. Para a lista suspensa Gerenciar identidade, selecione Máquina virtual.

  10. Quanto a Selecionar, escolha sua VM na lista suspensa e selecione Salvar.

    Captura de tela mostrando a adição da função de leitor à identidade gerenciada.

Obter um token de acesso

Use a identidade gerenciada atribuída pelo sistema da VM e chame o Gerenciador de Recursos para obter um token de acesso.

Para concluir essas etapas, você precisará do cliente SSH. Se estiver usando o Windows, você poderá usar o cliente SSH no Subsistema do Windows para Linux. Se precisar de ajuda para configurar as chaves do cliente SSH, confira Como usar chaves SSH com o Windows no Azure, ou Como criar e usar um par de chaves SSH pública e privada para VMs Linux no Azure.

  1. No portal, navegue até a VM do Linux e em Visão geral, selecione Conectar.
  2. Conecte-se à VM com um cliente SSH de sua escolha.
  3. Na janela do terminal, usando o curl, faça uma solicitação às identidades gerenciadas locais do ponto de extremidade de recursos do Azure para obter um token de acesso para o Azure Resource Manager.   A solicitação do curl para o token de acesso é mostrada abaixo.
curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/' -H Metadata:true

Observação

O valor do parâmetro resource deve ser uma correspondência exata para o que é esperado pela ID do Microfone Entra. No caso da ID do recurso do Resource Manager, você deve incluir a barra à direita no URI.

A resposta inclui o token de acesso que você precisa para acessar o Azure Resource Manager.

Resposta:

{
  "access_token":"eyJ0eXAiOi...",
  "refresh_token":"",
  "expires_in":"3599",
  "expires_on":"1504130527",
  "not_before":"1504126627",
  "resource":"https://management.azure.com",
  "token_type":"Bearer"
}

Use este token de acesso para acessar o Azure Resource Manager; por exemplo, para fazer a leitura dos detalhes do grupo de recursos ao qual você concedeu anteriormente este acesso à VM. Substitua os valores de <SUBSCRIPTION-ID>, <RESOURCE-GROUP> e <ACCESS-TOKEN> por aqueles que você criou anteriormente.

Observação

A URL diferencia maiúsculas de minúsculas, portanto, certifique-se de que esteja usando as mesmas letras maiúsculas que usou anteriormente ao nomear o grupo de recursos e a letra “G” maiúscula em “resourceGroup”.

curl https://management.azure.com/subscriptions/<SUBSCRIPTION-ID>/resourceGroups/<RESOURCE-GROUP>?api-version=2016-09-01 -H "Authorization: Bearer <ACCESS-TOKEN>" 

A resposta retorna com as informações específicas do grupo de recursos:

{
"id":"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/DevTest",
"name":"DevTest",
"location":"westus",
"properties":
{
  "provisioningState":"Succeeded"
  }
} 

Usar uma identidade gerenciada atribuída pelo usuário em uma VM do Windows para acessar o Azure Resource Manager

Este tutorial explica como criar a identidade atribuída pelo usuário, atribuí-la a uma VM (Máquina Virtual) do Windows e então usar essa identidade para acessar a API do Azure Resource Manager. Identidade do Serviço Gerenciado são gerenciadas automaticamente pelo Azure. Elas permitem que a autenticação para serviços compatíveis com a autenticação do Microsoft Entra, sem a necessidade de inserir as credenciais em seu código.

Você aprenderá a:

  • Criar uma identidade gerenciada atribuída ao usuário
  • Atribuir sua identidade atribuída pelo usuário à sua VM do Windows
  • Conceder à identidade atribuída pelo usuário acesso a um Grupo de Recursos no Azure Resource Manager
  • Obtenha um token de acesso usando a identidade atribuída pelo usuário e use-o para chamar o Azure Resource Manager
  • Leia as propriedades de um grupo de recursos

Observação

Recomendamos que você use o módulo Az PowerShell do Azure para interagir com o Azure. Confira Instalar o Azure PowerShell para começar. Para saber como migrar para o módulo Az PowerShell, confira Migrar o Azure PowerShell do AzureRM para o Az.

Configurar o Azure PowerShell localmente

Para executar scripts neste exemplo, você tem duas opções:

  • Use o Azure Cloud Shell, que você pode abrir usando o botão Experimentar no canto superior direito dos blocos de código.
  • Executar os scripts localmente com o Azure PowerShell, conforme descrito na próxima seção.

Para usar o Azure PowerShell localmente para este tutorial (em vez de usar o Cloud Shell), realize as seguintes etapas:

  1. Instale a versão mais recente do Azure PowerShell, se ainda não o fez.

  2. Entrar no Azure:

    Connect-AzAccount
    
  3. Instale a versão mais recente do PowerShellGet.

    Install-Module -Name PowerShellGet -AllowPrerelease
    

    Talvez seja necessário Exit da sessão atual do PowerShell depois de executar esse comando para a próxima etapa.

  4. Instale a versão lançada do módulo Az.ManagedServiceIdentity. Você precisará disso para executar as operações de identidade gerenciada atribuídas pelo usuário neste tutorial:

    Install-Module -Name Az.ManagedServiceIdentity -AllowPrerelease
    

Habilitar

Para cenários baseados em uma identidade atribuída pelo usuário, execute as seguintes etapas nesta secção:

  1. Criar uma identidade.
  2. Atribuir a identidade recém-criada.

Criar a identidade

Esta seção mostra como criar uma identidade atribuída pelo usuário, que é criada como um recurso autônomo do Azure. Usando o cmdlet New-AzUserAssignedIdentity, o Azure cria uma identidade em seu locatário do Microsoft Entra que você poderá atribuir a uma ou mais instâncias de serviço do Azure.

Importante

Ao criar identidades gerenciadas atribuídas pelo usuário, o nome deve começar com uma letra ou número e pode incluir uma combinação de caracteres alfanuméricos, hifens (-) e sublinhados (_). Para que a atribuição a uma máquina virtual ou um conjunto de dimensionamento de máquinas virtuais funcione corretamente, o nome é limitado a 24 caracteres. Para mais informações, consulte Perguntas frequentes e problemas conhecidos

New-AzUserAssignedIdentity -ResourceGroupName myResourceGroupVM -Name ID1

A resposta contém detalhes para a identidade atribuída pelo usuário criada, semelhante ao exemplo a seguir. Defina os valores de Id e ClientId para a sua identidade atribuída pelo usuário, conforme eles serão usados nas próximas etapas:

{
Id: /subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1
ResourceGroupName : myResourceGroupVM
Name: ID1
Location: westus
TenantId: aaaabbbb-0000-cccc-1111-dddd2222eeee
PrincipalId: aaaaaaaa-bbbb-cccc-1111-222222222222
ClientId: 00001111-aaaa-2222-bbbb-3333cccc4444
ClientSecretUrl: https://control-westus.identity.azure.net/subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1/credentials?tid=aaaabbbb-0000-cccc-1111-dddd2222eeee&oid=aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb&aid=00001111-aaaa-2222-bbbb-3333cccc4444
Type: Microsoft.ManagedIdentity/userAssignedIdentities
}

Atribuir identidade

Esta seção mostra a você como atribuir a identidade atribuída pelo usuário a uma VM do Windows. Uma identidade atribuída pelo usuário pode ser usada por clientes em vários recursos do Azure. Use os comandos a seguir para atribuir a identidade atribuída pelo usuário a uma única VM. Use a propriedade Id retornada na etapa anterior para o valor do parâmetro -IdentityID.

$vm = Get-AzVM -ResourceGroupName myResourceGroup -Name myVM
Update-AzVM -ResourceGroupName TestRG -VM $vm -IdentityType "UserAssigned" -IdentityID "/subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1"

Conceder acesso

Esta seção mostra a você como conceder à sua identidade atribuída pelo usuário acesso a um grupo de recursos no Azure Resource Manager. As identidades gerenciadas para recursos do Azure fornecem identidades que seu código pode usar para solicitar tokens de acesso para autenticação em APIs de recursos que dão suporte à autenticação do Microsoft Entra. Neste tutorial, seu código acessará a API do Azure Resource Manager.

Antes que seu código possa acessar a API, você precisa conceder o acesso de identidade a um recurso no Azure Resource Manager. Nesse caso, você acessa o grupo de recursos para o qual a VM está contida. Atualize os valores de <SUBSCRIPTIONID> conforme apropriado para seu ambiente.

$spID = (Get-AzUserAssignedIdentity -ResourceGroupName myResourceGroupVM -Name ID1).principalid
New-AzRoleAssignment -ObjectId $spID -RoleDefinitionName "Reader" -Scope "/subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/"

A resposta contém detalhes para a atribuição de função criada, semelhante ao exemplo a seguir:

RoleAssignmentId: /subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.Authorization/roleAssignments/00000000-0000-0000-0000-000000000000
Scope: /subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM
DisplayName: ID1
SignInName:
RoleDefinitionName: Reader
RoleDefinitionId: 00000000-0000-0000-0000-000000000000
ObjectId: aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
ObjectType: ServicePrincipal
CanDelegate: False

Acessar dados

Dica

As etapas neste artigo podem variar ligeiramente com base no portal do qual você começa.

Obter um token de acesso

Para o restante do tutorial, você trabalha a partir da VM que criou anteriormente.

  1. Entre no portal do Azure.

  2. No portal, navegue até Máquinas Virtuais e acesse a VM do Windows. Na Visão geral, selecione Conectar.

  3. Insira o seu Nome de usuário e Senha que você usou quando criou a VM do Windows.

  4. Agora que você criou uma Conexão de Área de Trabalho Remota com sua VM, abra o PowerShell em uma sessão remota.

  5. Usando o cmdlet Invoke-WebRequest do PowerShell, faça uma solicitação para as identidades gerenciadas locais para o ponto de extremidade de recursos do Azure para obter um token de acesso para o Azure Resource Manager. O valor client_id é o valor que foi retornado quando você criou a identidade gerenciada atribuída pelo usuário.

    $response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&client_id=00001111-aaaa-2222-bbbb-3333cccc4444&resource=https://management.azure.com/' -Method GET -Headers @{Metadata="true"}
    $content = $response.Content | ConvertFrom-Json
    $ArmToken = $content.access_token
    

Ler propriedades

Por fim, use o token de acesso recuperado na etapa anterior para acessar o Azure Resource Manager e, em seguida, faça a leitura das propriedades do grupo de recursos ao qual você concedeu acesso para a identidade atribuída pelo usuário. Substituir <SUBSCRIPTION ID> com a ID da assinatura do seu ambiente.

(Invoke-WebRequest -Uri https://management.azure.com/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroupVM?api-version=2016-06-01 -Method GET -ContentType "application/json" -Headers @{Authorization ="Bearer $ArmToken"}).content

A resposta contém as informações de grupo de recursos específicas, semelhantes ao exemplo a seguir:

{"id":"/subscriptions/<SUBSCRIPTIONID>/resourceGroups/myResourceGroupVM","name":"myResourceGroupVM","location":"eastus","properties":{"provisioningState":"Succeeded"}}

Saiba mais