Verwenden von verwalteten Identitäten für Azure-Ressourcen auf einem virtuellen Azure-Computer zum Abrufen eines Zugriffstokens

Verwaltete Identitäten für Azure-Ressourcen ist eine Funktion von Microsoft Entra ID. Für alle Azure-Dienste, die verwaltete Identitäten unterstützen, gilt ein eigener Zeitplan. Sehen Sie sich den Verfügbarkeitsstatus der verwalteten Identitäten für Ihre Ressource und die bekannten Probleme an, bevor Sie beginnen.

Verwaltete Identitäten für Azure-Ressourcen stellen für Azure-Dienste eine automatisch verwaltete Identität in Microsoft Entra ID bereit. Sie können diese Identität für die Authentifizierung bei jedem Dienst verwenden, der die Microsoft Entra-Authentifizierung unterstützt. Hierfür müssen keine Anmeldeinformationen im Code enthalten sein.

Dieser Artikel enthält verschiedene Code- und Skriptbeispiele für den Tokenabruf. Darüber hinaus finden Sie hier eine Anleitung zur Behandlung bei Tokenablauf und HTTP-Fehlern.

Voraussetzungen

  • Wenn Sie mit der Funktion für verwaltete Identitäten für Azure-Ressourcen nicht vertraut sind, finden Sie hier eine Übersicht. Wenn Sie kein Azure-Konto haben, sollten Sie sich für ein kostenloses Konto registrieren, bevor Sie fortfahren.

Wenn Sie die Azure PowerShell-Beispiele in diesem Artikel verwenden möchten, müssen Sie die neueste Version von Azure PowerShell installieren.

Wichtig

  • Bei allen Beispielcodes/-skripts in diesem Artikel wird vorausgesetzt, dass der Client auf einem virtuellen Computer mit verwalteten Identitäten für Azure-Ressourcen ausgeführt wird. Verwenden Sie die Funktion „Verbinden“ für virtuelle Computer im Azure-Portal zum Herstellen einer Remoteverbindung mit Ihrem virtuellen Computer. Weitere Informationen zur Aktivierung von verwalteten Identitäten für Azure-Ressourcen auf einer VM finden Sie unter Konfigurieren von verwalteten Identitäten für Azure-Ressourcen auf einer VM über das Azure-Portal oder in einem der verwandten Artikel (PowerShell, CLI, Vorlage oder Azure SDK).

Wichtig

  • Die Sicherheitsgrenze von verwalteten Identitäten für Azure-Ressourcen wird durch die Ressource vorgegeben, von der die Identität verwendet wird. Der gesamte Code und alle Skripts, die auf einem virtuellen Computer ausgeführt werden, können Token für die darin verfügbaren verwalteten Identitäten anfordern und abrufen.

Übersicht

Eine Clientanwendung kann ein App-exklusives Zugriffstoken der verwalteten Identität für den Zugriff auf eine bestimmte Ressource anfordern. Das Token basiert auf dem Dienstprinzipal der verwalteten Identitäten für Azure-Ressourcen. Daher muss der Client nicht selbst ein Zugriffstoken unter seinem eigenen Dienstprinzipal abrufen. Das Token ist geeignet für die Nutzung als Bearertoken in Dienst-zu-Dienst-Aufrufen, für die Clientanmeldeinformationen benötigt werden.

Link BESCHREIBUNG
Abrufen eines Tokens über HTTP Protokolldetails zum Tokenendpunkt für verwaltete Identitäten für Azure-Ressourcen
Abrufen eines Tokens über Azure.Identity Abrufen eines Tokens mithilfe der Azure.Identity-Bibliothek
Abrufen eines Tokens mit der Microsoft.Azure.Services.AppAuthentication-Bibliothek für .NET Beispiel für die Verwendung der Microsoft.Azure.Services.AppAuthentication-Bibliothek auf einem .NET-Client
Abrufen eines Tokens über C# Beispiel für die Verwendung des REST-Endpunkts für verwaltete Identitäten für Azure-Ressourcen über einen C#-Client
Abrufen eines Tokens mit Java Beispiel für die Verwendung von verwalteten Identitäten für den REST-Endpunkt von Azure-Ressourcen über einen Java-Client
Abrufen eines Tokens über Go Beispiel für die Verwendung des REST-Endpunkts für verwaltete Identitäten für Azure-Ressourcen über einen Go-Client
Abrufen eines Tokens mit PowerShell Beispiel für die Verwendung des REST-Endpunkts für verwaltete Identitäten für Azure-Ressourcen über einen PowerShell-Client
Abrufen eines Tokens über cURL Beispiel für die Verwendung des REST-Endpunkts für verwaltete Identitäten für Azure-Ressourcen über einen Bash/cURL-Client
Behandlung der Token-Zwischenspeicherung Anleitung zur Behandlung abgelaufener Zugriffstoken
Fehlerbehandlung Anleitung zur Behandlung von HTTP-Fehlern, die vom Tokenendpunkt für verwaltete Identitäten für Azure-Ressourcen zurückgegeben werden
Ressourcen-IDs für Azure-Dienste Abrufen von Ressourcen-IDs für unterstützte Azure-Dienste

Abrufen eines Tokens über HTTP

Die grundlegende Schnittstelle zum Abrufen eines Zugriffstokens basiert auf REST, sodass sie für alle auf dem virtuellen Computer ausgeführten Clientanwendungen, die HTTP-REST-Aufrufe ausführen können, zur Verfügung steht. Dieser Ansatz ähnelt dem Microsoft Entra-Programmiermodell, aber der Client verwendet einen Endpunkt auf dem virtuellen Computer (und keinen Microsoft Entra-Endpunkt).

Beispielanforderung mit dem Azure-IMDS-Endpunkt (Instance Metadata Service) (empfohlen) :

GET 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/' HTTP/1.1 Metadata: true
Element BESCHREIBUNG
GET Das HTTP-Verb, mit dem angegeben wird, dass Sie Daten vom Endpunkt abrufen möchten. In diesem Fall ist dies ein OAuth-Zugriffstoken.
http://169.254.169.254/metadata/identity/oauth2/token Der Endpunkt für verwaltete Identitäten für Azure-Ressourcen für den Instanzmetadatendienst.
api-version Ein Abfragezeichenfolgenparameter, mit dem die API-Version für den IMDS-Endpunkt angegeben wird. Verwenden Sie API-Version 2018-02-01 oder höher.
resource Ein Abfragezeichenfolgenparameter, der den App-ID-URI der Zielressource angibt. Er wird auch im Anspruch aud (audience) des ausgestellten Tokens angezeigt. In diesem Beispiel wird ein Token für den Zugriff auf Azure Resource Manager angefordert, das über den App-ID-URI https://management.azure.com/ verfügt.
Metadata Ein HTTP-Anforderungsheaderfeld, das für verwaltete Identitäten erforderlich ist. Diese Informationen werden als Maßnahme gegen SSRF-Angriffe (Server-Side Request Forgery) verwendet. Dieser Wert muss auf „true“ (in Kleinbuchstaben) festgelegt werden.
object_id (Optional) Ein Abfragezeichenfolgen-Parameter, der den object_id-Wert der verwalteten Identität angibt, für die das Token gelten soll. Erforderlich, wenn Ihr virtueller Computer über mehrere vom Benutzer zugewiesene verwaltete Identitäten verfügt.
client_id (Optional) Ein Abfragezeichenfolgen-Parameter, der den client_id-Wert der verwalteten Identität angibt, für die das Token gelten soll. Erforderlich, wenn Ihr virtueller Computer über mehrere vom Benutzer zugewiesene verwaltete Identitäten verfügt.
msi_res_id (Optional) Ein Abfragezeichenfolgenparameter, der das Element „msi_res_id“ (Azure-Ressourcen-ID) der verwalteten Identität angibt, für die das Token gelten soll. Erforderlich, wenn Ihr virtueller Computer über mehrere vom Benutzer zugewiesene verwaltete Identitäten verfügt.

Beispiel für eine Antwort:

HTTP/1.1 200 OK
Content-Type: application/json
{
  "access_token": "eyJ0eXAi...",
  "refresh_token": "",
  "expires_in": "3599",
  "expires_on": "1506484173",
  "not_before": "1506480273",
  "resource": "https://management.azure.com/",
  "token_type": "Bearer"
}
Element BESCHREIBUNG
access_token Das angeforderte Zugriffstoken. Beim Aufrufen einer geschützten REST-API wird das Token als „Bearertoken“ in das Authorization-Anforderungsheaderfeld eingebettet, damit der Aufrufer von der API authentifiziert werden kann.
refresh_token Wird von verwalteten Identitäten für Azure-Ressourcen nicht verwendet.
expires_in Der Zeitraum in Sekunden, wie lange das Zugriffstoken ab dem Zeitpunkt der Ausstellung gültig ist, bevor es abläuft. Der Ausstellungszeitpunkt ist im Anspruch iat des Tokens zu finden.
expires_on Der Zeitpunkt, zu dem das Zugriffstoken abläuft. Das Datum wird als Anzahl von Sekunden ab „1970-01-01T0:0:0Z UTC“ (entspricht dem Anspruch exp des Tokens) dargestellt.
not_before Der Zeitpunkt, ab dem das Zugriffstoken wirksam ist und akzeptiert werden kann. Das Datum wird als Anzahl von Sekunden ab „1970-01-01T0:0:0Z UTC“ (entspricht dem Anspruch nbf des Tokens) dargestellt.
resource Die Ressource, für die das Zugriffstoken angefordert wurde (Übereinstimmung mit dem Abfragezeichenfolgenparameter resource der Anforderung).
token_type Der Typ des Tokens. In diesem Fall ein „Bearerzugriffstoken“, sodass die Ressource Zugriff auf den Bearer dieses Tokens gewähren kann.

Abrufen eines Tokens mithilfe der Azure-Identitätsclientbibliothek

Zur Nutzung verwalteter Identitäten wird die Verwendung der Azure-Identitätsclientbibliothek empfohlen. Alle Azure SDKs sind in die Bibliothek Azure.Identity integriert, die Unterstützung für DefaultAzureCredential bietet. Diese Klasse erleichtert die Verwendung von verwalteten Identitäten mit Azure SDKs. Weitere Informationen

  1. Installieren Sie das Azure.Identity-Paket und andere erforderliche Azure SDK-Bibliothekspakete, etwa Azure.Security.KeyVault.Secrets.

  2. Verwenden Sie den unten angegebenen Beispielcode. Sie müssen sich nicht um das Abrufen von Token kümmern. Sie können die Azure SDK-Clients direkt verwenden. Der Code veranschaulicht das Abrufen des Tokens, sollten Sie diesen Schritt ausführen müssen.

    using Azure.Core;
    using Azure.Identity;
    
    string userAssignedClientId = "<your managed identity client Id>";
    var credential = new DefaultAzureCredential(new DefaultAzureCredentialOptions { ManagedIdentityClientId = userAssignedClientId });
    var accessToken = credential.GetToken(new TokenRequestContext(new[] { "https://vault.azure.net" }));
    // To print the token, you can convert it to string 
    String accessTokenString = accessToken.Token.ToString();
    
    //You can use the credential object directly with Key Vault client.     
    var client = new SecretClient(new Uri("https://myvault.vault.azure.net/"), credential);
    

Abrufen eines Tokens mit der Microsoft.Azure.Services.AppAuthentication-Bibliothek für .NET

Bei .NET-Anwendungen und -Funktionen stellt die einfachste Methode für die Arbeit mit verwalteten Identitäten für Azure-Ressourcen das Microsoft.Azure.Services.AppAuthentication-Paket dar. Mit dieser Bibliothek können Sie Ihren Code auch lokal auf Ihrem Entwicklungscomputer testen. Sie können Ihren Code mithilfe Ihres Benutzerkontos über Visual Studio, die Azure CLI oder die integrierte Active Directory-Authentifizierung testen. Weitere Informationen zu Optionen für die lokale Entwicklung mit dieser Bibliothek finden Sie in der Microsoft.Azure.Services.AppAuthentication-Referenz. In diesem Abschnitt werden die ersten Schritte mit der Bibliothek in Ihrem Code erläutert.

  1. Fügen Sie Ihrer Anwendung einen Verweis auf die NuGet-Pakete Microsoft.Azure.Services.AppAuthentication und Microsoft.Azure.KeyVault hinzu.

  2. Fügen Sie Ihrer Anwendung den folgenden Code hinzu:

    using Microsoft.Azure.Services.AppAuthentication;
    using Microsoft.Azure.KeyVault;
    // ...
    var azureServiceTokenProvider = new AzureServiceTokenProvider();
    string accessToken = await azureServiceTokenProvider.GetAccessTokenAsync("https://management.azure.com/");
    // OR
    var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
    

Weitere Informationen zu Microsoft.Azure.Services.AppAuthentication und den zugehörigen Vorgängen finden Sie in der Microsoft.Azure.Services.AppAuthentication-Referenz und im .NET-Beispiel zu App Service und KeyVault mit verwalteten Identitäten für Azure-Ressourcen.

Abrufen eines Tokens über C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Web.Script.Serialization; 

// Build request to acquire managed identities for Azure resources token
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/");
request.Headers["Metadata"] = "true";
request.Method = "GET";

try
{
    // Call /token endpoint
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();

    // Pipe response Stream to a StreamReader, and extract access token
    StreamReader streamResponse = new StreamReader(response.GetResponseStream()); 
    string stringResponse = streamResponse.ReadToEnd();
    JavaScriptSerializer j = new JavaScriptSerializer();
    Dictionary<string, string> list = (Dictionary<string, string>) j.Deserialize(stringResponse, typeof(Dictionary<string, string>));
    string accessToken = list["access_token"];
}
catch (Exception e)
{
    string errorText = String.Format("{0} \n\n{1}", e.Message, e.InnerException != null ? e.InnerException.Message : "Acquire token failed");
}

Abrufen eines Tokens mit Java

Verwenden Sie diese JSON-Bibliothek, um ein Token mithilfe von Java abzurufen.

import java.io.*;
import java.net.*;
import com.fasterxml.jackson.core.*;
 
class GetMSIToken {
    public static void main(String[] args) throws Exception {
 
        URL msiEndpoint = new URL("http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/");
        HttpURLConnection con = (HttpURLConnection) msiEndpoint.openConnection();
        con.setRequestMethod("GET");
        con.setRequestProperty("Metadata", "true");
 
        if (con.getResponseCode()!=200) {
            throw new Exception("Error calling managed identity token endpoint.");
        }
 
        InputStream responseStream = con.getInputStream();
 
        JsonFactory factory = new JsonFactory();
        JsonParser parser = factory.createParser(responseStream);
 
        while(!parser.isClosed()){
            JsonToken jsonToken = parser.nextToken();
 
            if(JsonToken.FIELD_NAME.equals(jsonToken)){
                String fieldName = parser.getCurrentName();
                jsonToken = parser.nextToken();
 
                if("access_token".equals(fieldName)){
                    String accesstoken = parser.getValueAsString();
                    System.out.println("Access Token: " + accesstoken.substring(0,5)+ "..." + accesstoken.substring(accesstoken.length()-5));
                    return;
                }
            }
        }
    }
}

Abrufen eines Tokens über Go

package main

import (
  "fmt"
  "io/ioutil"
  "net/http"
  "net/url"
  "encoding/json"
)

type responseJson struct {
  AccessToken string `json:"access_token"`
  RefreshToken string `json:"refresh_token"`
  ExpiresIn string `json:"expires_in"`
  ExpiresOn string `json:"expires_on"`
  NotBefore string `json:"not_before"`
  Resource string `json:"resource"`
  TokenType string `json:"token_type"`
}

func main() {
    
    // Create HTTP request for a managed services for Azure resources token to access Azure Resource Manager
    var msi_endpoint *url.URL
    msi_endpoint, err := url.Parse("http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01")
    if err != nil {
      fmt.Println("Error creating URL: ", err)
      return 
    }
    msi_parameters := msi_endpoint.Query()
    msi_parameters.Add("resource", "https://management.azure.com/")
    msi_endpoint.RawQuery = msi_parameters.Encode()
    req, err := http.NewRequest("GET", msi_endpoint.String(), nil)
    if err != nil {
      fmt.Println("Error creating HTTP request: ", err)
      return 
    }
    req.Header.Add("Metadata", "true")

    // Call managed services for Azure resources token endpoint
    client := &http.Client{}
    resp, err := client.Do(req) 
    if err != nil{
      fmt.Println("Error calling token endpoint: ", err)
      return
    }

    // Pull out response body
    responseBytes,err := ioutil.ReadAll(resp.Body)
    defer resp.Body.Close()
    if err != nil {
      fmt.Println("Error reading response body : ", err)
      return
    }

    // Unmarshall response body into struct
    var r responseJson
    err = json.Unmarshal(responseBytes, &r)
    if err != nil {
      fmt.Println("Error unmarshalling the response:", err)
      return
    }

    // Print HTTP response and marshalled response body elements to console
    fmt.Println("Response status:", resp.Status)
    fmt.Println("access_token: ", r.AccessToken)
    fmt.Println("refresh_token: ", r.RefreshToken)
    fmt.Println("expires_in: ", r.ExpiresIn)
    fmt.Println("expires_on: ", r.ExpiresOn)
    fmt.Println("not_before: ", r.NotBefore)
    fmt.Println("resource: ", r.Resource)
    fmt.Println("token_type: ", r.TokenType)
}

Abrufen eines Tokens mit PowerShell

Im folgenden Beispiel wird veranschaulicht, wie Sie den REST-Endpunkt für verwaltete Identitäten für Azure-Ressourcen über einen PowerShell-Client für Folgendes verwenden:

  1. Abrufen eines Zugriffstokens
  2. Verwenden des Zugriffstokens, um eine Azure Resource Manager-REST-API aufzurufen und Informationen zum virtuellen Computer abzurufen Achten Sie darauf, dass Sie <SUBSCRIPTION-ID>, <RESOURCE-GROUP> und <VM-NAME> jeweils durch Ihre Abonnement-ID, den Namen der Ressourcengruppe und den Namen des virtuellen Computers ersetzen.
Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F' -Headers @{Metadata="true"}

Beispiel zum Analysieren des Zugriffstokens aus der Antwort:

# Get an access token for managed identities for Azure resources
$response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F' `
                              -Headers @{Metadata="true"}
$content =$response.Content | ConvertFrom-Json
$access_token = $content.access_token
echo "The managed identities for Azure resources access token is $access_token"

# Use the access token to get resource information for the VM
$vmInfoRest = (Invoke-WebRequest -Uri 'https://management.azure.com/subscriptions/<SUBSCRIPTION-ID>/resourceGroups/<RESOURCE-GROUP>/providers/Microsoft.Compute/virtualMachines/<VM-NAME>?api-version=2017-12-01' -Method GET -ContentType "application/json" -Headers @{ Authorization ="Bearer $access_token"}).content
echo "JSON returned from call to get VM info:"
echo $vmInfoRest

Abrufen eines Tokens über cURL

curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F' -H Metadata:true -s

Beispiel zum Analysieren des Zugriffstokens aus der Antwort:

response=$(curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F' -H Metadata:true -s)
access_token=$(echo $response | python -c 'import sys, json; print (json.load(sys.stdin)["access_token"])')
echo The managed identities for Azure resources access token is $access_token

Zwischenspeichern von Tokens

Das Subsystem für verwaltete Identitäten speichert Token zwischen, es wird jedoch weiterhin empfohlen, das Zwischenspeichern von Token in Ihrem Code zu implementieren. Sie sollten Vorbereitungen für Szenarien treffen, bei denen die Ressource angibt, dass das Token abgelaufen ist.

On-the-Wire-Aufrufe von Microsoft Entra ID ergeben sich nur in folgenden Fällen:

  • Cachefehler aufgrund eines fehlenden Tokens im Cache des Subsystems für verwaltete Identitäten für Azure-Ressourcen
  • Abgelaufenes zwischengespeichertes Token

Fehlerbehandlung

Der Endpunkt der verwalteten Identitäten signalisiert Fehler über das Statuscodefeld des Nachrichtenheaders der HTTP-Antwort als 4xx- oder 5xx-Fehler:

Statuscode Fehlerursache Fehlerbehandlung
404 – Nicht gefunden. Der IMDS-Endpunkt wird gerade aktualisiert. Wiederholungsversuch mit exponentiellem Backoff. Siehe Anleitung unten.
410 IMDS durchläuft Updates IMDS ist innerhalb von 70 Sekunden verfügbar
429: Zu viele Anforderungen. IMDS-Drosselungsgrenzwert erreicht. Wiederholungsversuch mit exponentiellem Backoff. Siehe Anleitung unten.
4xx – Fehler in der Anforderung. Mindestens einer der Anforderungsparameter war falsch. Wiederholen Sie den Vorgang nicht. Überprüfen Sie den Fehler, um weitere Informationen zu erhalten. 4xx-Fehler sind Fehler während der Entwurfszeit.
5xx – Vorübergehender Fehler vom Dienst. Das Subsystem für verwaltete Identitäten für Azure-Ressourcen oder Microsoft Entra ID hat einen vorübergehenden Fehler zurückgegeben. Nach mindestens einer Sekunde können Sie den Vorgang wiederholen. Wenn Sie den Vorgang zu schnell oder zu häufig wiederholen, gibt IMDS und/oder Microsoft Entra ID möglicherweise einen Fehler zum Ratenlimit (429) zurück.
timeout Der IMDS-Endpunkt wird gerade aktualisiert. Wiederholungsversuch mit exponentiellem Backoff. Siehe Anleitung unten.

Wenn ein Fehler auftritt, enthält der entsprechende HTTP-Antworttext JSON-Code mit den Fehlerdetails:

Element BESCHREIBUNG
error Fehler-ID
error_description Ausführliche Beschreibung des Fehlers. Fehlerbeschreibungen können sich jederzeit ändern. Schreiben Sie keinen Code, der sich basierend auf Werten in der Fehlerbeschreibung brancht.

Referenz für HTTP-Antworten

In diesem Abschnitt sind die möglichen Fehlerantworten aufgeführt. Der Status „200 OK“ ist eine erfolgreiche Antwort, und das Zugriffstoken ist im JSON-Antworttext im Element „access_token“ enthalten.

Statuscode Fehler Fehlerbeschreibung Lösung
400 – Ungültige Anforderung invalid_resource AADSTS50001: Die Anwendung <URI> wurde im Mandanten <TENANT-ID> nicht gefunden. Diese Meldung wird angezeigt, wenn der Mandantenadministrator die Anwendung nicht installiert hat oder wenn kein Mandantenbenutzer ihr zugestimmt hat. Unter Umständen haben Sie Ihre Authentifizierung an den falschen Mandanten gesendet. (Nur Linux)
400 – Ungültige Anforderung bad_request_102 Erforderlicher Metadatenheader nicht angegeben Entweder fehlt der Metadata-Anforderungsheader in Ihrer Anforderung, oder er ist falsch formatiert. Der Wert muss als true (in Kleinbuchstaben) angegeben werden. Ein Beispiel finden Sie im vorherigen REST-Abschnitt unter „Beispiel für eine Anforderung“.
401 – Nicht autorisiert unknown_source Unbekannte Quelle <URI> Stellen Sie sicher, dass Ihr HTTP GET-Anforderungs-URI richtig formatiert ist. Der Teil scheme:host/resource-path muss als http://localhost:50342/oauth2/token angegeben werden. Ein Beispiel finden Sie im vorherigen REST-Abschnitt unter „Beispiel für eine Anforderung“.
invalid_request In der Anforderung fehlt ein erforderlicher Parameter, ist ein ungültiger Parameter enthalten oder ist ein Parameter mehrfach vorhanden, oder die Anforderung ist auf andere Weise fehlerhaft.
unauthorized_client Der Client ist zum Anfordern eines Zugriffstokens mit dieser Methode nicht autorisiert. Ursache ist eine Anforderung auf einem virtuellen Computer, auf dem verwaltete Identitäten für Azure-Ressourcen nicht ordnungsgemäß konfiguriert sind. Hilfe zur Konfiguration des virtuellen Computers finden Sie unter Konfigurieren von verwalteten Identitäten für Azure-Ressourcen auf einem virtuellen Computer über das Azure-Portal.
access_denied Der Ressourcenbesitzer oder Autorisierungsserver hat die Anforderung verweigert.
unsupported_response_type Der Autorisierungsserver unterstützt das Abrufen eines Zugriffstokens mit dieser Methode nicht.
invalid_scope Der angeforderte Bereich ist ungültig, unbekannt oder falsch formatiert.
500 Interner Serverfehler unknown Beim Abrufen des Tokens aus Active Directory ist ein Fehler aufgetreten. Details finden Sie in den Protokollen unter <Dateipfad>. Stellen Sie sicher, dass verwaltete Identitäten für Azure-Ressourcen auf dem virtuellen Computer aktiviert sind. Hilfe zur Konfiguration des virtuellen Computers finden Sie unter Konfigurieren von verwalteten Identitäten für Azure-Ressourcen auf einem virtuellen Computer über das Azure-Portal.

Überprüfen Sie zudem, ob Ihr HTTP GET-Anforderungs-URI richtig formatiert ist. Dies gilt vor allem für den Ressourcen-URI, der in der Abfragezeichenfolge angegeben ist. Unter „Beispiel für eine Anforderung“ im vorherigen REST-Abschnitt finden Sie ein Beispiel, und unter Azure-Dienste, welche die Microsoft Entra-Authentifizierung unterstützen finden Sie eine Liste mit Diensten und den dazugehörigen Ressourcen-IDs.

Wichtig

  • IMDS ist nicht für die Verwendung hinter einem Proxy vorgesehen. Dies wird nicht unterstützt. Beispiele zum Umgehen von Proxys finden Sie unter Beispiele für Azure-Instanzmetadaten.

Informationen zur Wiederholung

Wenn Sie einen Fehlercode vom Typ 404, 429 oder 5xx erhalten, sollten Sie den Vorgang wiederholen. (Weitere Informationen finden Sie weiter oben unter Fehlerbehandlung.) Ein Fehler 410 bedeutet, dass IMDS Updates durchläuft und in maximal 70 Sekunden verfügbar sein wird.

Drosselungsgrenzwerte gelten für die Anzahl von Aufrufen, die an den IMDS-Endpunkt gerichtet werden. Wird der Drosselungsschwellenwert überschritten, schränkt der IMDS-Endpunkt alle weiteren Anforderungen ein, während die Drosselung aktiv ist. Während dieser Zeit gibt der IMDS-Endpunkt den HTTP-Statuscode 429 („Zu viele Anforderungen“) zurück, und die Anforderungen verursachen einen Fehler.

Empfohlene Wiederholungsstrategie:

Wiederholungsstrategie Einstellungen Werte So funktioniert's
ExponentialBackoff Anzahl der Wiederholungen
Min. Backoff
Max. Backoff
Delta-Backoff
Erster schneller Wiederholungsversuch
5
0 Sek.
60 Sekunden
2 Sek
false
Versuch 1 – Verzögerung 0 Sek.
Versuch 2 – Verzögerung ca. 2 Sek.
Versuch 3 – Verzögerung ca. 6 Sek.
Versuch 4 – Verzögerung ca. 14 Sek.
Versuch 5 – Verzögerung ca. 30 Sek.

Ressourcen-IDs für Azure-Dienste

Eine Liste mit den Ressourcen, die verwaltete Identitäten für Azure-Ressourcen unterstützen, finden Sie unter Azure-Dienste, die verwaltete Identitäten für den Zugriff auf andere Dienste verwenden können.

Nächste Schritte