Tutorial: Usar uma identidade gerenciada atribuída pelo sistema da VM do Windows para acessar o Armazenamento do Microsoft Azure por meio da chave de acessoTutorial: Use a Windows VM system-assigned managed identity to access Azure Storage via access key

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.

Importante

O Armazenamento do Microsoft Azure agora é compatível com a autenticação do Azure AD.Azure Storage now supports Azure AD authentication. Como melhor prática, use a autenticação do Azure AD em vez de chaves de acesso.As a best practice, use Azure AD authentication instead of access keys.

Este tutorial mostra como usar uma identidade gerenciada atribuída pelo sistema de uma máquina virtual (VM) do Windows para recuperar as chaves de acesso da conta de armazenamento.This tutorial shows you how to use a system-assigned managed identity for Windows virtual machine (VM) to retrieve storage account access keys. Você pode usar as chaves de acesso de armazenamento normalmente ao realizar operações de armazenamento, por exemplo, ao usar o SDK de Armazenamento.You can use storage access keys as usual when doing storage operations, for example when using the Storage SDK. Para este tutorial, vamos carregar e baixar blobs usando o PowerShell do Armazenamento do Azure.For this tutorial, we upload and download blobs using Azure Storage PowerShell. Você saberá como:You will learn how to:

  • Criar uma conta de armazenamentoCreate a storage account
  • Conceder acesso à VM para chaves de acesso da conta de armazenamento no Resource ManagerGrant your VM access to storage account access keys in Resource Manager
  • Obter um token de acesso usando a identidade da VM e usá-la para recuperar as chaves de acesso de armazenamento do Resource ManagerGet an access token using your VM's identity, and use it to retrieve the storage access keys from Resource Manager

Pré-requisitosPrerequisites

Observação

Este artigo foi atualizado para usar o novo módulo Az do Azure PowerShell.This article has been updated to use the new Azure PowerShell Az module. Você ainda pode usar o módulo AzureRM, que continuará a receber as correções de bugs até pelo menos dezembro de 2020.You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Para saber mais sobre o novo módulo Az e a compatibilidade com o AzureRM, confira Apresentação do novo módulo Az do Azure PowerShell.To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Para obter instruções de instalação do módulo Az, confira Instalar o Azure PowerShell.For Az module installation instructions, see Install Azure PowerShell.

Criar uma conta de armazenamentoCreate a storage account

Se você ainda não tiver uma, agora você criará uma conta de armazenamento.If you don't already have one, you will now create a storage account. Você também pode ignorar esta etapa e conceder à identidade gerenciada atribuída pelo sistema da VM acesso às chaves de uma conta de armazenamento existente.You can also skip this step and grant your VM's system-assigned managed identity access to the keys of an existing storage account.

  1. Clique no botão +/Criar novo serviço encontrado no canto superior esquerdo do portal do Azure.Click the +/Create new service button found on the upper left-hand corner of the Azure portal.

  2. Clique em Armazenamento, então Conta de Armazenamento e um novo painel "Criar conta de armazenamento" será exibido.Click Storage, then Storage Account, and a new "Create storage account" panel will display.

  3. Insira um nome para a conta de armazenamento, que você usará mais tarde.Enter a name for the storage account, which you will use later.

  4. Modelo de implantação e Tipo de conta devem ser definidos como "Resource manager" e "Finalidade geral", respectivamente.Deployment model and Account kind should be set to "Resource manager" and "General purpose", respectively.

  5. Verifique se a Assinatura e o Grupo de Recursos correspondem ao que você especificou quando criou sua VM na etapa anterior.Ensure the Subscription and Resource Group match the ones you specified when you created your VM in the previous step.

  6. Clique em Criar.Click Create.

    Criar nova conta de armazenamento

Criar um contêiner de blobs na conta de armazenamentoCreate a blob container in the storage account

Mais tarde vamos carregar e baixar um arquivo para a nova conta de armazenamento.Later we will upload and download a file to the new storage account. Como arquivos exigem armazenamento de blobs, é preciso criar um contêiner de blobs para armazenar o arquivo.Because files require blob storage, we need to create a blob container in which to store the file.

  1. Navegue de volta para sua conta de armazenamento criado recentemente.Navigate back to your newly created storage account.

  2. Clique no link Contêineres à esquerda, em "Serviço Blob".Click the Containers link in the left, under "Blob service."

  3. Clique em + Contêiner na parte superior da página e um painel "Novo contêiner" deslizará para fora.Click + Container on the top of the page, and a "New container" panel slides out.

  4. Dê um nome ao contêiner, selecione um nível de acesso, então clique em OK.Give the container a name, select an access level, then click OK. O nome especificado será usado posteriormente no tutorial.The name you specified will be used later in the tutorial.

    Criar um contêiner de armazenamento

Conceder acesso de identidade gerenciada atribuído pelo sistema da VM para usar as chaves de acesso da conta de armazenamentoGrant your VM's system-assigned managed identity access to use storage account access keys

O Armazenamento do Azure não dá suporte nativo a autenticação do Azure AD.Azure Storage does not natively support Azure AD authentication. No entanto, você pode usar sua identidade gerenciada atribuída pelo sistema da VM para recuperar as chaves de acesso da conta de armazenamento do Resource Manager e usar essas chaves para acessar o armazenamento.However, you can use your VM's system-assigned managed identity to retrieve storage account access keys from the Resource Manager, then use a key to access storage. Nesta etapa, você concede à identidade gerenciada atribuída pelo sistema da VM acesso às chaves para a sua conta de armazenamento.In this step, you grant your VM's system-assigned managed identity access to the keys to your storage account.

  1. Navegue de volta para sua conta de armazenamento criado recentemente.Navigate back to your newly created storage account.

  2. Clique no link do Controle de acesso (IAM) no painel à esquerda.Click the Access control (IAM) link in the left panel.

  3. Clique em + Adicionar atribuição de função na parte superior da página para adicionar uma nova atribuição de função à sua VMClick + Add role assignment on top of the page to add a new role assignment for your VM

  4. Defina Função como "Função do Serviço de Operador da Chave de Conta de Armazenamento", no lado direito da página.Set Role to "Storage Account Key Operator Service Role", on the right side of the page.

  5. No próximo menu suspenso, escolha Atribuir acesso a ao recurso “Máquina Virtual”.In the next dropdown, set Assign access to the resource "Virtual Machine".

  6. Em seguida, verifique se a assinatura correta é listada no menu suspenso Assinatura e, em seguida, defina Grupo de Recursos como "Todos os grupos de recursos".Next, ensure the proper subscription is listed in Subscription dropdown, then set Resource Group to "All resource groups".

  7. Por fim, em Selecionar, escolha sua Máquina Virtual do Windows na lista suspensa e clique em Salvar.Finally, under Select choose your Windows Virtual Machine in the dropdown, then click Save.

    Texto Alt da imagem

Obter um token de acesso usando a identidade gerenciada atribuída pelo sistema da VM para chamar o Azure Resource ManagerGet an access token using the VM's system-assigned managed identity to call Azure Resource Manager 

Para o restante do tutorial, trabalharemos na VM criada anteriormente.For the remainder of the tutorial, we will work from the VM we created earlier.

Você precisará usar os cmdlets do PowerShell do Azure Resource Manager nesta parte.You will need to use the Azure Resource Manager PowerShell cmdlets in this portion. Se ele não estiver instalado, baixe a versão mais recente antes de continuar.If you don’t have it installed, download the latest version before continuing.

  1. No portal do Azure, navegue até Máquinas Virtuais, vá para a Máquina Virtual do Windows e, na página Visão geral, clique em Conectar na parte superior.In the Azure portal, navigate to Virtual Machines, go to your Windows virtual machine, then from the Overview page click Connect at the top.

  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 Invoke-WebRequest do Powershell, faça uma solicitação para a identidade gerenciada local para o ponto de extremidade de recursos do Azure para obter um token de acesso para o Azure Resource Manager.Using Powershell’s Invoke-WebRequest, make a request to the local managed identity for Azure resources endpoint to get an access token for Azure Resource Manager.

       $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 pelo Azure AD.The value of the "resource" parameter must be an exact match for what is expected by Azure AD. Ao usar a ID de recurso do Azure Resource Manager, você deve incluir a barra à direita no URI.When using the Azure Resource Manager resource ID, you must include the trailing slash on the URI.

    Em seguida, extraia o elemento “Conteúdo”, que está armazenado como uma cadeia de caracteres formatada em JSON (JavaScript Object Notation) no objeto $response.Next, extract the "Content" element, which is stored as a JavaScript Object Notation (JSON) formatted string in the $response object.

    $content = $response.Content | ConvertFrom-Json
    

    Em seguida, extraia o token de acesso da resposta.Next, extract the access token from the response.

    $ArmToken = $content.access_token
    

Obter chaves de acesso da conta de armazenamento do Azure Resource Manager para realizar chamadas de armazenamentoGet storage account access keys from Azure Resource Manager to make storage calls

Agora, usamos o PowerShell para chamar o Resource Manager usando o token de acesso recuperado na seção anterior para recuperar a chave de acesso de armazenamento.Now use PowerShell to call Resource Manager using the access token we retrieved in the previous section, to retrieve the storage access key. Assim que tivermos a chave de acesso de armazenamento, podemos chamar as operações de upload/download de armazenamento.Once we have the storage access key, we can call storage upload/download operations.

$keysResponse = Invoke-WebRequest -Uri https://management.azure.com/subscriptions/<SUBSCRIPTION-ID>/resourceGroups/<RESOURCE-GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE-ACCOUNT>/listKeys/?api-version=2016-12-01 -Method POST -Headers @{Authorization="Bearer $ARMToken"}

Observação

A URL diferencia maiúsculas de minúsculas, portanto, certifique-se de usar letras maiúsculas e minúsculas exatamente da mesma forma que você usou anteriormente ao nomear o Grupo de Recursos, incluindo a letra maiúscula "G" em "resourceGroups".The URL is case-sensitive, so ensure you use the exact same case used earlier, when you named the Resource Group, including the uppercase "G" in "resourceGroups."

$keysContent = $keysResponse.Content | ConvertFrom-Json
$key = $keysContent.keys[0].value

Em seguida, criamos um arquivo chamado "test.txt".Next we create a file called "test.txt". Em seguida, use a chave de acesso de armazenamento para autenticar com o cmdlet do New-AzStorageContent, carregar o arquivo em nosso contêiner de blob e então baixar o arquivo.Then use the storage access key to authenticate with the New-AzStorageContent cmdlet, upload the file to our blob container, then download the file.

echo "This is a test text file." > test.txt

Certifique-se instalar os cmdlets do Armazenamento do Azure primeiro, usando Install-Module Az.Storage.Be sure to install the Azure Storage cmdlets first, using Install-Module Az.Storage. Então carregue o blob recém-criado usando o cmdlet do PowerShell Set-AzStorageBlobContent:Then upload the blob you just created, using the Set-AzStorageBlobContent PowerShell cmdlet:

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

Resposta:Response:

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

Você também pode baixar o blob que acabou de criar, usando o cmdlet do PowerShell Get-AzStorageBlobContent:You can also download the blob you just uploaded, using the Get-AzStorageBlobContent PowerShell cmdlet:

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

Resposta:Response:

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

Próximas etapasNext steps

Neste tutorial, você aprendeu a criar uma identidade gerenciada atribuída pelo sistema para acessar o Armazenamento do Azure usando uma chave de acesso.In this tutorial, you learned how to create a system-assigned managed identity to access Azure Storage using an access key. Para saber mais sobre as chaves de acesso de Armazenamento do Azure, confira:To learn more about Azure Storage access keys see: