Eseguire l'autenticazione con le risorse di Azure con i server abilitati per Azure Arc
Le applicazioni o i processi in esecuzione direttamente in un server abilitato per Azure Arc possono usare le 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.
Questo articolo illustra come un server può usare un'identità gestita assegnata dal sistema per accedere ad Azure Key Vault. Key Vault consente all'applicazione client di usare un segreto per accedere alle risorse non protette da Microsoft Entra ID. 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 sulla sicurezza
Durante l'onboarding del server nei server abilitati per Azure Arc vengono eseguite diverse azioni per configurare l'uso di un'identità gestita (analogamente a quanto accade 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 dell'identità del Servizio metadati dell'istanza (IMDS) 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 è configurato con le variabili seguenti in un server abilitato per Azure Arc:
IMDS_ENDPOINT: indirizzo IP dell'endpoint IMDS
http://localhost:40342
per i server abilitati per Azure Arc.IDENTITY_ENDPOINT: l'endpoint localhost corrispondente all'identità gestita del servizio
http://localhost:40342/metadata/identity/oauth2/token
.
Il codice in esecuzione nel server può richiedere un token all'endpoint 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 i valori IDENTITY_ENDPOINT e IMDS_ENDPOINT 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 è in grado di accedere ai dati disponibili solo per gli utenti con privilegi più elevati.
Prerequisiti
Conoscenza delle identità gestite.
In Windows è necessario essere un membro del gruppo Amministratori locale 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.
- Se non è stato creato un insieme di credenziali delle chiavi, vedere Creare un insieme di credenziali delle chiavi.
- Per configurare l'accesso dall'identità gestita usata dal server, vedere Concedere l'accesso per Linux o Concedere l'accesso per Windows. Per il passaggio 5, immettere il nome del server abilitato per Azure Arc. Per completare questa operazione con PowerShell, vedere Assegnare un criterio di accesso tramite PowerShell.
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 a quella eseguita 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:
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:
La risposta include il token di accesso necessario per accedere ad alcuna 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
Per altre informazioni su Azure Key Vault, vedere Panoramica di Key Vault.
Informazioni su come assegnare un accesso a un'identità gestita a una risorsa usando PowerShell o l'interfaccia della riga di comando di Azure.