Compartilhar via


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

Aplicativos ou processos em execução diretamente em um servidor habilitado para o Azure Arc podem usar identidades gerenciadas para acessar outros recursos do Azure que dão suporte à 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, você aprenderá como um servidor pode usar uma identidade gerenciada atribuída pelo sistema para acessar o Azure Key Vault. O Key Vault possibilita que o aplicativo cliente use um 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

Várias ações ocorrem ao integrar seu servidor aos servidores habilitados para o Azure Arc para configuração 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 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 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, 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 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:

Uma recuperação bem-sucedida do token de acesso usando o 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:

Uma recuperação bem-sucedida do token de acesso usando o 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