Autenticação em recursos do Azure com servidores habilitados para Azure Arc

Aplicativos ou processos em execução diretamente em servidores habilitados para o Azure Arc podem usar identidades gerenciadas para acessar outros recursos do Azure que aceitam a autenticação baseada no Microsoft Entra ID. Um aplicativo pode obter um token de acesso que é atribuído pelo sistema para servidores habilitados para o Azure Arc a fim de representar a identidade dele, usando-o como token de "portador" para a autenticação em outro serviço.

Confira a documentação de visão geral da identidade gerenciada para obter uma descrição detalhada das identidades gerenciadas e para entender a distinção entre as identidades atribuídas pelo sistema e pelo usuário.

Neste artigo, mostramos como um servidor pode usar uma identidade gerenciada atribuída pelo sistema para acessar o Azure Key Vault. Atuando como uma inicialização, o Key Vault possibilita que o aplicativo cliente use o segredo para acessar recursos não protegidos pelo Microsoft Entra ID. Por exemplo, certificados TLS/SSL usados por seus servidores Web do IIS podem ser armazenados no Azure Key Vault e implantar com segurança os certificados em servidores Windows ou Linux fora do Azure.

Visão geral da segurança

Ao integrar seu servidor aos servidores habilitados para Azure Arc, várias ações de configuração são realizadas usando uma identidade gerenciada, semelhante ao que é feito em uma VM do Azure:

  • O Azure Resource Manager recebe uma solicitação para habilitar a identidade gerenciada atribuída pelo sistema no servidor habilitado para o 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 ID confiado pela assinatura.

  • O Azure Resource Manager configura a identidade no servidor atualizando o ponto de extremidade de identidade do Serviço de Metadados de Instância do Azure para Windows ou Linux com e a ID do cliente principal do serviço e o certificado. O ponto de extremidade é REST, acessível somente de dentro do servidor, usando um endereço IP bem conhecido e não roteável. Esse serviço fornece um subconjunto de informações de metadados sobre o servidor habilitado para o Azure Arc a fim de ajudar você 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 Windows habilitado para o Azure Arc:

  • IMDS_ENDPOINT: o endereço IP do ponto de extremidade IMDS http://localhost:40342 para servidores habilitados para o Azure Arc.

  • IDENTITY_ENDPOINT: o ponto de extremidade de localhost correspondente à identidade gerenciada do serviço http://localhost:40342/metadata/identity/oauth2/token.

O código em execução no servidor pode solicitar um token do ponto de extremidade de serviço de Metadados de Instância do Azure, acessível somente no 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 os valores IDENTITY_ENDPOINT e IMDS_ENDPOINT e usá-los. Aplicativos com qualquer nível de acesso têm permissão para fazer solicitações nos pontos de extremidade. As respostas dos metadados são tratadas como normais e enviadas a qualquer processo no computador. No entanto, diante de uma solicitação que poderia expor um token, exigimos que o cliente forneça um segredo para atestar que ele consegue acessar os dados disponíveis somente para usuários com privilégios elevados.

Pré-requisitos

  • Conhecimento sobre Identidades Gerenciadas.

  • No Windows, você deve ser membro do grupo local de Administradores ou do grupo de Aplicativos de extensão de agente híbrido.

  • No Linux, você deve ser membro do grupo himds.

  • Um servidor conectado e registrado em servidores habilitados para o Azure Arc.

  • Você é membro do grupo Proprietário na assinatura ou no grupo de recursos, para realizar as etapas necessárias de criação de recursos e gerenciamento de funções.

  • Um Azure Key Vault para armazenar e recuperar suas credenciais e atribuir o acesso de identidade do Azure Arc ao KeyVault.

Como adquirir um token de acesso usando a API REST

O método para obter e usar uma identidade gerenciada atribuída pelo sistema para fazer a autenticação com recursos do Azure é semelhante à forma como ele é executado com uma VM do Azure.

Para um servidor Windows habilitado para o 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 de ambiente 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 costuma retornar:

A successful retrieval of the access token using PowerShell.

Para um servidor Linux habilitado para o Azure Arc, usando o Bash, você invoca a solicitação da Web para obter o token do host local na porta específica. Especifique a solicitação a seguir usando o endereço IP ou a variável de ambiente 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 costuma retornar:

A successful retrieval of the access token using Bash.

A resposta inclui o token de acesso necessário para acessar qualquer recurso no Azure. Para concluir a configuração para autenticar no Azure Key Vault, consulte Acessar Key Vault com o Windows ou Acessar Key Vault com o Linux.

Próximas etapas