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

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 atribuída pelo sistema para uma máquina virtual do Windows (VM) para obter uma credencial SAS (Storage Access Signature) de armazenamento.This tutorial shows you how to use a system-assigned identity for a Windows virtual machine (VM) to obtain a storage Shared Access Signature (SAS) credential. Especificamente, uma credencial SAS de serviço.Specifically, a Service SAS credential.

Uma SAS de Serviço permite conceder acesso limitado a objetos em uma conta de armazenamento por tempo limitado e para um serviço específico (em nosso caso, o serviço blob) sem expor uma chave de acesso de conta.A Service SAS provides the ability to grant limited access to objects in a storage account, for limited time and a specific service (in our case, the blob service), without exposing an account access key. Você pode usar a credencial SAS normalmente ao realizar operações de armazenamento, por exemplo, ao usar o SDK de Armazenamento.You can use a SAS credential as usual when doing storage operations, for example when using the Storage SDK. Para este tutorial, vamos demonstrar o upload e o download de um blob usando o PowerShell do Armazenamento do Azure.For this tutorial, we demonstrate uploading and downloading a blob using Azure Storage PowerShell. Você saberá como:You will learn how to:

  • Criar uma conta de armazenamentoCreate a storage account
  • Conceda à sua VM acesso a SAS de conta de armazenamento no Resource ManagerGrant your VM access to a storage account SAS in Resource Manager
  • Obter um token de acesso usando a identidade da VM e usá-lo para recuperar SAS do Resource ManagerGet an access token using your VM's identity, and use it to retrieve the SAS 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 pular esta etapa e conceder acesso de identidade gerenciada atribuído pelo sistema da VM à credencial SAS de uma conta de armazenamento existente.You can also skip this step and grant your VM's system-assigned managed identity access to the SAS credential 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 no painel à esquerda, em "Serviço Blob".Click the Containers link in the left panel, 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 à identidade gerenciada atribuída pelo sistema da VM acesso para usar um SAS de armazenamentoGrant your VM's system-assigned managed identity access to use a storage SAS

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 uma identidade gerenciada para recuperar um SAS de armazenamento do Resource Manager e usar o SAS para acessar o armazenamento.However, you can use a managed identity to retrieve a storage SAS from Resource Manager, then use the SAS to access storage. Nesta etapa, você concede o acesso à identidade gerenciada atribuída pelo sistema da VM à sua conta de armazenamento SAS.In this step, you grant your VM's system-assigned managed identity access to your storage account SAS.

  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 "Colaborador da Conta de Armazenamento" no lado direito da página.Set Role to "Storage Account Contributor", 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 da máquina virtual e usá-la para chamar o Azure Resource ManagerGet an access token using the VM's identity and use it 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 uma credencial SAS do Azure Resource Manager para fazer chamadas de armazenamentoGet a SAS credential from Azure Resource Manager to make storage calls

Agora use o PowerShell para chamar o Resource Manager usando o token de acesso recuperado da seção anterior para criar uma credencial SAS de armazenamento.Now use PowerShell to call Resource Manager using the access token we retrieved in the previous section, to create a storage SAS credential. Quando tivermos a credencial SAS, poderemos chamar as operações de armazenamento.Once we have the SAS credential, we can call storage operations.

Para esta solicitação, vamos usar os parâmetros de solicitação HTTP a seguir para criar a credencial SAS:For this request we'll use the follow HTTP request parameters to create the SAS credential:

{
    "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.
}

Esses parâmetros são incluídos no corpo da POSTAGEM da solicitação para a credencial SAS.These parameters are included in the POST body of the request for the SAS credential. 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.For more information on the parameters for creating a SAS credential, see the List Service SAS REST reference.

Primeiro, converta os parâmetros em JSON e, em seguida, chame o ponto de extremidade listServiceSas de armazenamento para criar a credencial SAS:First, convert the parameters to JSON, then call the storage listServiceSas endpoint to create the SAS credential:

$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

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

Agora podemos pode extrair a credencial SAS da resposta:Now we can extract the SAS credential from the response:

$sasContent = $sasResponse.Content | ConvertFrom-Json
$sasCred = $sasContent.serviceSasToken

Se você inspecionar as credenciais SAS, verá algo assim:If you inspect the SAS cred you'll see something like this:

PS C:\> $sasCred
sv=2015-04-05&sr=c&spr=https&se=2017-09-23T00%3A00%3A00Z&sp=rcw&sig=JVhIWG48nmxqhTIuN0uiFBppdzhwHdehdYan1W%2F4O0E%3D

Em seguida, criamos um arquivo chamado "test.txt".Next we create a file called "test.txt". Em seguida, use a credencial SAS para autenticar-se com o cmdlet New-AzStorageContent, carregar o arquivo para nosso contêiner de blob e então baixar o arquivo.Then use the SAS credential 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 Azure.Storage.Be sure to install the Azure Storage cmdlets first, using Install-Module Azure.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-NAME> -SasToken $sasCred
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/21/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/21/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 usar a identidade gerenciada atribuída pelo sistema de uma VM do Windows para acessar o Armazenamento do Azure usando uma credencial SAS.In this tutorial, you learned how to use a Windows VM's system-assigned managed identity to access Azure Storage using a SAS credential. Para saber mais sobre SAS de Armazenamento do Azure, confira:To learn more about Azure Storage SAS see: