Erişim belirteci almak için Azure VM'sinde Azure kaynakları için yönetilen kimlikleri kullanma

Azure kaynakları için yönetilen kimlikler, Microsoft Entra Id'nin bir özelliğidir. Azure kaynakları için yönetilen kimlikleri destekleyen Azure hizmetlerinin her biri kendi zaman çizelgesine tabidir. Başlamadan önce kaynağınıza yönelik yönetilen kimliklerin kullanılabilirlik durumunu ve bilinen sorunları gözden geçirdiğinizden emin olun.

Azure kaynakları için yönetilen kimlikler, Azure hizmetlerine Microsoft Entra ID üzerinde otomatik olarak yönetilen bir kimlik sağlar. Bu kimliği kullanarak, Microsoft Entra kimlik doğrulamasını destekleyen tüm hizmetlerde kodunuzda kimlik bilgileri bulunmasına gerek kalmadan kimlik doğrulaması yapabilirsiniz.

Bu makalede belirteç alımı için çeşitli kod ve betik örnekleri sağlanmaktadır. Ayrıca belirteç süre sonu ve HTTP hatalarını işleme hakkında yönergeler içerir.

Önkoşullar

Bu makaledeki Azure PowerShell örneklerini kullanmayı planlıyorsanız Azure PowerShell'in en son sürümünü yüklediğinizden emin olun.

Önemli

  • Bu makaledeki tüm örnek kod/betik, istemcinin Azure kaynakları için yönetilen kimliklere sahip bir sanal makinede çalıştığını varsayar. Sanal makinenize uzaktan bağlanmak için Azure portalındaki "Bağlan" sanal makinesi özelliğini kullanın. Vm'de Azure kaynakları için yönetilen kimlikleri etkinleştirme hakkında ayrıntılı bilgi için bkz . Azure portalını veya değişken makalelerden birini (PowerShell, CLI, şablon veya Azure SDK kullanarak) kullanarak VM'de Azure kaynakları için yönetilen kimlikleri yapılandırma.

Önemli

  • Azure kaynakları için yönetilen kimliklerin güvenlik sınırı, kimliğin kullanıldığı kaynaktır. Sanal makinede çalışan tüm kodlar/betikler, üzerinde bulunan tüm yönetilen kimlikler için belirteç isteyebilir ve alabilir.

Genel Bakış

İstemci uygulaması, belirli bir kaynağa erişmek için yalnızca yönetilen kimlik uygulaması erişim belirteci isteyebilir. Belirteç, Azure kaynakları hizmet sorumlusu için yönetilen kimlikleri temel alır. Bu nedenle, istemcinin kendi hizmet sorumlusu altında erişim belirteci alması gerekmez. Belirteç, istemci kimlik bilgileri gerektiren hizmet-hizmet çağrılarında taşıyıcı belirteç olarak kullanıma uygundur.

Bağlantı Açıklama
HTTP kullanarak belirteç alma Azure kaynakları belirteci uç noktası için yönetilen kimlikler için protokol ayrıntıları
Azure.Identity kullanarak belirteç alma Azure.Identity kitaplığını kullanarak belirteç alma
.NET için Microsoft.Azure.Services.AppAuthentication kitaplığını kullanarak belirteç alma .NET istemcisinden Microsoft.Azure.Services.AppAuthentication kitaplığını kullanma örneği
C kullanarak belirteç alma# C# istemcisinden Azure kaynakları REST uç noktası için yönetilen kimlikleri kullanma örneği
Java kullanarak belirteç alma Java istemcisinden Azure kaynakları REST uç noktası için yönetilen kimlikleri kullanma örneği
Go kullanarak belirteç alma Go istemcisinden Azure kaynakları REST uç noktası için yönetilen kimlikleri kullanma örneği
PowerShell kullanarak belirteç alma PowerShell istemcisinden Azure kaynakları REST uç noktası için yönetilen kimlikleri kullanma örneği
CURL kullanarak belirteç alma Bash/CURL istemcisinden Azure kaynakları REST uç noktası için yönetilen kimlikleri kullanma örneği
Belirteç önbelleğe alma işlemini işleme Süresi dolan erişim belirteçlerini işleme kılavuzu
Hata işleme Azure kaynakları belirteci uç noktası için yönetilen kimliklerden döndürülen HTTP hatalarını işleme kılavuzu
Azure hizmetleri için kaynak kimlikleri Desteklenen Azure hizmetleri için kaynak kimlikleri nereden alınır?

HTTP kullanarak belirteç alma

Erişim belirteci almak için temel arabirim REST'i temel alır ve bu da BUNU VM üzerinde çalışan ve HTTP REST çağrıları yapabilen tüm istemci uygulamaları için erişilebilir hale getirir. Bu yaklaşım Microsoft Entra programlama modeline benzer, ancak istemci sanal makinede bir uç nokta kullanır (Microsoft Entra uç noktası ile karşıtlık).

Azure Örnek Meta Veri Hizmeti (I AVH) uç noktasını kullanan örnek istek (önerilir):

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
Öğe Açıklama
GET Uç noktadan veri almak istediğinizi belirten HTTP fiili. Bu durumda, bir OAuth erişim belirteci.
http://169.254.169.254/metadata/identity/oauth2/token Örnek Meta Veri Hizmeti için Azure kaynakları uç noktası için yönetilen kimlikler.
api-version I AVH uç noktasının API sürümünü gösteren bir sorgu dizesi parametresi. API sürümünü veya üzerini 2018-02-01 kullanın.
resource Hedef kaynağın Uygulama Kimliği URI'sini gösteren bir sorgu dizesi parametresi. Ayrıca verilen belirtecin aud (hedef kitle) talebinde de görünür. Bu örnek, Uygulama Kimliği URI'si olan Azure Resource Manager'a erişmek için bir belirteç istemektedir https://management.azure.com/.
Metadata Yönetilen kimlikler için gereken BIR HTTP isteği üst bilgisi alanı. Bu bilgiler, sunucu tarafı istek sahteciliği (SSRF) saldırılarına karşı bir risk azaltma olarak kullanılır. Bu değer küçük harfle "true" olarak ayarlanmalıdır.
object_id (İsteğe bağlı) Belirteci istediğiniz yönetilen kimliğin object_id belirten bir sorgu dizesi parametresi. Vm'nizde kullanıcı tarafından atanan birden çok yönetilen kimlik varsa gereklidir.
client_id (İsteğe bağlı) Belirteci istediğiniz yönetilen kimliğin client_id belirten bir sorgu dizesi parametresi. Vm'nizde kullanıcı tarafından atanan birden çok yönetilen kimlik varsa gereklidir.
msi_res_id (İsteğe bağlı) Belirteci istediğiniz yönetilen kimliğin msi_res_id (Azure Kaynak Kimliği) belirten bir sorgu dizesi parametresi. Vm'nizde kullanıcı tarafından atanan birden çok yönetilen kimlik varsa gereklidir.

Örnek yanıt:

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"
}
Öğe Açıklama
access_token İstenen erişim belirteci. Güvenli bir REST API çağırdığınızda, belirteç istek üst bilgisi alanına "taşıyıcı" belirteç olarak eklenir Authorization ve API'nin çağıranın kimliğini doğrulamasına olanak sağlar.
refresh_token Azure kaynakları için yönetilen kimlikler tarafından kullanılmaz.
expires_in Erişim belirtecinin süresi dolmadan önce, verme zamanından itibaren geçerli olmaya devam eden saniye sayısı. Verme zamanı belirtecin iat talepte bulunabilir.
expires_on Erişim belirtecinin süresi dolduğunda zaman aralığı. Tarih, "1970-01-01T0:0:0Z UTC" (belirtecin exp talebine karşılık gelir) arasındaki saniye sayısı olarak gösterilir.
not_before Erişim belirtecinin etkin olduğu ve kabul edilebildiği zaman aralığı. Tarih, "1970-01-01T0:0:0Z UTC" (belirtecin nbf talebine karşılık gelir) arasındaki saniye sayısı olarak gösterilir.
resource Erişim belirtecinin istendiği kaynak, isteğin resource sorgu dizesi parametresiyle eşleşir.
token_type "Taşıyıcı" erişim belirteci olan belirteç türü, kaynağın bu belirtecin taşıyıcısına erişim verebileceği anlamına gelir.

Azure kimlik istemci kitaplığını kullanarak belirteç alma

Yönetilen kimlikleri kullanmanın önerilen yolu Azure kimlik istemci kitaplığını kullanmaktır. Tüm Azure SDK'ları DefaultAzureCredential için destek sağlayan kitaplıkla Azure.Identity tümleştirilir. Bu sınıf, Azure SDK'ları ile Yönetilen Kimlikleri kullanmayı kolaylaştırır.Daha fazla bilgi edinin

  1. Azure.Identity paketini ve Azure.Security.KeyVault.Secrets gibi diğer gerekli Azure SDK kitaplık paketlerini yükleyin.

  2. Aşağıdaki örnek kodu kullanın. Belirteçleri alma konusunda endişelenmenize gerek yoktur. Azure SDK istemcilerini doğrudan kullanabilirsiniz. Kod, gerekirse belirtecin nasıl alınıp alınmadığını göstermek içindir.

    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);
    

.NET için Microsoft.Azure.Services.AppAuthentication kitaplığını kullanarak belirteç alma

.NET uygulamaları ve işlevleri için, Azure kaynakları için yönetilen kimliklerle çalışmanın en basit yolu Microsoft.Azure.Services.AppAuthentication paketinden geçer. Bu kitaplık, kodunuzu geliştirme makinenizde yerel olarak test etmenizi de sağlar. Visual Studio, Azure CLI veya Active Directory Tümleşik Kimlik Doğrulaması'ndan kullanıcı hesabınızı kullanarak kodunuzu test edebilirsiniz. Bu kitaplıkla yerel geliştirme seçenekleri hakkında daha fazla bilgi için bkz . Microsoft.Azure.Services.AppAuthentication başvurusu. Bu bölümde, kodunuzda kitaplığı kullanmaya nasıl başladığınız gösterilir.

  1. Uygulamanıza Microsoft.Azure.Services.AppAuthentication ve Microsoft.Azure.KeyVault NuGet paketlerine başvurular ekleyin.

  2. Aşağıdaki kodu uygulamanıza ekleyin:

    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));
    

Microsoft.Azure.Services.AppAuthentication ve kullanıma sunulan işlemler hakkında daha fazla bilgi edinmek için bkz . Microsoft.Azure.Services.AppAuthentication başvurusu ve Azure kaynakları için yönetilen kimliklerle App Service ve KeyVault .NET örneği.

C kullanarak belirteç alma#

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");
}

Java kullanarak belirteç alma

Java kullanarak belirteç almak için bu JSON kitaplığını kullanın.

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;
                }
            }
        }
    }
}

Go kullanarak belirteç alma

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)
}

PowerShell kullanarak belirteç alma

Aşağıdaki örnekte, Bir PowerShell istemcisinden Azure kaynakları REST uç noktası için yönetilen kimliklerin nasıl kullanılacağı gösterilmektedir:

  1. Erişim belirteci alma.
  2. Azure Resource Manager REST API'sini çağırmak ve VM hakkında bilgi almak için erişim belirtecini kullanın. Sırasıyla, , ve için abonelik kimliğinizi, kaynak grubu adınızı ve <VM-NAME>sanal makine adınızı <SUBSCRIPTION-ID><RESOURCE-GROUP>değiştirip değiştirmemeye özen gösterin.
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"}

Yanıttan erişim belirtecini ayrıştırma örneği:

# 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

CURL kullanarak belirteç alma

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

Yanıttan erişim belirtecini ayrıştırma örneği:

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

Belirteç önbelleğe alma

Yönetilen kimlikler alt sistemi belirteçleri önbelleğe alır, ancak yine de kodunuzda belirteç önbelleğe alma uygulamanızı öneririz. Kaynağın belirtecin süresinin dolduğunu gösterdiği senaryolara hazırlanmanız gerekir.

Microsoft Entra Id'ye yapılan kablolu aramalar yalnızca aşağıdaki durumlarda sonuçlanır:

  • Önbellek kaçırma işlemi, Azure kaynakları alt sistem önbelleği için yönetilen kimliklerde belirteç olmamasından kaynaklanmaktadır.
  • Önbelleğe alınan belirtecin süresi doldu.

Hata işleme

Yönetilen kimlikler uç noktası, HTTP yanıt iletisi üst bilgisinin durum kodu alanı aracılığıyla hataları 4xx veya 5xx hataları olarak işaretler:

Durum Kodu Hata Nedeni nasıl işlenir
404 Bulunamadı. Uç nokta AVH güncelleştiriliyor. Üstel Geri Alma ile yeniden deneyin. Aşağıdaki yönergelere bakın.
410 güncelleştirmeleri AVH AVH 70 saniye içinde hazır olacağım
429 Çok fazla istek var. AVH kısıtlama sınırına ulaştım. Üstel Geri Alma ile yeniden deneyin. Aşağıdaki yönergelere bakın.
İstekte 4xx Hatası. İstek parametrelerinden biri veya daha fazlası yanlıştı. Yeniden denemeyin. Daha fazla bilgi için hata ayrıntılarını inceleyin. 4xx hataları tasarım zamanı hatalarıdır.
Hizmetten 5xx Geçici hata. Azure kaynakları alt sistemi veya Microsoft Entra Kimliği için yönetilen kimlikler geçici bir hata döndürdü. En az 1 saniye bekledikten sonra yeniden denemek güvenlidir. Çok hızlı veya çok sık yeniden denerseniz, I AVH ve/veya Microsoft Entra Id bir hız sınırı hatası (429) döndürebilir.
timeout Uç nokta AVH güncelleştiriliyor. Üstel Geri Alma ile yeniden deneyin. Aşağıdaki yönergelere bakın.

Bir hata oluşursa, ilgili HTTP yanıt gövdesinde hata ayrıntılarıyla birlikte JSON bulunur:

Öğe Açıklama
error Hata tanımlayıcısı.
error_description Hatanın ayrıntılı açıklaması. Hata açıklamaları istediğiniz zaman değişebilir. Hata açıklamasındaki değerlere göre dallayan kod yazmayın.

HTTP yanıt başvurusu

Bu bölümde olası hata yanıtları belgelemektedir. "200 Tamam" durumu başarılı bir yanıttır ve erişim belirteci access_token öğesindeki yanıt gövdesi JSON'unda yer alır.

Durum kodu Hata Hata Açıklaması Çözüm
400 Hatalı İstek invalid_resource AADSTS50001: URI> adlı< uygulama TENANT-ID> adlı <kiracıda bulunamadı. Bu ileti, kiracı yöneticisinin uygulamayı yüklemediğini veya hiçbir kiracı kullanıcısının uygulamayı yüklemediğini gösterir. Kimlik doğrulama isteğinizi yanlış kiracıya göndermiş olabilirsiniz.\ (Yalnızca Linux)
400 Hatalı İstek bad_request_102 Gerekli meta veri üst bilgisi belirtilmedi Metadata İstek üst bilgisi alanı isteğinizde yok veya yanlış biçimlendirildi. Değerin küçük harfle truebelirtilmesi gerekir. Bir örnek için önceki REST bölümünde yer alan "Örnek istek" bölümüne bakın.
401 Yetkisiz unknown_source Bilinmeyen Kaynak <URI'si> HTTP GET isteği URI'nizin doğru biçimlendirildiğini doğrulayın. Bölümü scheme:host/resource-path olarak http://localhost:50342/oauth2/tokenbelirtilmelidir. Bir örnek için önceki REST bölümünde yer alan "Örnek istek" bölümüne bakın.
invalid_request İstekte gerekli bir parametre eksik, geçersiz parametre değeri var, birden çok parametre içeriyor veya başka bir şekilde hatalı biçimlendirilmiş.
unauthorized_client İstemcinin bu yöntemi kullanarak erişim belirteci isteme yetkisi yok. Azure kaynakları için doğru yapılandırılmış yönetilen kimliklere sahip olmayan bir VM'de yapılan istek neden oldu. VM yapılandırmasıyla ilgili yardıma ihtiyacınız varsa bkz . Azure portalını kullanarak VM'de Azure kaynakları için yönetilen kimlikleri yapılandırma.
access_denied Kaynak sahibi veya yetkilendirme sunucusu isteği reddetti.
unsupported_response_type Yetkilendirme sunucusu bu yöntemi kullanarak erişim belirteci almayı desteklemez.
invalid_scope İstenen kapsam geçersiz, bilinmiyor veya hatalı biçimlendirilmiş.
500 İç sunucu hatası bilinmiyor Active Directory'den belirteç alınamadı. Ayrıntılar için bkz. dosya yolundaki <günlükler> VM'de Azure kaynakları için yönetilen kimliklerin etkinleştirildiğini doğrulayın. VM yapılandırmasıyla ilgili yardıma ihtiyacınız varsa bkz . Azure portalını kullanarak VM'de Azure kaynakları için yönetilen kimlikleri yapılandırma.

Ayrıca HTTP GET istek URI'nizin, özellikle sorgu dizesinde belirtilen kaynak URI'sinin doğru biçimlendirildiğini doğrulayın. Bir örnek için önceki REST bölümünde yer alan "Örnek istek"e veya hizmetlerin ve ilgili kaynak kimliklerinin listesi için Microsoft Entra kimlik doğrulamasını destekleyen Azure hizmetlerine bakın.

Önemli

Yeniden deneme kılavuzu

404, 429 veya 5xx hata kodu alırsanız yeniden denemeniz önerilir (yukarıdaki Hata işleme bölümüne bakın). 410 hatası alırsanız bu, güncelleştirmeleri AVH ve en fazla 70 saniye içinde kullanılabilir olacağını gösterir.

Azaltma sınırları, I AVH uç noktasına yapılan çağrı sayısı için geçerlidir. Azaltma eşiği aşıldığında AVH kısıtlama etkinken uç nokta diğer istekleri sınırlar. Bu süre boyunca I AVH uç noktası 429 HTTP durum kodunu ("Çok fazla istek") döndürür ve istekler başarısız olur.

Yeniden denemek için aşağıdaki stratejiyi öneririz:

Yeniden deneme stratejisi Ayarlar Değerler Nasıl çalışır?
ExponentialBackoff Yeniden deneme sayısı
En düşük geri alma
En yüksek geri alma
Delta geri alma
İlk hızlı yeniden deneme
5
0 sn
60 sn
2 sn
yanlış
Deneme 1 - 0 sn gecikme
Deneme 2 - yaklaşık 2 sn gecikme
Deneme 3 - yaklaşık 6 sn gecikme
Deneme 4 - yaklaşık 14 sn gecikme
Deneme 5 - yaklaşık 30 sn gecikme

Azure hizmetleri için kaynak kimlikleri

Azure kaynakları için yönetilen kimlikleri destekleyen kaynakların listesi için bkz . Yönetilen kimliklerle Azure Hizmetleri desteği .

Sonraki adımlar

  • Azure vm'sinde Azure kaynakları için yönetilen kimlikleri etkinleştirmek için bkz . Azure portalını kullanarak VM'de Azure kaynakları için yönetilen kimlikleri yapılandırma.