Tutorial: Usar uma identidade gerenciada atribuída pelo sistema da VM do Windows para acessar o Azure Data Lake StorageTutorial: Use a Windows VM system-assigned managed identity to access Azure Data Lake Store

Identidades gerenciadas para recursos do Azure é um recurso do Azure Active Directory.Managed identities for Azure resources is a feature of Azure Active Directory. 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.Each of the Azure services that support managed identities for Azure resources are subject to their own timeline. Não deixe de examinar o status de disponibilidade das identidades gerenciadas do seu recurso e os problemas conhecidos antes de começar.Make sure you review the availability status of managed identities for your resource and known issues before you begin.

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 Storage.This tutorial shows you how to use a system-assigned managed identity for a Windows virtual machine (VM) to access an Azure Data Lake Store. As Identidades de Serviço Gerenciadas são gerenciadas automaticamente pelo Azure e permitem a você autenticar os serviços que dão suporte à autenticação do Azure AD sem necessidade de inserir as credenciais em seu código.Managed Service Identities are automatically managed by Azure and enable you to authenticate to services that support Azure AD authentication, without needing to insert credentials into your code. Você aprenderá como:You learn how to:

  • Conceder acesso a um Azure Data Lake Store à sua VMGrant your VM access to an Azure Data Lake Store
  • Obter um token de acesso usando a identidade da VM e usá-lo para acessar um Azure Data Lake StoreGet an access token using the VM identity and use it to access an Azure Data Lake Store

Pré-requisitosPrerequisites

Conceder acesso ao Azure Data Lake Store à sua VMGrant your VM access to Azure Data Lake Store

Agora você pode conceder o acesso a arquivos e pastas em um Azure Data Lake Store à sua VM.Now you can grant your VM access to files and folders in an Azure Data Lake Store. Para esta etapa, é possível usar um Data Lake Store existente ou criar um novo.For this step, you can use an existing Data Lake Store or create a new one. Para criar um novo Data Lake Store usando o Portal do Azure, siga este Guia de início rápido do Azure Data Lake Store.To create a new Data Lake Store using the Azure portal, follow this Azure Data Lake Store quickstart. 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.There are also quickstarts that use the Azure CLI and Azure PowerShell in the Azure Data Lake Store documentation.

No seu Data Lake Storage, crie uma nova pasta e conceda à identidade atribuída pelo sistema da VM permissão para ler, gravar e executar arquivos nesta pasta:In your Data Lake Store, create a new folder and grant your VM's system-assigned identity permission to read, write, and execute files in that folder:

  1. No Portal do Azure, clique em Data Lake Store na navegação à esquerda.In the Azure portal, click Data Lake Store in the left-hand navigation.
  2. Clique no Data Lake Store que você deseja usar para este tutorial.Click the Data Lake Store you want to use for this tutorial.
  3. Clique em Data Explorer na barra de comandos.Click Data Explorer in the command bar.
  4. A pasta raiz do Data Lake Store é selecionada.The root folder of the Data Lake Store is selected. Clique em Acesso na barra de comandos.Click Access in the command bar.
  5. Clique em Adicionar.Click Add. No campo Selecionar, insira o nome da sua VM, por exemplo DevTestVM.In the Select field, enter the name of your VM, for example DevTestVM. Clique para selecionar sua VM nos resultados da pesquisa e escolha Selecionar.Click to select your VM from the search results, then click Select.
  6. Clique em Selecionar permissões.Click Select Permissions. Selecione Leitura e Execução, adicione a Esta pasta e adicione como Somente permissão de acesso.Select Read and Execute, add to This folder, and add as An access permission only. Clique em OK.Click Ok. A permissão deverá ser adicionada com êxito.The permission should be added successfully.
  7. Feche a folha Acesso.Close the Access blade.
  8. Para este tutorial, crie uma nova pasta.For this tutorial, create a new folder. Clique em Nova pasta na barra de comandos e dê um nome para a pasta, por exemplo TestFolder.Click New Folder in the command bar, and give the new folder a name, for example TestFolder. Clique em OK.Click Ok.
  9. Clique na pasta que você criou e escolha Acesso na barra de comandos.Click on the folder you created, then click Access in the command bar.
  10. Semelhante à etapa 5, clique em Adicionar e, no campo Selecionar, digite o nome da sua VM, selecione-a e clique em Selecionar.Similar to step 5, click Add, in the Select field enter the name of your VM, select it and click Select.
  11. Semelhante à etapa 6, clique em Selecionar permissões, selecione Leitura, Gravação e Execução, adicione a Esta pasta e acrescente como Uma entrada de permissão de acesso e uma entrada de permissão padrão.Similar to step 6, click Select Permissions, select Read, Write, and Execute, add to This folder, and add as An access permission entry and a default permission entry. Clique em OK.Click Ok. A permissão deverá ser adicionada com êxito.The permission should be added successfully.

A identidade gerenciada atribuída pelo sistema da VM agora pode executar todas as operações nos arquivos da pasta que você criou.Your VM's system-assigned managed identity can now perform all operations on files in the folder you created. Para saber mais sobre como gerenciar acesso ao Data Lake Store, leia este artigo sobre Controle de acesso no Data Lake Store.For more information on managing access to Data Lake Store, read this article on Access Control in Data Lake Store.

Obter um token de acesso usando a identidade gerenciada atribuída pelo sistema da VM e usá-lo para chamar o sistema de arquivos do Azure Data Lake StorageGet an access token using the VM's system-assigned managed identity and use it to call the Azure Data Lake Store filesystem

O Azure Data Lake Storage tem suporte nativo para autenticação do Azure AD, de modo que pode aceitar diretamente os tokens de acesso obtidos usando identidades gerenciadas para recursos do Azure.Azure Data Lake Store natively supports Azure AD authentication, so it can directly accept access tokens obtained using managed identities for Azure resources. Para autenticar para o sistema de arquivos do Data Lake Store, você enviar um token de acesso emitido pelo Azure AD para o ponto de extremidade do sistema de arquivos do Data Lake Store em um cabeçalho de autorização no formato “Bearer <ACCESS_TOKEN_VALUE>”.To authenticate to the Data Lake Store filesystem you send an access token issued by Azure AD to your Data Lake Store filesystem endpoint, in an Authorization header in the format "Bearer <ACCESS_TOKEN_VALUE>". Para saber mais sobre o suporte do Data Lake Store à autenticação do Azure AD, leia Autenticação com o Data Lake Store usando o Azure Active DirectoryTo learn more about Data Lake Store support for Azure AD authentication, read Authentication with Data Lake Store using Azure Active Directory

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.The Data Lake Store filesystem client SDKs do not yet support managed identities for Azure resources. Este tutorial será atualizado quando esse suporte for adicionado ao SDK.This tutorial will be updated when support is added to the SDK.

Neste tutorial, você se autenticará na API REST do sistema de arquivos do Data Lake Store usando o PowerShell para fazer solicitações REST.In this tutorial, you authenticate to the Data Lake Store filesystem REST API using PowerShell to make REST requests. Para usar a identidade gerenciada atribuída pelo sistema da VM para autenticação, você precisa fazer as solicitações da VM.To use the VM's system-assigned managed identity for authentication, you need to make the requests from the VM.

  1. No portal, navegue até Máquinas Virtuais, acesse a VM Windows e, em Visão geral, clique em Conectar.In the portal, navigate to Virtual Machines, go to your Windows VM, and in the Overview click Connect.

  2. Insira o seu Nome de usuário e Senha que você adicionou quando criou a VM do Windows.Enter in your Username and Password for which you added when you created the Windows VM.

  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.Now that you have created a Remote Desktop Connection with the virtual machine, open PowerShell in the remote session.

  4. Usando o 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 Storage.Using PowerShell’s Invoke-WebRequest, make a request to the local managed identities for Azure resources endpoint to get an access token for Azure Data Lake Store. O identificador de recursos para Data Lake Store é https://datalake.azure.net/.The resource identifier for Data Lake Store is https://datalake.azure.net/. O Data Lake faz uma correspondência exata no identificador de recursos, por isso a barra à direita é importante.Data Lake does an exact match on the resource identifier and the trailing slash is important.

    $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.Convert the response from a JSON object to a PowerShell object.

    $content = $response.Content | ConvertFrom-Json
    

    Extraia o token de acesso da resposta.Extract the access token from the response.

    $AccessToken = $content.access_token
    
  5. Usando '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.Using PowerShell's `Invoke-WebRequest', make a request to your Data Lake Store's REST endpoint to list the folders in the root folder. Essa é uma maneira simples de verificar se que tudo está configurado corretamente.This is a simple way to check everything is configured correctly. É importante que a cadeia de caracteres “Bearer” no cabeçalho de autorização tenha um “B” maiúsculo.It is important the string "Bearer" in the Authorization header has a capital "B". Você pode encontrar o nome do seu Data Lake Store na seção Visão geral da folha Data Lake Store no Portal do Azure.You can find the name of your Data Lake Store in the Overview section of the Data Lake Store blade in the Azure portal.

    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:A successful response looks like:

    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 você pode tentar carregar um arquivo para seu Data Lake Store.Now you can try uploading a file to your Data Lake Store. Primeiramente, crie um arquivo para ser carregado.First, create a file to upload.

    echo "Test file." > Test1.txt
    
  7. Usando 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.Using PowerShell's Invoke-WebRequest, make a request to your Data Lake Store's REST endpoint to upload the file to the folder you created earlier. Duas etapas são necessárias para essa solicitação.This request takes two steps. Na primeira etapa, você faz uma solicitação e obtém um redirecionamento para onde o arquivo deve ser carregado.In the first step, you make a request and get a redirection to where the file should be uploaded. Na segunda etapa, ocorre o upload do arquivo propriamente dito.In the second step, you actually upload the file. Lembre-se de definir o nome da pasta e do arquivo corretamente se tiver usado valores diferentes deste tutorial.Remember to set the name of the folder and file appropriately if you used different values than in this 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:If you inspect the value of $HdfsRedirectResponse it should look like the following response:

    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:Complete the upload by sending a request to the redirect endpoint:

    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:A successful response look like:

    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
    

Usando outras APIs do sistema de arquivos do Data Lake Store, é possível acrescentar aos arquivos, baixar arquivos e muito mais.Using other Data Lake Store filesystem APIs you can append to files, download files, and more.

Próximas etapasNext steps

Neste tutorial, você aprendeu a usar uma identidade gerenciada atribuída pelo sistema para uma máquina virtual do Windows para acessar um Azure Data Lake Storage.In this tutorial, you learned how to use a system-assigned managed identity for a Windows virtual machine to access an Azure Data Lake Store. Para saber mais sobre o Azure Data Lake Store, confira:To learn more about Azure Data Lake Store see: