Autenticación en recursos de Azure con servidores habilitados para Azure Arc

Las aplicaciones o los procesos que se ejecutan directamente en servidores habilitados para Azure Arc pueden usar las identidades administradas para acceder a otros recursos de Azure que admiten la autenticación basada en Microsoft Entra ID. Una aplicación puede obtener un token de acceso, que representa su identidad asignada por el sistema en servidores habilitados para Azure Arc, y usarlo como token de "portador" para autenticarse en otro servicio.

Consulte la documentación de información general sobre las identidades administradas para obtener una descripción detallada de las identidades administradas, así como comprender las identidades asignadas por el sistema y las asignadas por el usuario.

En este artículo se muestra cómo un servidor puede usar una identidad administrada asignada por el sistema para acceder a Azure Key Vault. Actuando como un arranque, Key Vault hace posible que la aplicación cliente use un secreto para acceder a recursos que no están protegidos por Microsoft Entra ID. Por ejemplo, los certificados TLS/SSL que los servidores web de IIS usan se pueden almacenar en Azure Key Vault y puede implementar de forma segura los certificados en servidores Windows o Linux fuera de Azure.

Introducción a la seguridad

Mientras el servidor se incorpora a los servidores habilitados para Azure Arc, se realizan varias acciones para configurar con mediante identidad administrada, similar a lo que se realiza para una máquina virtual de Azure:

  • Azure Resource Manager recibe una solicitud para habilitar la identidad administrada asignada por el sistema en el servidor habilitado para Azure Arc.

  • Azure Resource Manager crea una entidad de servicio en Microsoft Entra ID para la identidad del servidor. La entidad de servicio se crea en el inquilino de Microsoft Entra que sea de confianza para la suscripción.

  • Azure Resource Manager configura la identidad en el servidor mediante la actualización del punto de conexión de identidad de Azure Instance Metadata Service (IMDS) para Windows o Linux con el identificador de cliente y el certificado de la entidad de servicio. El punto de conexión es un punto de conexión de REST solamente accesible desde dentro del servidor mediante una dirección IP no enrutable conocida. Este servicio proporciona un subconjunto de información de metadatos sobre el servidor habilitado para Azure Arc que ayuda a administrarlo y configurarlo.

El entorno de un servidor habilitado para identidades administradas se configurará con las siguientes variables en un servidor habilitado para Azure Arc de Windows:

  • IMDS_ENDPOINT: la dirección IP del punto de conexión de IMDS http://localhost:40342 de los servidores habilitados para Azure Arc.

  • IDENTITY_ENDPOINT: el punto de conexión de localhost correspondiente a la identidad administrada del servicio http://localhost:40342/metadata/identity/oauth2/token.

El código que se ejecuta en el servidor puede solicitar un token del punto de conexión de Azure Instance Metadata Service, accesible únicamente desde dentro de dicho servidor.

La variable de entorno del sistema IDENTITY_ENDPOINT se usa para detectar el punto de conexión de identidad mediante aplicaciones. Las aplicaciones deben intentar recuperar los valores de IDENTITY_ENDPOINT e IMDS_ENDPOINT valores y usarlos. Las aplicaciones con cualquier nivel de acceso pueden realizar solicitudes a los puntos de conexión. Las respuestas de metadatos se tratan con normalidad y se entregan a cualquier proceso de la máquina. Sin embargo, cuando se realiza una solicitud que expondría un token, requerimos que el cliente proporcione un secreto para dar fe de que puede acceder a los datos que solo están disponibles para usuarios con mayores privilegios.

Requisitos previos

  • Conocimientos sobre identidades administradas.

  • En Windows, debe ser miembro del grupo local Administradores o del grupo Aplicaciones de la extensión de agente híbrido.

  • En Linux, debe ser miembro del grupo himds.

  • Un servidor conectado y registrado con servidores habilitados para Azure Arc.

  • Debe ser miembro del grupo Propietario en la suscripción o el grupo de recursos para crear los recursos necesarios y realizar los pasos de administración de roles.

  • Una instancia de Azure Key Vault para almacenar y recuperar la credencial y asignar el acceso de la identidad de Azure Arc a KeyVault.

Adquisición de un token de acceso mediante la API de REST

El método para obtener y usar una identidad administrada asignada por el sistema para autenticarse con recursos de Azure es similar a cómo se realiza con una máquina virtual de Azure.

En el caso de un servidor Windows habilitado para Azure Arc, use PowerShell para invocar la solicitud web y obtener el token del host local en el puerto específico. Especifique la solicitud mediante la dirección IP o la variable de entorno 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
}

La respuesta siguiente es un ejemplo que se devuelve:

A successful retrieval of the access token using PowerShell.

En el caso de un servidor Linux habilitado para Azure Arc, use Bash para invocar la solicitud web y obtener el token del host local en el puerto específico. Especifique la siguiente solicitud mediante la dirección IP o la variable de entorno IDENTITY_ENDPOINT. Para completar ese paso, necesita un 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

La respuesta siguiente es un ejemplo que se devuelve:

A successful retrieval of the access token using Bash.

La respuesta incluye el token de acceso que necesita para acceder a cualquier recurso de Azure. Para completar la configuración para autenticarse en Azure Key Vault, consulte Acceso a Key Vault con Windows o Acceso a Key Vault con Linux.

Pasos siguientes