Verifiëren bij Azure-resources met servers met Azure Arc

Toepassingen of processen die rechtstreeks worden uitgevoerd op servers met Azure Arc, kunnen beheerde identiteiten gebruiken voor toegang tot andere Azure-resources die ondersteuning bieden voor verificatie op basis van Microsoft Entra ID. Een toepassing kan een toegangstoken verkrijgen dat de identiteit vertegenwoordigt. Dit is door het systeem toegewezen voor servers met Azure Arc en gebruikt deze als bearer-token om zichzelf te verifiëren bij een andere service.

Raadpleeg de overzichtsdocumentatie voor beheerde identiteiten voor een gedetailleerde beschrijving van beheerde identiteiten en begrijp het onderscheid tussen door het systeem toegewezen en door de gebruiker toegewezen identiteiten.

In dit artikel laten we zien hoe een server toegang kan krijgen tot Azure Key Vault met behulp van een door het systeem toegewezen beheerde identiteit. Als bootstrap fungeert, maakt Key Vault het mogelijk voor uw clienttoepassing om vervolgens een geheim te gebruiken om toegang te krijgen tot resources die niet zijn beveiligd door Microsoft Entra-id. TLS/SSL-certificaten die worden gebruikt door uw IIS-webservers kunnen bijvoorbeeld worden opgeslagen in Azure Key Vault en de certificaten veilig implementeren op Windows- of Linux-servers buiten Azure.

Beveiligingsoverzicht

Tijdens het onboarden van uw server naar servers met Azure Arc worden verschillende acties uitgevoerd om te configureren met behulp van een beheerde identiteit, vergelijkbaar met wat wordt uitgevoerd voor een Azure-VM:

  • Azure Resource Manager ontvangt een aanvraag voor het inschakelen van de door het systeem toegewezen beheerde identiteit op de server met Azure Arc.

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

  • Azure Resource Manager configureert de identiteit op de server door het id-eindpunt van azure Instance Metadata Service (IMDS) voor Windows of Linux bij te werken met de client-id en het certificaat van de service-principal. Het eindpunt is een REST-eindpunt dat alleen toegankelijk is vanaf de server met behulp van een bekend, niet-routeerbaar IP-adres. Deze service biedt een subset metagegevensinformatie over de server met Azure Arc om deze te beheren en te configureren.

De omgeving van een server met beheerde identiteit wordt geconfigureerd met de volgende variabelen op een Server met Windows Azure Arc:

  • IMDS_ENDPOINT: het IP-adres http://localhost:40342 van het IMDS-eindpunt voor servers met Azure Arc.

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

Uw code die op de server wordt uitgevoerd, kan een token aanvragen vanuit het Service-eindpunt voor metagegevens van Azure Instance, alleen toegankelijk vanaf de server.

De omgevingsvariabele van het systeem IDENTITY_ENDPOINT wordt gebruikt om het identiteitseindpunt door toepassingen te detecteren. Toepassingen moeten proberen IDENTITY_ENDPOINT en IMDS_ENDPOINT waarden op te halen en te gebruiken. Toepassingen met elk toegangsniveau kunnen aanvragen indienen bij de eindpunten. Antwoorden op metagegevens worden als normaal verwerkt en gegeven aan elk proces op de computer. Wanneer er echter een aanvraag wordt gedaan die een token beschikbaar maakt, moeten we de client een geheim verstrekken om te bevestigen dat ze alleen toegang hebben tot gegevens die alleen beschikbaar zijn voor gebruikers met hogere bevoegdheden.

Vereisten

  • Inzicht in beheerde identiteiten.

  • In Windows moet u lid zijn van de lokale groep Beheer istrators of de groep Hybrid Agent Extension Applications.

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

  • Een server die is verbonden en geregistreerd bij servers met Azure Arc.

  • U bent lid van de groep Eigenaar in het abonnement of de resourcegroep om de vereiste stappen voor het maken van resources en rolbeheer uit te voeren.

  • Een Azure Key Vault om uw referenties op te slaan en op te halen en de Azure Arc-identiteit toegang te geven tot KeyVault.

Een toegangstoken verkrijgen met behulp van REST API

De methode voor het verkrijgen en gebruiken van een door het systeem toegewezen beheerde identiteit voor verificatie met Azure-resources is vergelijkbaar met de manier waarop deze wordt uitgevoerd met een Azure-VM.

Voor een Windows-server met Azure Arc, met behulp van PowerShell, roept u de webaanvraag aan om het token op te halen van de lokale host in de specifieke poort. Geef de aanvraag 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 geretourneerd:

A successful retrieval of the access token using PowerShell.

Voor een Linux-server met Azure Arc, met behulp van Bash, roept u de webaanvraag aan om het token op te halen van de lokale host in de specifieke poort. Geef de volgende aanvraag op met behulp van het IP-adres of de omgevingsvariabele IDENTITY_ENDPOINT. U hebt een SSH-client nodig om deze stap te voltooien.

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 geretourneerd:

A successful retrieval of the access token using Bash.

Het antwoord bevat het toegangstoken dat u nodig hebt om toegang te krijgen tot elke resource in Azure. Zie Access Key Vault met Windows of Access Key Vault met Linux om de configuratie voor verificatie bij Azure Key Vault te voltooien.

Volgende stappen