Autenticar em recursos do Azure com servidores habilitados para Azure Arc
Aplicativos ou processos executados diretamente em um servidor habilitado para Azure Arc podem usar identidades gerenciadas para acessar outros recursos do Azure que dão suporte à autenticação baseada em ID do Microsoft Entra. Um aplicativo pode obter um token de acesso que representa sua identidade, que é atribuído pelo sistema para servidores habilitados para Azure Arc, e usá-lo como um token de "portador" para autenticar-se em outro serviço.
Consulte a documentação de visão geral da identidade gerenciada para obter uma descrição detalhada das identidades gerenciadas e entenda a distinção entre identidades atribuídas pelo sistema e atribuídas pelo usuário.
Neste artigo, você aprenderá como um servidor pode usar uma identidade gerenciada atribuída pelo sistema para acessar o Cofre da Chave do Azure. O Key Vault possibilita que seu aplicativo cliente use um segredo para acessar recursos não protegidos pela ID do Microsoft Entra. Por exemplo, os certificados TLS/SSL usados pelos servidores Web do IIS podem ser armazenados no Cofre de Chaves do Azure e implantar com segurança os certificados em servidores Windows ou Linux fora do Azure.
Vista geral da segurança
Várias ações ocorrem ao integrar seu servidor a servidores habilitados para Azure Arc para configurar usando uma identidade gerenciada (semelhante ao que acontece com uma VM do Azure):
O Azure Resource Manager recebe uma solicitação para habilitar a identidade gerenciada atribuída ao sistema no servidor habilitado para Azure Arc.
O Azure Resource Manager cria uma entidade de serviço no Microsoft Entra ID para a identidade do servidor. A entidade de serviço é criada no locatário do Microsoft Entra confiável pela assinatura.
O Azure Resource Manager configura a identidade no servidor atualizando o ponto de extremidade de identidade do IMDS (Serviço de Metadados de Instância do Azure) para Windows ou Linux com a ID do cliente principal de serviço e o certificado. O ponto de extremidade é um ponto de extremidade REST acessível somente de dentro do servidor usando um endereço IP conhecido e não roteável. Este serviço fornece um subconjunto de informações de metadados sobre o servidor habilitado para Arco do Azure para ajudar a gerenciá-lo e configurá-lo.
O ambiente de um servidor habilitado para identidade gerenciada é configurado com as seguintes variáveis em um servidor habilitado para ArcGIS do Azure:
IMDS_ENDPOINT: O endereço
http://localhost:40342
IP do ponto de extremidade IMDS para servidores habilitados para Azure Arc.IDENTITY_ENDPOINT: o ponto de extremidade localhost correspondente à identidade
http://localhost:40342/metadata/identity/oauth2/token
gerenciada do serviço.
Seu código que está sendo executado no servidor pode solicitar um token do ponto de extremidade do serviço de Metadados de Instância do Azure, acessível somente de dentro do servidor.
A variável de ambiente do sistema IDENTITY_ENDPOINT é usada para descobrir o ponto de extremidade de identidade por aplicativos. Os aplicativos devem tentar recuperar IDENTITY_ENDPOINT e IMDS_ENDPOINT valores e usá-los. Aplicativos com qualquer nível de acesso podem fazer solicitações aos endpoints. As respostas de metadados são tratadas normalmente e dadas a qualquer processo na máquina. No entanto, quando é feita uma solicitação que exporia um token, exigimos que o cliente forneça um segredo para atestar que ele é capaz de acessar dados disponíveis apenas para usuários com privilégios mais altos.
Pré-requisitos
Uma compreensão das identidades gerenciadas.
No Windows, você deve ser membro do grupo Administradores local ou do grupo Aplicativos de Extensão de Agente Híbrido.
No Linux, você deve ser um membro do grupo himds .
Um servidor conectado e registrado com servidores habilitados para Azure Arc.
Você é membro do grupo Proprietário na assinatura ou no grupo de recursos (para executar as etapas necessárias de criação de recursos e gerenciamento de funções).
Um Cofre da Chave do Azure para armazenar e recuperar sua credencial e atribuir o acesso à identidade do Azure Arc ao KeyVault.
- Se não tiver um Cofre de Chaves criado, consulte Criar Cofre de Chaves.
- Para configurar o acesso pela identidade gerenciada usada pelo servidor, consulte Conceder acesso para Linux ou Conceder acesso para Windows. Para a etapa número 5, você vai inserir o nome do servidor habilitado para Arco do Azure. Para concluir isso usando o PowerShell, consulte Atribuir uma política de acesso usando o PowerShell.
Adquirindo um token de acesso usando a API REST
O método para obter e usar uma identidade gerenciada atribuída ao sistema para autenticar com recursos do Azure é semelhante à forma como é executado com uma VM do Azure.
Para um servidor Windows habilitado para Azure Arc, usando o PowerShell, invoque a solicitação da Web para obter o token do host local na porta específica. Especifique a solicitação usando o endereço IP ou a variável ambiental IDENTITY_ENDPOINT.
$apiVersion = "2020-06-01"
$resource = "https://management.azure.com/"
$endpoint = "{0}?resource={1}&api-version={2}" -f $env:IDENTITY_ENDPOINT,$resource,$apiVersion
$secretFile = ""
try
{
Invoke-WebRequest -Method GET -Uri $endpoint -Headers @{Metadata='True'} -UseBasicParsing
}
catch
{
$wwwAuthHeader = $_.Exception.Response.Headers["WWW-Authenticate"]
if ($wwwAuthHeader -match "Basic realm=.+")
{
$secretFile = ($wwwAuthHeader -split "Basic realm=")[1]
}
}
Write-Host "Secret file path: " $secretFile`n
$secret = cat -Raw $secretFile
$response = Invoke-WebRequest -Method GET -Uri $endpoint -Headers @{Metadata='True'; Authorization="Basic $secret"} -UseBasicParsing
if ($response)
{
$token = (ConvertFrom-Json -InputObject $response.Content).access_token
Write-Host "Access token: " $token
}
A resposta a seguir é um exemplo que é retornado:
Para um servidor Linux habilitado para Azure Arc, usando Bash, você invoca a solicitação da Web para obter o token do host local na porta específica. Especifique a seguinte solicitação usando o endereço IP ou a variável ambiental IDENTITY_ENDPOINT. Para concluir esta etapa, você precisa de um cliente SSH.
CHALLENGE_TOKEN_PATH=$(curl -s -D - -H Metadata:true "http://127.0.0.1:40342/metadata/identity/oauth2/token?api-version=2019-11-01&resource=https%3A%2F%2Fmanagement.azure.com" | grep Www-Authenticate | cut -d "=" -f 2 | tr -d "[:cntrl:]")
CHALLENGE_TOKEN=$(cat $CHALLENGE_TOKEN_PATH)
if [ $? -ne 0 ]; then
echo "Could not retrieve challenge token, double check that this command is run with root privileges."
else
curl -s -H Metadata:true -H "Authorization: Basic $CHALLENGE_TOKEN" "http://127.0.0.1:40342/metadata/identity/oauth2/token?api-version=2019-11-01&resource=https%3A%2F%2Fmanagement.azure.com"
fi
A resposta a seguir é um exemplo que é retornado:
A resposta inclui o token de acesso de que você precisa para acessar qualquer recurso no Azure. Para concluir a configuração para autenticar no Cofre da Chave do Azure, consulte Cofre da Chave de Acesso com Windows ou Cofre da Chave de Acesso com Linux.
Próximos passos
Para saber mais sobre o Cofre da Chave do Azure, consulte Visão geral do Cofre da Chave.
Saiba como atribuir um acesso de identidade gerenciada a um recurso usando o PowerShell ou a CLI do Azure.