Eseguire l'autenticazione con le risorse di Azure con i server abilitati per Azure Arc

Le applicazioni o i processi in esecuzione direttamente in server abilitati per Azure Arc possono usare identità gestite per accedere ad altre risorse di Azure che supportano l'autenticazione basata su ID Di Microsoft Entra. Un'applicazione può ottenere un token di accesso che rappresenta la propria identità, assegnata dal sistema per i server abilitati per Azure Arc e usarla come token di connessione per autenticarsi in un altro servizio.

Per una descrizione dettagliata delle identità gestite, vedere la documentazione sulla panoramica delle identità gestite e comprendere la distinzione tra identità assegnate dal sistema e identità assegnate dall'utente.

In questo articolo viene illustrato come un server può usare un'identità gestita assegnata dal sistema per accedere ad Azure Key Vault. Fungendo da bootstrap, Key Vault consente all'applicazione client di usare quindi un segreto per accedere alle risorse non protette dall'ID Microsoft Entra. Ad esempio, i certificati TLS/SSL usati dai server Web IIS possono essere archiviati in Azure Key Vault e distribuire in modo sicuro i certificati nei server Windows o Linux all'esterno di Azure.

Panoramica della sicurezza

Durante l'onboarding del server nei server abilitati per Azure Arc, vengono eseguite diverse azioni per configurare usando un'identità gestita, analogamente a quanto avviene per una macchina virtuale di Azure:

  • Azure Resource Manager riceve una richiesta per abilitare l'identità gestita assegnata dal sistema nel server abilitato per Azure Arc.

  • Azure Resource Manager crea un'entità servizio in Microsoft Entra ID per l'identità del server. L'entità servizio viene creata nel tenant di Microsoft Entra considerato attendibile dalla sottoscrizione.

  • Azure Resource Manager configura l'identità nel server aggiornando l'endpoint di identità del servizio metadati dell'istanza di Azure per Windows o Linux con l'ID client e il certificato dell'entità servizio. L'endpoint è un endpoint REST accessibile solo dall'interno del server usando un indirizzo IP noto e non instradabile. Questo servizio fornisce un subset di informazioni sui metadati sul server abilitato per Azure Arc per facilitare la gestione e la configurazione.

L'ambiente di un server abilitato per l'identità gestita verrà configurato con le variabili seguenti in un server abilitato per Windows Azure Arc:

  • IMDS_ENDPOINT: indirizzo http://localhost:40342 IP dell'endpoint IMDS per i server abilitati per Azure Arc.

  • IDENTITY_ENDPOINT: l'endpoint localhost corrispondente all'identità http://localhost:40342/metadata/identity/oauth2/tokengestita del servizio.

Il codice in esecuzione nel server può richiedere un token dall'endpoint del servizio metadati dell'istanza di Azure, accessibile solo dall'interno del server.

La variabile di ambiente di sistema IDENTITY_ENDPOINT viene usata per individuare l'endpoint di identità da parte delle applicazioni. Le applicazioni devono provare a recuperare IDENTITY_ENDPOINT e IMDS_ENDPOINT valori e usarli. Le applicazioni con qualsiasi livello di accesso possono effettuare richieste agli endpoint. Le risposte ai metadati vengono gestite normalmente e fornite a qualsiasi processo nel computer. Tuttavia, quando viene effettuata una richiesta che espone un token, è necessario che il client fornisca un segreto per attestare che sono in grado di accedere ai dati disponibili solo per gli utenti con privilegi più elevati.

Prerequisiti

  • Conoscenza delle identità gestite.

  • In Windows è necessario essere membri del gruppo locale Amministrazione istrators o del gruppo Hybrid Agent Extension Applications.

  • In Linux è necessario essere membri del gruppo himds .

  • Un server connesso e registrato con i server abilitati per Azure Arc.

  • Si è membri del gruppo Proprietario nella sottoscrizione o nel gruppo di risorse per eseguire i passaggi necessari per la creazione delle risorse e la gestione dei ruoli.

  • Un insieme di credenziali delle chiavi di Azure per archiviare e recuperare le credenziali e assegnare l'accesso all'identità di Azure Arc all'insieme di credenziali delle chiavi.

Acquisizione di un token di accesso tramite l'API REST

Il metodo per ottenere e usare un'identità gestita assegnata dal sistema per l'autenticazione con le risorse di Azure è simile alla modalità di esecuzione con una macchina virtuale di Azure.

Per un server Windows abilitato per Azure Arc, usando PowerShell, richiamare la richiesta Web per ottenere il token dall'host locale nella porta specifica. Specificare la richiesta usando l'indirizzo IP o la variabile di 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
}

La risposta seguente è un esempio restituito:

A successful retrieval of the access token using PowerShell.

Per un server Linux abilitato per Azure Arc, usando Bash, richiamare la richiesta Web per ottenere il token dall'host locale nella porta specifica. Specificare la richiesta seguente usando l'indirizzo IP o la variabile di ambiente IDENTITY_ENDPOINT. Per completare questo passaggio, è necessario un client 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 risposta seguente è un esempio restituito:

A successful retrieval of the access token using Bash.

La risposta include il token di accesso necessario per accedere a qualsiasi risorsa in Azure. Per completare la configurazione per l'autenticazione in Azure Key Vault, vedere Accedere a Key Vault con Windows o Accedere a Key Vault con Linux.

Passaggi successivi