Tutorial: Usar uma identidade atribuída pelo sistema da VM do Linux para acessar o Armazenamento do Azure por meio de uma credencial SASTutorial: Use a Linux VM system-assigned 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 gerenciada atribuída pelo sistema de uma VM (máquina virtual) do Linux para obter uma credencial SAS (Assinatura de Acesso Compartilhado) de armazenamento.This tutorial shows you how to use a system-assigned managed identity for a Linux virtual machine (VM) to obtain a storage Shared Access Signature (SAS) credential. Especificamente, uma credencial SAS de serviço.Specifically, a Service SAS credential.

Observação

A chave SAS gerada neste tutorial não será restrita/limitada à VM.The SAS key generated in this tutorial will not be restricted/bound to the VM.

Uma SAS de Serviço permite conceder acesso limitado a objetos em uma conta de armazenamento por um 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 a 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 a CLI do Armazenamento do Azure.For this tutorial, we demonstrate uploading and downloading a blob using Azure Storage CLI. Você saberá como:You will learn how to:

  • Criar uma conta de armazenamentoCreate a storage account
  • Criar um contêiner de blobs na conta de armazenamentoCreate a blob container in the 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

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 acesso de identidade gerenciada atribuída pelo sistema da VM às chaves de uma conta de armazenamento existente.You can also skip this step and grant your VM 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 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 sua identidade gerenciada atribuída pelo sistema da VM para recuperar uma SAS de armazenamento do Resource Manager e usar a SAS para acessar o armazenamento.However, you can use your VM's system-assigned managed identity to retrieve a storage SAS from the 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 Linux no menu suspenso e clique em Salvar.Finally, under Select choose your Linux 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.

Para concluir essas etapas, você precisará de cliente SSH.To complete these steps, you will need an SSH client. Se você estiver usando o Windows, poderá usar o cliente SSH no Subsistema do Windows para Linux.If you are using Windows, you can use the SSH client in the Windows Subsystem for Linux. Se precisar de ajuda para configurar as chaves do cliente SSH, confira Como usar chaves SSH com o Windows no Azure, ou Como criar e usar um par de chaves SSH pública e privada para VMs Linux no Azure.If you need assistance configuring your SSH client's keys, see How to Use SSH keys with Windows on Azure, or How to create and use an SSH public and private key pair for Linux VMs in Azure.

  1. No portal do Azure, navegue até Máquinas Virtuais, vá para a máquina virtual do Linux e na página Visão geral, clique em Conectar na parte superior.In the Azure portal, navigate to Virtual Machines, go to your Linux virtual machine, then from the Overview page click Connect at the top. Copie a cadeia de caracteres para conectar-se à VM.Copy the string to connect to your VM.

  2. Conecte-se à VM usando um cliente SSH.Connect to your VM using your SSH client.

  3. Em seguida, você receberá uma solicitação para inserir sua Senha, adicionada durante a criação da VM do Linux.Next, you will be prompted to enter in your Password you added when creating the Linux VM. Assim, você deve se conectar com êxito.You should then be successfully signed in.

  4. Use o CURL para obter um token de acesso para o Azure Resource Manager.Use CURL to get an access token for Azure Resource Manager.

    A solicitação CURL e a resposta para o token de acesso está abaixo:The CURL request and response for the access token is below:

    curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F' -H Metadata:true    
    

    Observação

    Na solicitação anterior, o valor do parâmetro "resource" deve ser uma correspondência exata do que é esperado pelo Azure AD.In the previous request, 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. Na resposta seguinte, o elemento access_token foi reduzido para fins de brevidade.In the following response, the access_token element as been shortened for brevity.

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

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 a CURL para chamar o Resource Manager usando o token de acesso recuperado da seção anterior para criar uma credencial SAS de armazenamento.Now use CURL to call Resource Manager using the access token we retrieved in the previous section, to create a storage SAS credential. Assim que tivermos a credencial SAS, poderemos chamar operações de upload/download de armazenamento.Once we have the SAS credential, we can call storage upload/download 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.

Use a seguinte solicitação CURL para obter a credencial SAS.Use the following CURL request to get the SAS credential. Substitua os valores dos parâmetros <SUBSCRIPTION ID>, <RESOURCE GROUP>, <STORAGE ACCOUNT NAME>, <CONTAINER NAME> e <EXPIRATION TIME> pelos seus próprios valores.Be sure to replace the <SUBSCRIPTION ID>, <RESOURCE GROUP>, <STORAGE ACCOUNT NAME>, <CONTAINER NAME>, and <EXPIRATION TIME> parameter values with your own values. Substitua o valor <ACCESS TOKEN> pelo token de acesso que você recuperou anteriormente:Replace the <ACCESS TOKEN> value with the access token you retrieved earlier:

curl https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE ACCOUNT NAME>/listServiceSas/?api-version=2017-06-01 -X POST -d "{\"canonicalizedResource\":\"/blob/<STORAGE ACCOUNT NAME>/<CONTAINER NAME>\",\"signedResource\":\"c\",\"signedPermission\":\"rcw\",\"signedProtocol\":\"https\",\"signedExpiry\":\"<EXPIRATION TIME>\"}" -H "Authorization: Bearer <ACCESS TOKEN>"

Observação

O texto na URL anterior diferencia maiúsculas de minúsculas, portanto, verifique se você está usando letras maiúsculas e minúsculas para os Grupos de Recursos refletirem-nas adequadamente.The text in the prior URL is case sensitive, so ensure if you are using upper-lowercase for your Resource Groups to reflect it accordingly. Além disso, é importante saber que se trata de uma solicitação POST, não de uma solicitação GET.Additionally, it’s important to know that this is a POST request not a GET request.

A resposta de CURL retorna a credencial SAS:The CURL response returns the SAS credential:

{"serviceSasToken":"sv=2015-04-05&sr=c&spr=https&st=2017-09-22T00%3A10%3A00Z&se=2017-09-22T02%3A00%3A00Z&sp=rcw&sig=QcVwljccgWcNMbe9roAJbD8J5oEkYoq%2F0cUPlgriBn0%3D"} 

Crie um arquivo de blob de exemplo para carregar o contêiner de armazenamento de blobs.Create a sample blob file to upload to your blob storage container. Em uma VM do Linux, você pode fazer isso com o seguinte comando.On a Linux VM you can do this with the following command.

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

Em seguida, autentique com o comando az storage da CLI usando a credencial SAS e carregue o arquivo para o contêiner de blob.Next, authenticate with the CLI az storage command using the SAS credential, and upload the file to the blob container. Nesta etapa, você precisará instalar a CLI do Azure mais recente na sua VM, se ainda não o fez.For this step, you will need to install the latest Azure CLI on your VM, if you haven't already.

 az storage blob upload --container-name 
                        --file 
                        --name
                        --account-name 
                        --sas-token

Resposta:Response:

Finished[#############################################################]  100.0000%
{
  "etag": "\"0x8D4F9929765C139\"",
  "lastModified": "2017-09-21T03:58:56+00:00"
}

Além disso, baixe o arquivo usando a CLI do Azure e autentique com a credencial SAS.Additionally, you can download the file using the Azure CLI and authenticating with the SAS credential.

Solicitação:Request:

az storage blob download --container-name
                         --file 
                         --name 
                         --account-name
                         --sas-token

Resposta:Response:

{
  "content": null,
  "metadata": {},
  "name": "testblob",
  "properties": {
    "appendBlobCommittedBlockCount": null,
    "blobType": "BlockBlob",
    "contentLength": 16,
    "contentRange": "bytes 0-15/16",
    "contentSettings": {
      "cacheControl": null,
      "contentDisposition": null,
      "contentEncoding": null,
      "contentLanguage": null,
      "contentMd5": "Aryr///Rb+D8JQ8IytleDA==",
      "contentType": "text/plain"
    },
    "copy": {
      "completionTime": null,
      "id": null,
      "progress": null,
      "source": null,
      "status": null,
      "statusDescription": null
    },
    "etag": "\"0x8D4F9929765C139\"",
    "lastModified": "2017-09-21T03:58:56+00:00",
    "lease": {
      "duration": null,
      "state": "available",
      "status": "unlocked"
    },
    "pageBlobSequenceNumber": null,
    "serverEncrypted": false
  },
  "snapshot": null
}

Próximas etapasNext steps

Neste tutorial, você aprendeu a usar a identidade gerenciada atribuída pelo sistema de uma VM do Linux para acessar o Armazenamento do Azure usando uma credencial SAS.In this tutorial, you learned how to use a Linux VM 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: