Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Tożsamości zarządzane dla zasobów platformy Azure zapewniają usługom tej platformy automatycznie zarządzaną tożsamość w usłudze Microsoft Entra ID. Za pomocą tej tożsamości można uwierzytelnić się w dowolnej usłudze obsługującej uwierzytelnianie usługi Microsoft Entra bez konieczności przechowywania poświadczeń w kodzie.
Ten artykuł zawiera różne przykłady kodu i skryptów służące do uzyskiwania tokenów. Zawiera również wskazówki dotyczące obsługi wygaśnięcia tokenu i błędów HTTP.
Wymagania wstępne
- Jeśli nie znasz funkcji tożsamości zarządzanych dla zasobów platformy Azure, zapoznaj się z tym omówieniem. Jeśli nie masz jeszcze konta platformy Azure, przed kontynuowaniem utwórz bezpłatne konto.
Jeśli planujesz użyć przykładów Azure PowerShell w tym artykule, pamiętaj o zainstalowaniu najnowszej wersji Azure PowerShell.
Ważne
- Cały przykładowy kod/skrypt w tym artykule zakłada, że klient jest uruchomiony na maszynie wirtualnej z tożsamościami zarządzanymi dla zasobów platformy Azure. Użyj funkcji "Połącz" maszyny wirtualnej w Azure Portal, aby zdalnie nawiązać połączenie z maszyną wirtualną. Aby uzyskać szczegółowe informacje na temat włączania tożsamości zarządzanych dla zasobów platformy Azure na maszynie wirtualnej, zobacz Konfigurowanie tożsamości zarządzanych dla zasobów platformy Azure na maszynie wirtualnej przy użyciu witryny Azure Portal lub jednego z artykułów wariantów (przy użyciu programu PowerShell, interfejsu wiersza polecenia, szablonu lub zestawu Azure SDK).
Ważne
- Granica zabezpieczeń tożsamości zarządzanych dla zasobów platformy Azure to zasób, w którym jest używana tożsamość. Wszystkie kody/skrypty uruchomione na maszynie wirtualnej mogą żądać i pobierać tokeny dla dowolnych tożsamości zarządzanych dostępnych na niej.
Przegląd
Aplikacja kliencka może zażądać tokenu dostępu tylko do aplikacji tożsamości zarządzanej w celu uzyskania dostępu do danego zasobu. Token jest oparty na tożsamościach zarządzanych dla jednostki usługi zasobów platformy Azure. W związku z tym nie ma potrzeby, aby klient uzyskał token dostępu w ramach własnej jednostki usługi. Token jest odpowiedni do użycia jako token okaziciela w wywołaniach typu usługa-usługa wymagających poświadczeń klienta.
Odnośnik | Opis |
---|---|
Pobieranie tokenu przy użyciu protokołu HTTP | Szczegóły protokołu dla tożsamości zarządzanych dla punktu końcowego tokenu zasobów platformy Azure |
Uzyskiwanie tokenu przy użyciu Azure.Identity | Pobieranie tokenu przy użyciu biblioteki Azure.Identity |
Pobieranie tokenu przy użyciu biblioteki Microsoft.Azure.Services.AppAuthentication dla platformy .NET | Przykład użycia biblioteki Microsoft.Azure.Services.AppAuthentication z klienta .NET |
Pobieranie tokenu przy użyciu języka C# | Przykład użycia tożsamości zarządzanych dla punktu końcowego REST zasobów platformy Azure z klienta języka C# |
Pobieranie tokenu przy użyciu języka Java | Przykład użycia tożsamości zarządzanych dla punktu końcowego REST zasobów platformy Azure z klienta Java |
Uzyskiwanie tokenu przy użyciu języka Go | Przykład użycia tożsamości zarządzanych dla punktu końcowego REST zasobów platformy Azure z klienta języka Go |
Pobieranie tokenu przy użyciu programu PowerShell | Przykład użycia tożsamości zarządzanych dla punktu końcowego REST zasobów platformy Azure z klienta programu PowerShell |
Zdobądź token za pomocą CURL | Przykład użycia tożsamości zarządzanych dla punktu końcowego REST zasobów platformy Azure z klienta powłoki Bash/CURL |
Obsługa buforowania tokenów | Wskazówki dotyczące obsługi wygasłych tokenów dostępu |
obsługa błędów | Wskazówki dotyczące obsługi błędów HTTP zwracanych z tożsamości zarządzanych dla punktu końcowego tokenu zasobów platformy Azure |
Identyfikatory zasobów dla usług platformy Azure | Gdzie można uzyskać identyfikatory zasobów dla obsługiwanych usług platformy Azure |
Pobieranie tokenu przy użyciu protokołu HTTP
Podstawowy interfejs uzyskiwania tokenu dostępu jest oparty na protokole REST, dzięki czemu jest on dostępny dla dowolnej aplikacji klienckiej uruchomionej na maszynie wirtualnej, która może wykonywać wywołania HTTP REST. To podejście jest podobne do modelu programowania Microsoft Entra, z tą różnicą, że klient używa punktu końcowego na maszynie wirtualnej (a nie punktu końcowego Microsoft Entra).
Przykładowe żądanie korzystające z punktu końcowego usługi Azure Instance Metadata Service (IMDS) (zalecane):
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
Składnik | Opis |
---|---|
GET |
Czasownik HTTP wskazujący, że chcesz pobrać dane z punktu końcowego. W takim przypadku token dostępu OAuth. |
http://169.254.169.254/metadata/identity/oauth2/token |
Tożsamości zarządzane dla punktu końcowego zasobów platformy Azure dla usługi metadanych wystąpienia. |
api-version |
Parametr ciągu zapytania wskazujący wersję interfejsu API dla punktu końcowego IMDS. Użyj interfejsu API w wersji 2018-02-01 lub nowszej. |
resource |
Parametr ciągu zapytania wskazujący identyfikator URI aplikacji zasobu docelowego. Pojawia się również w aud oświadczeniu (odbiorców) wyemitowanego tokena. W tym przykładzie żąda tokenu w celu uzyskania dostępu do usługi Azure Resource Manager, który ma identyfikator URI identyfikatora aplikacji .https://management.azure.com/ |
Metadata |
Pole nagłówka żądania HTTP wymagane przez tożsamości zarządzane. Te informacje są używane jako środki zaradcze przed atakami typu sfałszowanie żądań po stronie serwera (SSRF). Ta wartość musi być ustawiona na "true", we wszystkich małych literach. |
object_id |
(Opcjonalnie) Parametr ciągu zapytania wskazujący object_id tożsamości zarządzanej, dla której chcesz użyć tokenu. Wymagane, jeśli maszyna wirtualna ma wiele tożsamości zarządzanych przypisanych przez użytkownika. |
client_id |
(Opcjonalnie) Parametr ciągu zapytania wskazujący client_id tożsamości zarządzanej, dla której chcesz użyć tokenu. Wymagane, jeśli maszyna wirtualna ma wiele tożsamości zarządzanych przypisanych przez użytkownika. |
msi_res_id |
(Opcjonalnie) Parametr ciągu zapytania wskazujący msi_res_id (identyfikator zasobu platformy Azure) tożsamości zarządzanej, dla której chcesz użyć tokenu. Wymagane, jeśli maszyna wirtualna ma wiele tożsamości zarządzanych przypisanych przez użytkownika. |
Przykładowa odpowiedź:
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"
}
Składnik | Opis |
---|---|
access_token |
Żądany token dostępu. Po wywołaniu zabezpieczonego interfejsu API REST token jest osadzany w polu nagłówka Authorization żądania jako token "okaziciela", co umożliwia interfejsowi API uwierzytelnienie obiektu wywołującego. |
refresh_token |
Nie jest używane przez tożsamości zarządzane dla zasobów platformy Azure. |
expires_in |
Liczba sekund, przez które token dostępu będzie nadal ważny przed wygaśnięciem, od czasu wystawienia. Czas wydania tokenu można znaleźć w oświadczeniu iat . |
expires_on |
Przedział czasu wygaśnięcia tokenu dostępu. Data jest reprezentowana jako liczba sekund od "1970-01-01T0:0:0Z UTC" (odpowiada oświadczeniu tokenu exp ). |
not_before |
Przedział czasu, w którym token dostępu zaczyna obowiązywać i może zostać zaakceptowany. Data jest reprezentowana jako liczba sekund od "1970-01-01T0:0:0Z UTC" (odpowiada oświadczeniu tokenu nbf ). |
resource |
Zasób, dla którego zażądano tokenu dostępu, który jest zgodny z parametrem resource ciągu zapytania żądania. |
token_type |
Typ tokenu, który jest "Bearer" tokenem dostępu, co oznacza, że zasób może udzielić dostępu osobie posiadającej ten token. |
Uzyskiwanie tokenu przy użyciu biblioteki klienta tożsamości platformy Azure
Korzystanie z biblioteki klienta tożsamości platformy Azure jest zalecanym sposobem korzystania z tożsamości zarządzanych. Wszystkie zestawy SDK platformy Azure są zintegrowane z biblioteką Azure.Identity
, która zapewnia obsługę elementu DefaultAzureCredential. Ta klasa ułatwia korzystanie z tożsamości zarządzanych z zestawami SDK platformy Azure.Dowiedz się więcej
Zainstaluj pakiet Azure.Identity i inne wymagane pakiety biblioteki zestawu Azure SDK, takie jak Azure.Security.KeyVault.Secrets.
Skorzystaj z poniższego przykładowego kodu. Nie musisz się martwić o zdobycie tokenów. Możesz bezpośrednio użyć klientów zestawu Azure SDK. Kod służy do pokazania, jak uzyskać token, jeśli zajdzie taka potrzeba.
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);
Pobieranie tokenu przy użyciu biblioteki Microsoft.Azure.Services.AppAuthentication dla platformy .NET
W przypadku aplikacji i funkcji platformy .NET najprostszym sposobem pracy z tożsamościami zarządzanymi dla zasobów platformy Azure jest skorzystanie z pakietu Microsoft.Azure.Services.AppAuthentication. Ta biblioteka pozwoli Ci również przetestować kod lokalnie na komputerze deweloperskim. Kod można przetestować przy użyciu konta użytkownika z programu Visual Studio, interfejsu wiersza polecenia platformy Azure lub zintegrowanego uwierzytelniania usługi Active Directory. Aby uzyskać więcej informacji na temat lokalnych opcji programowania za pomocą tej biblioteki, zobacz dokumentację Microsoft.Azure.Services.AppAuthentication. W tej sekcji pokazano, jak rozpocząć pracę z biblioteką w kodzie.
Dodaj odwołania do pakietów NuGet Microsoft.Azure.Services.AppAuthentication i Microsoft.Azure.KeyVault do aplikacji.
Dodaj następujący kod do aplikacji:
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));
Aby dowiedzieć się więcej na temat Microsoft.Azure.Services.AppAuthentication i operacji, które uwidacznia, zobacz dokumentację Microsoft.Azure.Services.AppAuthentication oraz przykład App Service i KeyVault z tożsamościami zarządzanymi dla zasobów platformy Azure na platformie .NET.
Pobieranie tokenu przy użyciu języka 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");
}
Pobieranie tokenu przy użyciu języka Java
Użyj tej biblioteki JSON , aby pobrać token przy użyciu języka Java.
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;
}
}
}
}
}
Uzyskiwanie tokenu przy użyciu języka 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)
}
Pobieranie tokenu przy użyciu programu PowerShell
W poniższym przykładzie pokazano, jak używać tożsamości zarządzanych dla punktu końcowego REST zasobów platformy Azure z klienta programu PowerShell w celu:
- Uzyskaj token dostępu.
- Użyj tokenu dostępu, aby wywołać interfejs API REST usługi Azure Resource Manager i uzyskać informacje o maszynie wirtualnej. Pamiętaj, aby zastąpić identyfikator subskrypcji, nazwę grupy zasobów i nazwę maszyny wirtualnej odpowiednio dla
<SUBSCRIPTION-ID>
,<RESOURCE-GROUP>
i<VM-NAME>
.
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"}
Przykład sposobu analizowania tokenu dostępu z odpowiedzi:
# 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
Zdobądź token za pomocą 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
Przykład sposobu analizowania tokenu dostępu z odpowiedzi:
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
Buforowanie tokenów
Podsystem tożsamości zarządzanych buforuje tokeny, ale nadal zalecamy zaimplementowanie buforowania tokenów w kodzie. Należy przygotować się na scenariusze, w których zasób wskazuje, że token wygasł.
Wywołania on-the-wire z identyfikatorem Microsoft Entra są wynikiem tylko wtedy, gdy:
- Brak pamięci podręcznej występuje z powodu braku tokenu w tożsamościach zarządzanych dla pamięci podręcznej podsystemu zasobów platformy Azure.
- Token w pamięci podręcznej wygasł.
Obsługa błędów
Punkt końcowy tożsamości zarządzanych sygnalizuje błędy za pośrednictwem pola kodu stanu nagłówka komunikatu odpowiedzi HTTP jako błędy 4xx lub 5xx:
Kod stanu | Przyczyna błędu | Jak obsługiwać |
---|---|---|
404 Nie znaleziono. | Punkt końcowy IMDS jest aktualizowany. | Ponów próbę przy użyciu wykładniczego opóźniania. Zobacz wskazówki poniżej. |
410 | IMDS przechodzi aktualizacje | IMDS będzie dostępny w ciągu 70 sekund |
429 Zbyt wiele żądań. | IMDS Osiągnięto limit przepustnicy. | Ponów próbę przy użyciu wykładniczego opóźniania. Zobacz wskazówki poniżej. |
Błąd 4xx w żądaniu. | Co najmniej jeden parametr żądania był niepoprawny. | Nie próbuj ponownie. Sprawdź szczegóły błędu, aby uzyskać więcej informacji. Błędy 4xx to błędy czasu projektowania. |
5xx Błąd przejściowy z usługi. | Tożsamości zarządzane dla podsystemu zasobów platformy Azure lub identyfikatora Microsoft Entra zwróciły błąd przejściowy. | Można bezpiecznie ponowić próbę po odczekaniu co najmniej 1 sekundy. Jeśli ponowisz próbę zbyt szybko lub zbyt często, IMDS i/lub identyfikator Microsoft Entra mogą zwrócić błąd limitu szybkości (429). |
limit czasu | Punkt końcowy IMDS jest aktualizowany. | Ponów próbę przy użyciu wykładniczego opóźniania. Zapoznaj się ze wskazówkami później. |
Jeśli wystąpi błąd, odpowiednia treść odpowiedzi HTTP zawiera kod JSON ze szczegółami błędu:
Składnik | Opis |
---|---|
błąd | Identyfikator błędu. |
opis błędu | Szczegółowy opis błędu. Opisy błędów mogą ulec zmianie w dowolnym momencie. Nie należy pisać kodu, który rozgałęzia się na podstawie wartości w opisie błędu. |
Dokumentacja odpowiedzi HTTP
W tej sekcji opisano możliwe odpowiedzi na błędy. Stan "200 OK" to pomyślna odpowiedź, a token dostępu jest zawarty w formacie JSON treści odpowiedzi w elemencie access_token.
Kod stanu | Błąd | Opis błędu | Rozwiązanie |
---|---|---|---|
400 Nieprawidłowe żądanie | zasób_nieważny | AADSTS50001: Aplikacja o nazwie <URI> nie została znaleziona w dzierżawie o nazwie <TENANT-ID.> Ten komunikat pokazuje, czy administrator dzierżawy nie zainstalował aplikacji lub żaden użytkownik dzierżawy nie wyraził na nią zgody. Być może żądanie uwierzytelnienia zostało wysłane do niewłaściwej dzierżawy.\ | (Tylko Linux) |
400 Nieprawidłowe żądanie | zła_prośba_102 | Nie określono wymaganego nagłówka metadanych | W żądaniu brakuje pola nagłówka Metadata żądania lub jest ono niepoprawnie sformatowane. Wartość musi być określona jako true , wszystkimi małymi literami. Aby zapoznać się z przykładem, zobacz "Przykładowe żądanie" w poprzedniej sekcji REST. |
401 Brak autoryzacji | unknown_source | Nieznany identyfikator< URI> źródła | Sprawdź, czy identyfikator URI żądania HTTP GET jest poprawnie sformatowany. Porcja scheme:host/resource-path musi być określona jako http://localhost:50342/oauth2/token . Aby zapoznać się z przykładem, zobacz "Przykładowe żądanie" w poprzedniej sekcji REST. |
nieprawidłowe_żądanie | W żądaniu brakuje wymaganego parametru, zawiera nieprawidłową wartość parametru, zawiera parametr więcej niż raz lub jest w inny sposób źle sformułowane. | ||
nieautoryzowany_klient | Klient nie jest upoważniony do żądania tokenu dostępu przy użyciu tej metody. | Spowodowane żądaniem na maszynie wirtualnej, która nie ma poprawnie skonfigurowanych tożsamości zarządzanych dla zasobów platformy Azure. Zobacz Konfigurowanie tożsamości zarządzanych dla zasobów platformy Azure na maszynie wirtualnej przy użyciu Azure Portal , jeśli potrzebujesz pomocy dotyczącej konfiguracji maszyny wirtualnej. | |
odmowa dostępu | Właściciel zasobu lub serwer autoryzacji odrzucił żądanie. | ||
nieobsługiwany_typ_odpowiedzi | Serwer autoryzacji nie obsługuje uzyskiwania tokenu dostępu przy użyciu tej metody. | ||
nieprawidłowy_zakres | Żądany zakres jest nieprawidłowy, nieznany lub zniekształcony. | ||
500 Wewnętrzny błąd serwera | nieznany | Nie można pobrać tokenu z usługi Active Directory. Aby uzyskać szczegółowe informacje, zobacz dzienniki w <ścieżce> pliku | Sprawdź, czy maszyna wirtualna ma włączone tożsamości zarządzane dla zasobów platformy Azure. Zobacz Konfigurowanie tożsamości zarządzanych dla zasobów platformy Azure na maszynie wirtualnej przy użyciu Azure Portal , jeśli potrzebujesz pomocy dotyczącej konfiguracji maszyny wirtualnej. Sprawdź również, czy identyfikator URI żądania HTTP GET jest poprawnie sformatowany, w szczególności identyfikator URI zasobu określony w ciągu zapytania. Zobacz przykład "Przykładowe żądanie" w poprzedniej sekcji REST lub usługi platformy Azure, które obsługują uwierzytelnianie Microsoft Entra , aby uzyskać listę usług i ich odpowiednich identyfikatorów zasobów. |
Ważne
- IMDS nie jest przeznaczony do użytku za serwerem proxy i nie jest to obsługiwane. Aby zapoznać się z przykładami pomijania serwerów proxy, zapoznaj się z przykładami metadanych wystąpienia platformy Azure.
Wskazówki dotyczące ponawiania prób
Ponów próbę, jeśli zostanie wyświetlony kod błędu 404, 429 lub 5xx (patrz Obsługa błędów). Jeśli pojawi się błąd 410, oznacza to, że IMDS przechodzi aktualizacje i będzie dostępny w ciągu maksymalnie 70 sekund.
Limity ograniczania przepustowości mają zastosowanie do liczby połączeń wykonanych z punktem końcowym IMDS. Po przekroczeniu progu ograniczania przepustowości punkt końcowy IMDS ogranicza wszelkie dalsze żądania w czasie działania ograniczenia. W tym okresie punkt końcowy IMDS zwraca kod stanu HTTP 429 ("Zbyt wiele żądań"), a żądania kończą się niepowodzeniem.
W przypadku ponawiania próby zalecamy następującą strategię:
Strategia ponawiania prób | Ustawienia | Wartości | Jak to działa |
---|---|---|---|
Wykładniczy wycofanie | Liczba ponownych prób Minimalny wycofanie Maksymalne wycofanie Różnica w liczbie wycofań Pierwsza szybka ponowna próba |
5 0 sekund 60 sekund 2 sekundy fałszywy |
Próba 1 — opóźnienie 0 sekund Próba 2 - opóźnienie ~2 sekundy Próba 3 - opóźnienie ~6 sekund Próba 4 - opóźnienie ~14 sekund Próba 5 - opóźnienie ~30 sekund |
Identyfikatory zasobów dla usług platformy Azure
Zobacz Usługi platformy Azure z obsługą tożsamości zarządzanych , aby uzyskać listę zasobów, które obsługują tożsamości zarządzane dla zasobów platformy Azure.
Dalsze kroki
- Aby włączyć tożsamości zarządzane dla zasobów platformy Azure na maszynie wirtualnej platformy Azure, zobacz Konfigurowanie tożsamości zarządzanych dla zasobów platformy Azure na maszynie wirtualnej przy użyciu witryny Azure Portal.