Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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:40342voor 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.
- Als je nog geen Key Vault hebt aangemaakt, zie Key Vault aanmaken.
- Om toegang te configureren via de beheerde identiteit die door de server wordt gebruikt, zie Toegang verlenen voor Linux of Toegang verlenen voor Windows. Voor stap nummer 5 gaat u de naam van de Azure Arc-ingeschakelde server invoeren. Om dit te voltooien met PowerShell, zie Toewijzen van een toegangsbeleid met PowerShell.
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:
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:
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
Als je meer wilt weten over Azure Key Vault, zie Key Vault-overzicht.
Leer hoe u een beheerde identiteit toegang geeft tot een resource met PowerShell of met de Azure CLI.