Uwierzytelnianie w zasobach platformy Azure przy użyciu serwerów z obsługą usługi Azure Arc

Aplikacje lub procesy uruchomione bezpośrednio na serwerach z obsługą usługi Azure Arc mogą używać tożsamości zarządzanych do uzyskiwania dostępu do innych zasobów platformy Azure, które obsługują uwierzytelnianie oparte na identyfikatorach Entra firmy Microsoft. Aplikacja może uzyskać token dostępu reprezentujący swoją tożsamość, która jest przypisana przez system dla serwerów z obsługą usługi Azure Arc, i używać go jako tokenu "elementu nośnego", aby uwierzytelnić się w innej usłudze.

Zapoznaj się z dokumentacją przeglądu tożsamości zarządzanej, aby uzyskać szczegółowy opis tożsamości zarządzanych i zrozumieć rozróżnienie między tożsamościami przypisanymi przez system i tożsamościami przypisanymi przez użytkownika.

W tym artykule pokazano, jak serwer może uzyskiwać dostęp do usługi Azure Key Vault przy użyciu przypisanej przez system tożsamości zarządzanej. Usługa Key Vault służy jako bootstrap, dzięki czemu aplikacja kliencka może następnie używać wpisu tajnego do uzyskiwania dostępu do zasobów, które nie są zabezpieczone przez identyfikator Entra firmy Microsoft. Na przykład certyfikaty TLS/SSL używane przez serwery internetowe usług IIS mogą być przechowywane w usłudze Azure Key Vault i bezpiecznie wdrażać certyfikaty na serwerach z systemem Windows lub Linux spoza platformy Azure.

Przegląd zabezpieczeń

Podczas dołączania serwera do serwerów z obsługą usługi Azure Arc kilka akcji jest wykonywanych w celu skonfigurowania przy użyciu tożsamości zarządzanej, podobnie jak w przypadku maszyny wirtualnej platformy Azure:

  • Usługa Azure Resource Manager otrzymuje żądanie włączenia tożsamości zarządzanej przypisanej przez system na serwerze z obsługą usługi Azure Arc.

  • Usługa Azure Resource Manager tworzy jednostkę usługi w identyfikatorze Entra firmy Microsoft dla tożsamości serwera. Jednostka usługi jest tworzona w dzierżawie firmy Microsoft Entra, która jest zaufana przez subskrypcję.

  • Usługa Azure Resource Manager konfiguruje tożsamość na serwerze, aktualizując punkt końcowy tożsamości usługi Azure Instance Metadata Service (IMDS) dla systemu Windows lub Linux przy użyciu identyfikatora klienta i certyfikatu jednostki usługi. Punkt końcowy jest punktem końcowym REST dostępnym tylko z poziomu serwera przy użyciu dobrze znanego, niezwiązanego z routingiem adresu IP. Ta usługa udostępnia podzestaw informacji o metadanych dotyczących serwera z obsługą usługi Azure Arc, aby ułatwić zarządzanie nim i konfigurowanie go.

Środowisko serwera z obsługą tożsamości zarządzanej zostanie skonfigurowane przy użyciu następujących zmiennych na serwerze z obsługą usługi Azure Arc systemu Windows:

  • IMDS_ENDPOINT: adres http://localhost:40342 IP punktu końcowego IMDS dla serwerów z obsługą usługi Azure Arc.

  • IDENTITY_ENDPOINT: punkt końcowy hosta lokalnego odpowiadający tożsamości http://localhost:40342/metadata/identity/oauth2/tokenzarządzanej usługi .

Kod uruchomiony na serwerze może zażądać tokenu z punktu końcowego usługi Azure Instance Metadata, dostępnego tylko z poziomu serwera.

Zmienna środowiskowa systemu IDENTITY_ENDPOINT służy do odnajdywania punktu końcowego tożsamości przez aplikacje. Aplikacje powinny próbować pobierać IDENTITY_ENDPOINT i IMDS_ENDPOINT wartości i używać ich. Aplikacje z dowolnym poziomem dostępu mogą wysyłać żądania do punktów końcowych. Odpowiedzi na metadane są obsługiwane normalnie i przekazywane do dowolnego procesu na maszynie. Jednak gdy zostanie złożone żądanie, które uwidoczniłoby token, wymagamy od klienta podania wpisu tajnego, aby potwierdzić, że są w stanie uzyskać dostęp do danych dostępnych tylko dla użytkowników z wyższymi uprawnieniami.

Wymagania wstępne

  • Znajomość tożsamości zarządzanych.

  • W systemie Windows musisz być członkiem lokalnej grupy Administracja istratorów lub grupy aplikacji rozszerzenia agenta hybrydowego.

  • W systemie Linux musisz być członkiem grupy himds .

  • Serwer połączony i zarejestrowany na serwerach z obsługą usługi Azure Arc.

  • Jesteś członkiem grupy Właściciel w subskrypcji lub grupie zasobów, aby wykonać wymagane kroki tworzenia zasobów i zarządzania rolami.

  • Usługa Azure Key Vault do przechowywania i pobierania poświadczeń oraz przypisywania dostępu tożsamości usługi Azure Arc do usługi KeyVault.

Uzyskiwanie tokenu dostępu przy użyciu interfejsu API REST

Metoda uzyskiwania i używania przypisanej przez system tożsamości zarządzanej do uwierzytelniania za pomocą zasobów platformy Azure jest podobna do sposobu jej wykonywania z maszyną wirtualną platformy Azure.

W przypadku serwera z systemem Windows z obsługą usługi Azure Arc przy użyciu programu PowerShell należy wywołać żądanie internetowe, aby uzyskać token z hosta lokalnego na określonym porcie. Określ żądanie przy użyciu adresu IP lub zmiennej środowiskowej 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
}

Następująca odpowiedź to przykład zwracany:

A successful retrieval of the access token using PowerShell.

W przypadku serwera z systemem Linux z obsługą usługi Azure Arc przy użyciu powłoki Bash należy wywołać żądanie internetowe, aby uzyskać token z hosta lokalnego na określonym porcie. Określ następujące żądanie przy użyciu adresu IP lub zmiennej środowiskowej IDENTITY_ENDPOINT. Do wykonania tego kroku potrzebny jest klient SSH.

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

Następująca odpowiedź to przykład zwracany:

A successful retrieval of the access token using Bash.

Odpowiedź zawiera token dostępu potrzebny do uzyskania dostępu do dowolnego zasobu na platformie Azure. Aby ukończyć konfigurację uwierzytelniania w usłudze Azure Key Vault, zobacz Access Key Vault with Windows or Access Key Vault with Linux (Uzyskiwanie dostępu do usługi Key Vault w systemie Windows lub Uzyskiwanie dostępu do usługi Key Vault w systemie Linux).

Następne kroki