Partilhar via


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

Pré-requisitos

Usar uma identidade gerenciada atribuída pelo sistema de VM do Windows para acessar o Repositório Azure Data Lake

Este tutorial mostra como usar uma identidade gerenciada atribuída ao sistema para uma máquina virtual (VM) do Windows para acessar um Repositório Azure Data Lake. As identidades gerenciadas são gerenciadas automaticamente pelo Azure. Eles permitem que seu aplicativo se autentique em serviços que oferecem suporte à autenticação do Microsoft Entra, sem a necessidade de inserir credenciais em seu código.

Neste artigo, vai aprender a:

  • Conceder o acesso à sua VM ao Azure Data Lake Store
  • Obter um token de acesso com a identidade da VM e utilizá-lo para aceder ao Azure Data Lake Store

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. Crie uma máquina virtual com a identidade atribuída ao sistema habilitada.

Conceder acesso

Você pode conceder à sua VM acesso a arquivos e pastas em um Repositório Azure Data Lake. Para este passo, pode utilizar um Data Lake Store existente ou criar um novo.

Para criar um novo Repositório Data Lake usando o portal do Azure, consulte Início rápido do Repositório Azure Data Lake. Também existem inícios rápidos que utilizam a CLI do Azure e o Azure PowerShell na Documentação do Azure Data Lake Store.

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

  1. No portal do Azure, selecione Repositório Data Lake na navegação à esquerda.
  2. Selecione o Repositório Data Lake que você deseja usar para este tutorial.
  3. Selecione Data Explorer na barra de comandos.
  4. A pasta raiz do Data Lake Store fica selecionada. Selecione Acesso na barra de comandos.
  5. Selecione Adicionar. No campo Selecionar, introduza o nome da sua VM, por exemplo DevTestVM. Selecione a sua VM nos resultados da pesquisa e, em seguida, selecione Selecionar.
  6. Selecione Selecionar permissões e, em seguida , Ler e executar. Adicionar a Esta pasta e, em seguida, selecione Apenas uma permissão de acesso.
  7. Selecione Ok e feche a folha Acesso . A permissão deve 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 que criou e, em seguida, selecione Acesso na barra de comandos.
  10. Selecione Adicionar e, em seguida, no campo Selecionar , insira o nome da sua VM e selecione Selecionar.
  11. Selecione Selecionar Permissões, depois Ler, Gravar e Executar. Adicione a Esta pasta e, 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 deve ser adicionada com êxito.

A identidade gerida atribuída pelo sistema da VM pode agora realizar todas as operações nos ficheiros da pasta que criou. Para obter informações sobre como gerenciar o acesso ao Repositório Data Lake, consulte Controle de acesso no Repositório Data Lake.

Aceder a dados

O Repositório Azure Data Lake dá suporte nativo à autenticação do Microsoft Entra, para que ele possa aceitar diretamente tokens de acesso obtidos usando identidades gerenciadas para recursos do Azure. Para autenticar no sistema de arquivos do Repositório Data Lake, envie um token de acesso emitido pela ID do Microsoft Entra para o ponto de extremidade do sistema de arquivos do Repositório Data Lake em um cabeçalho de Autorização. O cabeçalho tem o formato Bearer <ACCESS_TOKEN_VALUE>.

Para saber mais sobre o suporte do Repositório Data Lake para autenticação do Microsoft Entra, consulte Autenticação com o Repositório Data Lake usando a ID do Microsoft Entra.

Nota

Os SDKs de cliente de sistema de ficheiros do Data Lake Store ainda não suportam identidades geridas para recursos do Azure.

Neste tutorial, vai autenticar para a API REST do sistema de ficheiros do Data Lake Store com o PowerShell, para fazer pedidos REST. Para utilizar a identidade gerida atribuída pelo sistema da VM para a autenticação, terá de fazer os pedidos a partir da VM.

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

  2. Introduza o seu Nome de Utilizador e Palavra-passe que 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 do PowerShell Invoke-WebRequest , faça uma solicitação às identidades gerenciadas locais para o ponto de extremidade de recursos do Azure para obter um token de acesso para o Azure Data Lake Store. O identificador de recurso para o Repositório Data Lake é https://datalake.azure.net/. O Data Lake faz uma correspondência exata no identificador de recurso, portanto, 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 num 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 PowerShell Invoke-WebRequest , faça uma solicitação ao ponto de extremidade REST do Repositório Data Lake para listar as pastas na pasta raiz. É importante que a cadeia de caracteres Bearer no cabeçalho Authorization tenha um "B" maiúsculo. Você pode encontrar o nome do seu Repositório Data Lake na seção Visão geral do seu Repositório Data Lake.

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

    Uma resposta com êxito é semelhante à seguinte:

    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 o seu Repositório Data Lake. Primeiro, crie um ficheiro para carregar.

    echo "Test file." > Test1.txt
    
  7. Usando o cmdlet PowerShell Invoke-WebRequest , faça uma solicitação ao ponto de extremidade REST do Repositório Data Lake para carregar o arquivo na pasta criada anteriormente. Este pedido é feito em dois passos.

    1. Faça uma solicitação e obtenha um redirecionamento para onde o arquivo deve ser carregado.
    2. Carregue o ficheiro CSV . Lembre-se de definir o nome da pasta e do arquivo adequadamente se você usou 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 carregamento, enviando um pedido para o ponto final de redirecionamento:

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

    Uma resposta com êxito é semelhante à seguinte:

    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
    

Finalmente, você pode usar outras APIs do sistema de arquivos do Repositório Data Lake para anexar e baixar arquivos e muito mais.

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.

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

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

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. Crie uma máquina virtual com a identidade atribuída ao sistema habilitada.

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. No campo Nome, insira 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 até sua conta de armazenamento recém-criada.

  2. Na seção Serviço de 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, em seguida, na opção Nível de acesso público, mantenha o valor padrão.

    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 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 hello_world.txt de arquivos em sua máquina local. Em seguida, selecione o arquivo e Upload. 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 até sua conta de armazenamento recém-criada.

  2. Selecione Controlo de acesso (IAM) .

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

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

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

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

Um 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 (neste caso, um serviço de blob). O SAS faz isso sem expor uma chave de acesso da conta. Você pode usar uma credencial SAS como de costume para operações de armazenamento; por exemplo, ao usar um SDK de armazenamento. Este tutorial demonstra como carregar e baixar um blob usando o PowerShell de Armazenamento do Azure.

Saberá como:

  • Criar uma conta de armazenamento
  • Conceder o acesso da VM a um SAS da conta de armazenamento no Resource Manager
  • Obter um token de acesso com a identidade da VM e utilizá-lo para obter o SAS a partir do Resource Manager

Nota

Recomendamos que utilize o módulo do Azure Az PowerShell para interagir com o Azure. Veja Instalar o Azure PowerShell para começar. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.

Criar uma conta de armazenamento

Se ainda não tiver uma, terá de criar uma conta de armazenamento. Caso contrário, siga estas etapas para conceder à identidade gerenciada atribuída pelo sistema da sua VM acesso à credencial SAS de uma conta de armazenamento existente.

  1. Selecione Armazenamento e, em seguida , Conta de armazenamento.

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

  3. Certifique-se de que Modelo de implantação e Tipo de conta estejam definidos como Gerenciador de recursos e Finalidade geral.

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

  5. Selecione Criar para criar sua conta de armazenamento.

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

Criar um contentor de blobs na conta de armazenamento

Mais adiante no tutorial, você carregará e baixará um arquivo para a nova conta de armazenamento. Como os arquivos exigem armazenamento de blob, você precisa criar um contêiner de blob para armazenar o arquivo.

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

  2. Selecione o link Contêineres no painel esquerdo, em Serviço de 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 gerida atribuída pelo sistema da VM acesso para utilizar uma SAS de armazenamento

O Armazenamento do Azure não suporta nativamente a autenticação do Microsoft Entra. No entanto, você pode usar uma identidade gerenciada para recuperar uma SAS de armazenamento do Gerenciador de Recursos e, em seguida, usar a SAS para acessar o armazenamento. Neste passo, pode conceder à identidade gerida atribuída pelo sistema da VM acesso à SAS da sua conta de armazenamento.

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

  2. Selecione Controlo de acesso (IAM) .

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

  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
    Role Contribuidor da conta de armazenamento
    Atribuir acesso a Identidade gerida
    Atribuída pelo sistema Máquina virtual
    Selecione <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 VM e usá-lo para chamar o Azure Resource Manager

Para o restante deste tutorial, você trabalha a partir de sua VM. Você precisa usar os cmdlets do PowerShell do Azure Resource Manager nesta parte. Se você não tiver o PowerShell instalado, baixe a versão mais recente antes de continuar.

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

  2. Introduza o seu Nome de Utilizador e Palavra-passe que adicionou quando criou a 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 use o cmdlet do PowerShell Invoke-WebRequest 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"}
    

    Nota

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

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

    $content = $response.Content | ConvertFrom-Json
    

    Em seguida, extraia o token de acesso da resposta.

    $ArmToken = $content.access_token
    

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

Por fim, use o PowerShell para chamar o Gerenciador de Recursos usando o token de acesso recuperado na seção anterior. Use esse token para criar uma credencial SAS de armazenamento. Depois de ter a credencial SAS, você pode chamar outras operações de armazenamento.

Para essa 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 estão incluídos no corpo POST da solicitação da credencial SAS. Para obter mais informações sobre parâmetros para criar uma credencial SAS, consulte a referência List Service SAS REST.

  1. Converta os parâmetros em JSON e, em seguida, chame o ponto de extremidade de armazenamento listServiceSas 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"}
    

    Nota

    A URL diferencia maiúsculas de minúsculas, portanto, certifique-se de usar exatamente as mesmas maiúsculas e minúsculas usadas quando nomeou o grupo de recursos, incluindo o "G" maiúsculo em resourceGroups.

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

    $sasContent = $sasResponse.Content | ConvertFrom-Json
    $sasCred = $sasContent.serviceSasToken
    
  3. Se você inspecionar a credencial SAS, verá 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 com o New-AzStorageContent cmdlet, carregue o arquivo no contêiner de blob e baixe o arquivo.

    echo "This is a test text file." > test.txt
    
  5. Não se esqueça de instalar primeiro os cmdlets de Armazenamento do Azure, com Install-Module Azure.Storage. Em seguida, carregue o blob que você acabou de criar, usando o cmdlet do PowerShell Set-AzStorageBlobContent :

    $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 carregado usando o Get-AzStorageBlobContent cmdlet do PowerShell:

    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 de VM do Windows para acessar o Banco de Dados SQL do Azure

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

Saberá como:

  • Conceda à sua VM acesso ao Banco de Dados SQL do Azure
  • Habilitar a autenticação do Microsoft Entra
  • Criar um utilizador contido na base de dados que representa a identidade atribuída pelo 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

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. Crie uma máquina virtual com a identidade atribuída ao sistema habilitada.

Conceder acesso

Para conceder à sua VM acesso a um banco de dados no Banco de Dados SQL do Azure, use um servidor SQL lógico existente ou crie um novo. 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 existem inícios rápidos que utilizam a CLI do Azure e o Azure PowerShell na documentação do SQL do Azure.

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

  1. Habilite a autenticação do Microsoft Entra para o servidor.
  2. Criar um utilizador contido na base de dados que representa a identidade atribuída pelo sistema da VM.

Habilitar a autenticação do Microsoft Entra

Para configurar a autenticação do Microsoft Entra:

  1. No portal do Azure, selecione SQL server na navegação à esquerda.
  2. Selecione o servidor SQL que você deseja habilitar para a autenticação do Microsoft Entra.
  3. Na seção Configurações da folha, selecione Administrador do Ative Directory.
  4. Na barra de comandos, selecione Definir administrador.
  5. Selecione uma conta de usuário do Microsoft Entra para se tornar um administrador para o servidor e selecione Selecionar.
  6. Na barra de comandos, selecione Salvar.

Criar usuário contido

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

Os bancos de dados SQL exigem nomes de exibição exclusivos do Microsoft Entra ID. Com isso, as contas do Microsoft Entra, como usuários, grupos e entidades de serviço (aplicativos) e nomes de VM habilitados para identidade gerenciada, devem ser definidos exclusivamente na ID do Microsoft Entra específica 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.

Para criar um usuário contido

  1. Abra o SQL Server Management Studio.

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

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

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

  5. Selecionar Opções.

  6. No campo Ligar à base de dados, introduza o nome da base de dados não pertencente ao sistema que pretende configurar.

  7. Selecione Ligar e, em seguida, conclua o processo de início de sessão.

  8. No Object Explorer, expanda a pasta Databases.

  9. Clique com o botão direito do rato numa base de dados de utilizadores e, em seguida, selecione Nova consulta.

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

    Nota

    VMName no comando seguinte é o nome da VM em que ativou a identidade atribuída pelo sistema na secção de pré-requisitos.

    CREATE USER [VMName] FROM EXTERNAL PROVIDER
    

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

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

    Nota

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

    Se você encontrar o erro "Principal VMName tem um nome de exibição duplicado", acrescente 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 contido a capacidade de ler todo o banco de dados.

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

Aceder a dados

Esta seção mostra como obter um token de acesso usando a identidade gerenciada atribuída pelo sistema da VM e usá-lo para chamar o Azure SQL. O SQL do Azure dá suporte nativo à autenticação do Microsoft Entra, portanto, ele pode aceitar diretamente 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.

Aqui está um exemplo de código .NET de abertura de uma conexão com SQL usando a autenticação de Identidade Gerenciada do Ative Directory. O código deve ser executado na VM para poder acessar o ponto de extremidade da identidade gerenciada atribuída ao sistema da VM.

O .NET Framework 4.6.2 ou superior ou o .NET Core 3.1 ou superior é necessário para usar esse método. Substitua os valores de AZURE-SQL-SERVERNAME e DATABASE de acordo e adicione uma referência 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();

Nota

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 escrever e implantar um aplicativo na VM.

  1. No portal, navegue até Máquinas Virtuais, vá para sua VM do Windows e, em seguida, na Visão Geral, selecione Conectar.

  2. Insira sua credencial de administrador de 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 do PowerShell Invoke-WebRequest , faça uma solicitação ao ponto de extremidade da identidade gerenciada local para obter um token de acesso para o Azure SQL.

        $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 num 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 de 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 de 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)
    

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

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.

Utilizar uma identidade gerida atribuída pelo sistema de VM do Windows para aceder ao Azure Key Vault

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

Saberá como:

  • Conceder o acesso da VM a um segredo armazenado num Key Vault
  • Obter um token de acesso com a identidade da VM e utilizá-lo para obter o segredo a partir do Key Vault

Criar um Cofre de Chaves

Gorjeta

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

Esta seção mostra como conceder à sua VM acesso a um segredo armazenado em um Cofre de Chaves. Quando você usa identidades gerenciadas para recursos do Azure, seu código pode obter tokens de acesso para autenticar recursos que dão suporte à autenticação do Microsoft Entra. 

No entanto, nem todos os serviços do Azure oferecem suporte à autenticação Microsoft Entra. Para utilizar identidades geridas para recursos do Azure com esses serviços, armazene as credenciais do serviço no Azure Key Vault e utilize a identidade gerida da VM para aceder ao Key Vault para obter as credenciais.

Primeiro, você precisa criar um Cofre da Chave e conceder à identidade gerenciada atribuída pelo sistema da sua VM acesso ao Cofre da Chave.

  1. Inicie sessão 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 Cofre da Chave nos resultados e, em seguida, selecione Criar.

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

    Captura de ecrã do ecrã Criar um cofre de chaves.

  6. Preencha todas as informações necessárias. Certifique-se de que escolhe a subscrição e o grupo de recursos que está a utilizar para este tutorial.

  7. Selecione Rever+ criar.

  8. Selecione Criar.

Criar um segredo

Em seguida, você precisa adicionar um segredo ao Cofre da Chave, para que possa recuperá-lo mais tarde usando o código em execução em sua VM. Nesta seção, você usa o PowerShell, mas os mesmos conceitos se aplicam a qualquer código executado em sua VM.

  1. Navegue até o Cofre da Chave recém-criado.

  2. Selecione Segredos e, em seguida, selecione Adicionar.

  3. Selecione Gerar/Importar.

  4. Na tela Criar um segredo, nas opções de Upload, deixe Manual selecionado.

  5. Introduza o nome e o valor do segredo. O valor pode ser o que quiser. 

  6. Deixe as datas de ativação e expiração claras e mantenha Ativado como Sim

  7. Selecione Criar para criar o segredo.

    Captura de ecrã a mostrar como criar um segredo.

Conceder acesso

A identidade gerenciada usada pela VM precisa ter acesso para ler o segredo que o Cofre da Chave armazena.

  1. Navegue até o Cofre da Chave recém-criado.

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

  3. Selecione Adicionar Política de Acesso.

    Captura de ecrã a mostrar o ecrã da política de acesso ao cofre da chave.

  4. Na seção Adicionar política de acesso, em Configurar a partir do modelo (opcional), escolha Gerenciamento Secreto no menu suspenso.

  5. Escolha Selecionar entidade de segurança e, em seguida, no campo de pesquisa, insira o nome da VM criada anteriormente. 

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

  7. Selecione Adicionar.

  8. Selecione Guardar.

Aceder a dados

Esta seção mostra como obter um token de acesso usando a identidade da VM e usá-lo para recuperar o segredo do Cofre da Chave. Se não tiver o PowerShell 4.3.1 ou posterior instalado, terá de transferir e instalar a versão mais recente.

Nota

O método de usar o PowerShell para autenticar e recuperar o segredo é preferido em cenários onde as identidades gerenciadas são especificamente necessárias ou ao incorporar 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 no Cofre da Chave:

  1. No portal, navegue até Máquinas Virtuais e vá para sua VM do Windows e, em seguida, na Visão Geral, selecione Conectar.
  2. Introduza o seu Nome de Utilizador e Palavra-passe que 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. No PowerShell, invoca o pedido Web no inquilino para obter o token para o anfitrião local na porta específica para a VM.

Nota

Se estiver usando uma nuvem soberana, como o 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"} 

Nota

Ao trabalhar com nuvens soberanas, você precisa fazer ajustes no ponto de extremidade especificado no final do cmdlet.

Por exemplo, vault.usgovcloudapi.net deve ser usado ao trabalhar com o Azure Government Cloud, 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, consulte o artigo Visão geral da segurança do cofre da Chave do Azure.

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 do PowerShell Invoke-WebRequest para recuperar o segredo criado anteriormente no Cofre da Chave, passando o token de acesso no cabeçalho Authorization. Precisará do URL do Key Vault, que está na secção Informações Básicas da página Descriçã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 ser assim:

  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, pode utilizá-lo para autenticação num serviço que requeira um nome e uma palavra-passe.

Clean up resources (Limpar recursos)

Finalmente, quando quiser limpar recursos, entre no portal do Azure, selecione Grupos de recursos e, 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 ao sistema de VM do Windows para acessar o gerenciador de recursos

Gorjeta

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

Este tutorial explica como criar uma identidade atribuída ao sistema, atribuí-la a uma máquina virtual (VM) do Windows e usar essa identidade para acessar a API do Azure Resource Manager . As Identidades de Serviço Geridas são geridas automaticamente pelo Azure. Eles habilitam a autenticação para serviços que oferecem suporte à autenticação do Microsoft Entra, sem a necessidade de incorporar credenciais ao seu código.

Saberá como:

  • 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 Gerenciador de Recursos.
  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 ao qual você deseja conceder acesso à identidade gerenciada da VM.

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

  5. Selecione Adicionar e, em seguida, selecione 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 separador Membros, para a opção Atribuir acesso a, selecione Identidade gerida e, em seguida, selecione + Selecionar membros.

  8. Verifique se a assinatura adequada está listada na lista suspensa Assinatura . Em Grupo de Recursos, selecione Todos os grupos de recursos.

  9. Na lista suspensa Gerenciar identidade, selecione Máquina Virtual.

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

    Captura de tela que mostra 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 estes passos, precisa de um cliente SSH. Se você estiver usando o Windows, poderá usar o cliente SSH no Subsistema Windows para Linux. Se precisar de ajuda para configurar as chaves do seu cliente SSH, veja Como utilizar chaves SSH com o Windows no Azure ou Como criar e utilizar um par de chaves SSH públicas e privadas para VMs do Linux no Azure.

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

Nota

O valor do parâmetro deve ser uma correspondência exata para o que é esperado pelo ID do resource Microsoft Entra. No caso da ID de recurso do Gerenciador de Recursos, você deve incluir a barra à direita no URI.

A resposta inclui o token de acesso necessário para aceder ao 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 esse token de acesso para acessar o Gerenciador de Recursos do Azure; por exemplo, para ler os detalhes do grupo de recursos ao qual você concedeu anteriormente acesso a essa VM. Substitua os valores de <SUBSCRIPTION-ID>, <RESOURCE-GROUP>e <ACCESS-TOKEN> pelos que você criou anteriormente.

Nota

A URL diferencia maiúsculas de minúsculas, portanto, certifique-se de que você está usando o caso exato como você usou anteriormente quando nomeou o grupo de recursos e o "G" maiúsculo 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 de volta 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 uma identidade atribuída pelo usuário, atribuí-la a uma máquina virtual (VM) do Windows e usar essa identidade para acessar a API do Azure Resource Manager . As Identidades de Serviço Geridas são geridas automaticamente pelo Azure. Eles habilitam a autenticação para serviços que oferecem suporte à autenticação do Microsoft Entra, sem a necessidade de incorporar credenciais ao seu código.

Saberá como:

  • Criar uma identidade gerida atribuída pelo utilizador
  • Atribuir a sua identidade atribuída pelo utilizador à sua VM do Windows
  • Conceder o acesso de identidade atribuída pelo utilizador a um Grupo de Recursos do Azure Resource Manager
  • Obter um token de acesso com a identidade atribuída pelo utilizador e utilizá-lo para chamar o Azure Resource Manager
  • Ler as propriedades de um Grupo de Recursos

Nota

Recomendamos que utilize o módulo do Azure Az PowerShell para interagir com o Azure. Veja Instalar o Azure PowerShell para começar. Para saber como migrar para o módulo do Az PowerShell, veja 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.
  • Execute 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), conclua as seguintes etapas:

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

  2. Entre no Azure:

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

    Install-Module -Name PowerShellGet -AllowPrerelease
    

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

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

    Install-Module -Name Az.ManagedServiceIdentity -AllowPrerelease
    

Ativar

Para cenários baseados em uma identidade atribuída pelo usuário, você precisa executar as seguintes etapas nesta seção:

  1. Crie uma identidade.
  2. Atribua a identidade recém-criada.

Criar 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ê pode atribuir a uma ou mais instâncias de serviço do Azure.

Importante

Quando você cria 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, hífenes (-) e sublinhados (_). Para que a atribuição a uma máquina virtual ou a uma escala de máquina virtual funcione corretamente, o nome é limitado a 24 caracteres. Para obter mais informações, veja FAQs 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 e ClientId para sua Id identidade atribuída pelo usuário, pois eles são usados nas etapas subsequentes:

{
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 como Atribuir a identidade atribuída pelo usuário a uma VM do Windows. Uma identidade atribuída pelo utilizador pode ser utilizada pelos clientes em vários recursos do Azure. Utilize os comandos seguintes para atribuir a identidade atribuída pelo utilizador a uma única VM. Utilize a propriedade Id devolvida no passo anterior para o 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 como conceder acesso à identidade atribuída pelo usuário a um grupo de recursos no Gerenciador de Recursos do Azure. 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, o seu código irá aceder à API do Azure Resource Manager.

Antes de o seu código pode aceder à API, tem de 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 o valor de <SUBSCRIPTIONID>, conforme adequado para o 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 da atribuição de função criada, semelhante ao seguinte exemplo:

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

Aceder a dados

Gorjeta

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

Obter um token de acesso

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

  1. Inicie sessão no portal do Azure.

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

  3. Introduza o Nome de Utilizador e a Palavra-passe que utilizou 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 do PowerShell Invoke-WebRequest , faça uma solicitação às identidades gerenciadas locais para o ponto de extremidade de recursos do Azure para obter um token de acesso para o Gerenciador de Recursos do Azure. O client_id valor é o valor 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 Gerenciador de Recursos do Azure e leia as propriedades do grupo de recursos que você concedeu ao acesso de identidade atribuído pelo usuário. Substitua <SUBSCRIPTION ID> pelo ID de 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 específicas do Grupo de Recursos, semelhantes ao seguinte exemplo:

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

Mais informações