Delen via


Verifieer bij Azure-resources met Azure Arc-ingeschakelde servers

Toepassingen of processen die direct op een Azure Arc-geschikte server draaien, kunnen beheerde identiteiten gebruiken om toegang te krijgen tot andere Azure-resources die Microsoft Entra ID-gebaseerde authenticatie ondersteunen. Een applicatie kan een toegangstoken verkrijgen dat zijn identiteit vertegenwoordigt, wat systeemtoegewezen is voor door Azure Arc ingeschakelde servers, en het gebruiken als een 'bearer' token om zichzelf te authenticeren bij een andere service.

Raadpleeg de documentatie managed identity overzicht voor een gedetailleerde beschrijving van beheerde identiteiten, en begrijp het onderscheid tussen systeemgebonden en gebruikersgebonden identiteiten.

In dit artikel leer je hoe een server een door het systeem toegewezen beheerde identiteit kan gebruiken om toegang te krijgen tot Azure Key Vault. Met Key Vault kunnen uw clienttoepassingen een geheim gebruiken om toegang te krijgen tot resources die niet zijn beveiligd door Microsoft Entra ID. Bijvoorbeeld, TLS/SSL-certificaten die door uw IIS-webservers worden gebruikt, kunnen worden opgeslagen in de Azure Key Vault en veilig naar Windows- of Linux-servers buiten Azure worden gedeployed.

Overzicht van beveiliging

Verschillende acties vinden plaats wanneer u uw server onboardt naar Azure Arc-ingeschakelde servers om te configureren met behulp van een beheerde identiteit (vergelijkbaar met wat er gebeurt voor een Azure VM).

  • Azure Resource Manager ontvangt een verzoek om de systeemtoegewezen beheerde identiteit op de door Azure Arc ingeschakelde server in te schakelen.

  • Azure Resource Manager maakt een service-principal aan in Microsoft Entra ID voor de identiteit van de server. De service-principal wordt aangemaakt in de Microsoft Entra tenant die vertrouwd is door het abonnement.

  • Azure Resource Manager configureert de identiteit op de server door het bijwerken van het identiteitseindpunt van de Azure Instance Metadata Service (IMDS) voor Windows of Linux met de client-ID en het certificaat van de service-principal. Het eindpunt is een REST-eindpunt dat alleen toegankelijk is vanaf binnen de server met behulp van een bekende, niet-routeerbare IP-adres. Deze service biedt een subset van metadata-informatie over de Azure Arc-compatibele server om het beheer en de configuratie ervan te vergemakkelijken.

De omgeving van een server met beheerde identiteit is geconfigureerd met de volgende variabelen op een door Azure Arc ingeschakelde server.

  • IMDS_ENDPOINT: Het IMDS-eindpunt-IP-adres http://localhost:40342 voor Azure Arc-ingeschakelde servers.

  • IDENTITY_ENDPOINT: het localhost-endpoint dat overeenkomt met de beheerde identiteit van de service http://localhost:40342/metadata/identity/oauth2/token.

Uw code die op de server draait, kan een token aanvragen bij het Azure Instance Metadata-service-eindpunt, dat alleen toegankelijk is vanuit de server.

De systeemomgevingvariabele IDENTITY_ENDPOINT wordt door applicaties gebruikt om het identity endpoint te ontdekken. Applicaties zouden moeten proberen om de waarden van IDENTITY_ENDPOINT en IMDS_ENDPOINT te verkrijgen en te gebruiken. Toepassingen met elk toegangslevel mogen aanvragen doen naar de eindpunten. Metadatabaseantwoorden worden op de gebruikelijke manier behandeld en aan elk proces op de machine gegeven. Echter, wanneer er een verzoek wordt gedaan dat een token zou blootstellen, vereisen we dat de klant een geheim verstrekt om aan te tonen dat zij in staat zijn om toegang te krijgen tot gegevens die alleen beschikbaar zijn voor gebruikers met hogere privileges.

Vereiste voorwaarden

  • Inzicht in beheerde identiteiten.

  • Op Windows moet u lid zijn van de lokale Administrators groep of de Hybrid Agent Extension Applications groep.

  • Op Linux moet u lid zijn van de himds-groep.

  • Een server verbonden en geregistreerd met Azure Arc-compatibele servers.

  • U bent lid van de Owner group in de abonnements- of resourcegroep om de vereiste stappen voor resourcecreatie en rolbeheer uit te voeren.

  • Een Azure Key Vault om uw referenties op te slaan en op te vragen, en de Azure Arc-identiteit toegang tot de Key Vault toe te wijzen.

Een toegangstoken verkrijgen met behulp van de REST API

De methode om een systeemtoegewezen beheerde identiteit te verkrijgen en te gebruiken om te verifiëren met Azure-resources, is vergelijkbaar met hoe dit wordt gedaan met een Azure VM.

Voor een Azure Arc-ingeschakelde Windows-server, gebruik PowerShell om het webverzoek uit te voeren om het token van de localhost op de specifieke poort te verkrijgen. Geef het verzoek op met behulp van het IP-adres of de omgevingsvariabele 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
}

Het volgende antwoord is een voorbeeld dat wordt weergegeven:

Een succesvolle opvraging van het toegangstoken met behulp van PowerShell.

Voor een Azure Arc-ingeschakelde Linux-server, met behulp van Bash, roept u het webverzoek op om het token van de localhost op de specifieke poort te verkrijgen. Specificeer de volgende aanvraag met behulp van het IP-adres of de omgevingsvariabele IDENTITY_ENDPOINT. Om deze stap te voltooien, heeft u een SSH-client nodig.

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

Het volgende antwoord is een voorbeeld dat wordt weergegeven:

Een succesvolle verkrijging van de toegangstoken met behulp van Bash.

Opmerking

Het bovenstaande voorbeeld is bedoeld voor het aanvragen van een toegangstoken voor gebruik met ARM REST API's wanneer de resourcevariabele is ingesteld op https://management.azure.com. Als u een toegangstoken voor een andere Azure-service nodig hebt, vervangt u de resourcevariabele in het script door de juiste resourcewaarde. Zie OAuth-token gebruiken met Azure Storage om te verifiëren met Azure Storage. Voltooi de configuratie om te verifiëren bij Azure Key Vault, raadpleeg Toegang tot Key Vault met Windows of Toegang tot Key Vault met Linux.

Volgende stappen