Verifiëren bij Azure-resources met servers met Azure Arc
Toepassingen of processen die rechtstreeks op een server met Azure Arc worden uitgevoerd, 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 leert u hoe een server toegang kan krijgen tot Azure Key Vault met behulp van een door het systeem toegewezen beheerde identiteit. Key Vault maakt het mogelijk voor uw clienttoepassing om een geheim te gebruiken voor toegang 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
Er treden verschillende acties op bij het onboarden van uw server naar servers met Azure Arc om te configureren met behulp van een beheerde identiteit (vergelijkbaar met wat er gebeurt 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 is geconfigureerd met de volgende variabelen op een server met 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/token
van 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 Administrators 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.
- Als u geen Key Vault hebt gemaakt, raadpleegt u Key Vault maken.
- Zie Toegang verlenen voor Linux of Toegang verlenen voor Windows om toegang te configureren door de beheerde identiteit die door de server wordt gebruikt. Voor stap 5 voert u de naam in van de server met Azure Arc. Zie Een toegangsbeleid toewijzen met behulp van PowerShell om dit te voltooien met behulp van PowerShell.
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 roept u met behulp van PowerShell 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:
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:
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
Zie het overzicht van Key Vault voor meer informatie over Azure Key Vault.
Meer informatie over het toewijzen van toegang tot een beheerde identiteit voor een resource met behulp van PowerShell of met behulp van de Azure CLI.