Autenticar em recursos do Azure com servidores habilitados para Azure Arc

Aplicativos ou processos executados diretamente em servidores habilitados para Azure Arc podem usar identidades gerenciadas para acessar outros recursos do Azure que oferecem 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, mostramos como um servidor pode usar uma identidade gerenciada atribuída pelo sistema para acessar o Cofre de Chaves do Azure. Servindo como um bootstrap, o Key Vault possibilita que seu aplicativo cliente use um segredo para acessar recursos não protegidos pelo Microsoft Entra ID. Por exemplo, os certificados TLS/SSL usados pelos servidores Web do IIS podem ser armazenados no Cofre da Chave do Azure e implantar os certificados com segurança em servidores Windows ou Linux fora do Azure.

Vista geral da segurança

Ao integrar seu servidor aos servidores habilitados para Azure Arc, várias ações são executadas para configurar usando uma identidade gerenciada, semelhante ao que é executado para 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 do 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 será configurado com as seguintes variáveis em um servidor habilitado para Windows Azure Arc:

  • 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/tokengerenciada 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 local Administradores 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.

Adquirindo um token de acesso usando a API REST

O método para obter e usar uma identidade gerenciada atribuída pelo 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, você invoca 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:

A successful retrieval of the access token using PowerShell.

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 successful retrieval of the access token using Bash.

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 de Chaves do Azure, consulte Visão geral do Cofre de Chaves.

  • Saiba como atribuir um acesso de identidade gerenciada a um recurso usando o PowerShell ou a CLI do Azure.