Tutorial: Use uma identidade gerenciada atribuída pelo sistema VM do Windows para acessar o Armazenamento do Microsoft Azure por meio de uma credencial SAS
Identidades gerenciadas para recursos do Azure é um recurso do Microsoft Entra ID. 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. Não deixe de examinar o status de disponibilidade das identidades gerenciadas do seu recurso e os problemas conhecidos antes de começar.
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. Especificamente, uma credencial SAS de serviço.
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. Você pode usar a credencial SAS normalmente ao realizar operações de armazenamento, por exemplo, ao usar o SDK de Armazenamento. Para este tutorial, vamos demonstrar o upload e o download de um blob usando o PowerShell do Armazenamento do Azure. Você saberá como:
- Criar uma conta de armazenamento
- Conceda à sua VM acesso a SAS de conta de armazenamento no Resource Manager
- Obter um token de acesso usando a identidade da VM e usá-lo para recuperar SAS do Resource Manager
Pré-requisitos
- Conhecimento sobre Identidades Gerenciadas. Se você não estiver familiarizado com as identidades gerenciadas para funcionalidades de recursos do Azure, veja esta visão geral.
- Uma conta do Azure, inscreva-se em uma conta gratuita.
- Permissões de "Proprietário" no escopo apropriado (sua assinatura ou grupo de recursos) para executar a criação de recursos e o gerenciamento de função necessários. Se precisar de ajuda com a atribuição de função, confira Atribuir funções do Azure para gerenciar o acesso aos recursos de assinatura do Azure.
- Você também precisa de uma máquina virtual do Windows com identidades gerenciadas atribuídas ao sistema habilitadas.
- Se for necessário criar uma máquina virtual para este tutorial, siga o artigo intitulado Criar uma máquina virtual com a identidade atribuída pelo sistema habilitada
Observação
Recomendamos que você use o módulo Az PowerShell do Azure para interagir com o Azure. Confira Instalar o Azure PowerShell para começar. Para saber como migrar para o módulo Az PowerShell, confira Migrar o Azure PowerShell do AzureRM para o Az.
Criar uma conta de armazenamento
Se você ainda não tiver uma, agora você criará uma conta de armazenamento. 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.
Selecione o botão +/Criar novo serviço localizado no canto superior esquerdo do portal do Azure.
Selecione Armazenamento, em seguida, Conta de armazenamento, e um novo painel "Criar conta de armazenamento" será exibido.
Insira um nome para a conta de armazenamento que você está usando neste tutorial.
Modelo de implantação e Tipo de conta devem ser definidos como "Resource Manager" e "Uso geral", respectivamente.
Verifique se a Assinatura e o Grupo de Recursos correspondem ao que você especificou quando criou sua VM na etapa anterior.
Selecione Criar.
Criar um contêiner de blobs na conta de armazenamento
Mais tarde vamos carregar e baixar um arquivo para a nova conta de armazenamento. Como arquivos exigem armazenamento de blobs, é preciso criar um contêiner de blobs para armazenar o arquivo.
Navegue de volta para sua conta de armazenamento criado recentemente.
Selecione o link Contêineres no painel esquerdo, em "serviço Blob."
Selecione + Contêiner na parte superior da página e um painel "Novo contêiner" desliza para fora.
Dê um nome ao contêiner, selecione um nível de acesso e escolha OK. O nome especificado será usado posteriormente no tutorial.
Conceder à identidade gerenciada atribuída pelo sistema da VM acesso para usar um SAS de armazenamento
O Armazenamento do Azure não dá suporte nativo à autenticação do Microsoft Entra. 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. Nesta etapa, você concede o acesso à identidade gerenciada atribuída pelo sistema da VM à sua conta de armazenamento SAS.
Navegue de volta para sua conta de armazenamento criado recentemente.
Selecione IAM (Controle de acesso) .
Selecione Adicionar>Adicionar atribuição de função para abrir a página Adicionar atribuição de função.
Atribua a função a seguir. Para ver as etapas detalhadas, confira Atribuir funções do Azure usando o portal do Azure.
Configuração Valor Função Colaborador da Conta de Armazenamento Atribuir acesso a Identidade gerenciada Atribuída pelo sistema Máquina Virtual Selecionar <sua máquina virtual do Windows>
Obter um token de acesso usando a identidade da máquina virtual e usá-la para chamar o Azure Resource Manager
Para o restante do tutorial, trabalharemos na sua VM.
Você precisará usar os cmdlets do PowerShell do Azure Resource Manager nesta parte. Se ele não estiver instalado, baixe a versão mais recente antes de continuar.
No portal do Azure, navegue até Máquinas Virtuais, acesse sua máquina virtual do Windows e, na página Visão geral, selecione Conectar na parte superior.
Insira o seu Nome de usuário e Senha que você adicionou quando criou a VM do Windows.
Agora você criou uma Conexão de Área de Trabalho Remota com a máquina virtual.
Abra o PowerShell na sessão remota e use 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"}
Observação
O valor do parâmetro “resource” precisa ser uma correspondência exata do que é esperado pela ID do Microsoft Entra. Ao usar a ID de recurso do Azure Resource Manager, você deve incluir a barra à direita no 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.
$content = $response.Content | ConvertFrom-Json
Em seguida, extraia o token de acesso da resposta.
$ArmToken = $content.access_token
Obter uma credencial SAS do Azure Resource Manager para fazer chamadas de armazenamento
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. Quando tivermos a credencial SAS, poderemos chamar as operações de armazenamento.
Para esta solicitação, usaremos 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.
}
Esses parâmetros são incluídos no corpo da POSTAGEM da solicitação para a credencial SAS. 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.
Primeiro, converta os parâmetros em JSON e, em seguida, chame o ponto de extremidade listServiceSas
de armazenamento 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"}
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".
Agora podemos pode extrair a credencial SAS da resposta:
$sasContent = $sasResponse.Content | ConvertFrom-Json
$sasCred = $sasContent.serviceSasToken
Se você inspecionar as credenciais 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
Em seguida, criamos um arquivo chamado "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.
echo "This is a test text file." > test.txt
Certifique-se instalar os cmdlets do Armazenamento do Azure primeiro, usando Install-Module Azure.Storage
. Então carregue o blob recém-criado 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
Você também pode baixar o blob que carregou, usando o cmdlet do PowerShell Get-AzStorageBlobContent
:
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
Próximas etapas
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. Para saber mais sobre SAS de Armazenamento do Azure, confira: