Autentisera mot Azure-resurser med Azure Arc-aktiverade servrar

Program eller processer som körs direkt på en Azure Arc-aktiverad server kan använda hanterade identiteter för att komma åt andra Azure-resurser som stöder Microsoft Entra-ID-baserad autentisering. Ett program kan hämta en åtkomsttoken som representerar dess identitet, som är systemtilldelad för Azure Arc-aktiverade servrar, och använda den som en "ägartoken" för att autentisera sig till en annan tjänst.

Se översiktsdokumentationen för hanterad identitet för en detaljerad beskrivning av hanterade identiteter och förstå skillnaden mellan systemtilldelade och användartilldelade identiteter.

I den här artikeln visar vi hur en server kan använda en systemtilldelad hanterad identitet för att få åtkomst till Azure Key Vault. Key Vault fungerar som en bootstrap och gör det möjligt för klientprogrammet att sedan använda en hemlighet för att komma åt resurser som inte skyddas av Microsoft Entra-ID. TLS/SSL-certifikat som används av dina IIS-webbservrar kan till exempel lagras i Azure Key Vault och distribuera certifikaten på ett säkert sätt till Windows- eller Linux-servrar utanför Azure.

Säkerhetsöversikt

När du registrerar servern på Azure Arc-aktiverade servrar utförs flera åtgärder för att konfigurera med hjälp av en hanterad identitet, ungefär som vad som utförs för en virtuell Azure-dator:

  • Azure Resource Manager tar emot en begäran om att aktivera den systemtilldelade hanterade identiteten på den Azure Arc-aktiverade servern.

  • Azure Resource Manager skapar ett huvudnamn för tjänsten i Microsoft Entra-ID för serverns identitet. Tjänstens huvudnamn skapas i Microsoft Entra-klientorganisationen som är betrodd av prenumerationen.

  • Azure Resource Manager konfigurerar identiteten på servern genom att uppdatera IMDS-identitetsslutpunkten (Azure Instance Metadata Service) för Windows eller Linux med klient-ID och certifikat för tjänstens huvudnamn. Slutpunkten är en REST-slutpunkt som endast är tillgänglig från servern med hjälp av en välkänd, icke-dirigerbar IP-adress. Den här tjänsten tillhandahåller en delmängd metadatainformation om Den Azure Arc-aktiverade servern för att hantera och konfigurera den.

Miljön för en hanterad identitetsaktiverad server konfigureras med följande variabler på en Windows Azure Arc-aktiverad server:

  • IMDS_ENDPOINT: IMDS-slutpunktens IP-adress http://localhost:40342 för Azure Arc-aktiverade servrar.

  • IDENTITY_ENDPOINT: den localhost-slutpunkt som motsvarar tjänstens hanterade identitet http://localhost:40342/metadata/identity/oauth2/token.

Din kod som körs på servern kan begära en token från tjänstslutpunkten för Azure Instance Metadata, som endast är tillgänglig från servern.

Systemmiljövariabeln IDENTITY_ENDPOINT används för att identifiera identitetsslutpunkten av program. Program bör försöka hämta IDENTITY_ENDPOINT och IMDS_ENDPOINT värden och använda dem. Program med valfri åtkomstnivå kan göra begäranden till slutpunkterna. Metadatasvar hanteras som vanligt och ges till alla processer på datorn. Men när en begäran görs som skulle exponera en token kräver vi att klienten tillhandahåller en hemlighet för att intyga att de endast kan komma åt data som är tillgängliga för användare med högre privilegier.

Förutsättningar

  • Förståelse för hanterade identiteter.

  • I Windows måste du vara medlem i den lokala gruppen Administratörer eller gruppen Program för hybridagenttillägg.

  • I Linux måste du vara medlem i himds-gruppen .

  • En server som är ansluten och registrerad med Azure Arc-aktiverade servrar.

  • Du är medlem i gruppen Ägare i prenumerationen eller resursgruppen för att kunna utföra nödvändiga steg för resursskapande och rollhantering.

  • Ett Azure Key Vault för att lagra och hämta dina autentiseringsuppgifter och tilldela Azure Arc-identiteten åtkomst till KeyVault.

Hämta en åtkomsttoken med hjälp av REST API

Metoden för att hämta och använda en systemtilldelad hanterad identitet för att autentisera med Azure-resurser liknar hur den utförs med en virtuell Azure-dator.

För en Azure Arc-aktiverad Windows-server anropar du webbbegäran för att hämta token från den lokala värden i den specifika porten med hjälp av PowerShell. Ange begäran med hjälp av IP-adressen eller miljövariabeln 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
}

Följande svar är ett exempel som returneras:

A successful retrieval of the access token using PowerShell.

För en Azure Arc-aktiverad Linux-server använder du Bash och anropar webbbegäran för att hämta token från den lokala värden i den specifika porten. Ange följande begäran med hjälp av IP-adressen eller miljövariabeln IDENTITY_ENDPOINT. För att slutföra det här steget behöver du en SSH-klient.

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

Följande svar är ett exempel som returneras:

A successful retrieval of the access token using Bash.

Svaret innehåller den åtkomsttoken som du behöver för att komma åt alla resurser i Azure. Information om hur du slutför konfigurationen för att autentisera till Azure Key Vault finns i Access Key Vault with Windows or Access Key Vault with Linux (Få åtkomst till Key Vault med Windows eller Access Key Vault med Linux).

Nästa steg