Guide pratique de l’utilisation d’identités managées pour ressources Azure sur une machine virtuelle Azure afin d’acquérir un jeton d’accès

Les identités managées pour les ressources Azure sont une fonctionnalité de Microsoft Entra ID. Les services Azure prenant en charge les identités managées pour ressources Azure sont soumis à leur propre chronologie. Assurez-vous de passer en revue l’état Disponibilité des identités gérées pour votre ressource et les problèmes connus avant de commencer.

Les identités managées pour les ressources Azure fournissent aux services Azure une identité automatiquement gérée dans Microsoft Entra ID. Vous pouvez utiliser cette identité pour vous authentifier auprès de n’importe quel service prenant en charge l’authentification Microsoft Entra, sans avoir d’informations d’identification dans votre code.

Cet article fournit divers exemples de code et de script pour l’acquisition de jetons. Il contient également des conseils sur la gestion de l’expiration des jetons et des erreurs HTTP.

Prérequis

Si vous envisagez d’utiliser les exemples de Azure PowerShell dans cet article, veillez à installer la dernière version de Azure PowerShell.

Important

  • Tous les exemples de code et de scripts présentés dans cet article partent du principe que le client s’exécute sur une machine virtuelle avec des identités managées pour ressources Azure. Utilisez la fonctionnalité « Se connecter » de la machine virtuelle dans le portail Azure, pour vous connecter à distance à votre machine virtuelle. Pour plus d’informations sur l’activation d’identités managées pour ressources Azure sur une machine virtuelle, voir Configurer des identités managées pour ressources Azure sur une machine virtuelle en utilisant le portail Azure, ou l’une des variantes de cet article (en utilisant PowerShell, CLI, un modèle ou un Kit de développement logiciel (SDK) Azure).

Important

  • La limite de sécurité des identités managées pour les ressources Azure est la ressource dans laquelle l’identité est utilisée. Tous les scripts et codes exécutés sur une machine virtuelle peuvent demander et récupérer des jetons pour les identités disponibles sur celle-ci.

Vue d’ensemble

Une application cliente peut demander un jeton d’accès d’application uniquement d’identité managée pour accéder à une ressource donnée. Le jeton est basé sur le principal du service des identités managées pour ressources Azure. Par conséquent, il n’est pas nécessaire que le client obtienne un jeton d’accès sous son propre principal du service. Le jeton peut être utilisé comme un jeton du porteur dans les appels de service à service nécessitant des informations d’identification du client.

Lien Description
Obtenir un jeton par HTTP Détails du protocole pour le point de terminaison de jeton d’identités managées pour ressources Azure
Obtenir un jeton à l’aide d’Azure.Identity Obtenir un jeton à l’aide de la bibliothèque Azure.Identity
Obtenir un jeton à l’aide de la bibliothèque Microsoft.Azure.Services.AppAuthentication pour .NET Exemple d’utilisation de la bibliothèque Microsoft.Azure.Services.AppAuthentication à partir d’un client .NET
Obtenir un jeton par C# Exemple d’utilisation d’un point de terminaison REST d’identités managées pour ressources Azure à partir d’un client C#
Obtenir un jeton par le biais de Java Exemple d’utilisation d’un point de terminaison REST d’identités managées pour ressources Azure à partir d’un client Java
Obtenir un jeton par Go Exemple d’utilisation d’un point de terminaison REST d’identités managées pour ressources Azure à partir d’un client Go
Obtenir un jeton à l’aide de PowerShell Exemple d’utilisation d’un point de terminaison REST d’identités managées pour ressources Azure à partir d’un client PowerShell
Obtenir un jeton par CURL Exemple d’utilisation d’un point de terminaison REST d’identités managées pour ressources Azure à partir d’un client Bash/CURL
Gestion de la mise en cache des jetons Conseils pour la gestion des jetons d’accès expirés
Gestion des erreurs Conseils pour la gestion des erreurs HTTP retournées par le point de terminaison de jeton d’identités managées pour ressources Azure
ID de ressource pour les services Azure Où obtenir les ID de ressource pour les services Azure pris en charge

Obtenir un jeton par HTTP

L’interface fondamentale pour l’acquisition d’un jeton d’accès est basée sur REST, le rendant accessible à toute application cliente en cours d’exécution sur la machine virtuelle et pouvant effectuer des appels REST par HTTP. Cette approche est similaire au modèle de programmation Microsoft Entra, sauf que le client utilise un point de terminaison sur la machine virtuelle (par rapport à un point de terminaison Microsoft Entra).

Exemple de requête utilisant le point de terminaison IMDS (Instance Metadata Service) Azure (recommandé) :

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
Élément Description
GET Le verbe HTTP, indiquant votre souhait de récupérer des données du point de terminaison. Dans ce cas, un jeton d’accès OAuth.
http://169.254.169.254/metadata/identity/oauth2/token Le point de terminaison d’identités managées pour ressources Azure pour Instance Metadata Service.
api-version Un paramètre de chaîne de requête qui indique la version d’API pour le point de terminaison IMDS. Utilisez la version d’API 2018-02-01 ou une version ultérieure.
resource Un paramètre de chaîne de requête, indiquant l’URI ID d’application de la ressource cible. Il apparaît également dans la revendication aud (audience) du jeton émis. Cet exemple demande un jeton pour accéder à Azure Resource Manager, qui possède un URI ID d’application, https://management.azure.com/.
Metadata Champ d’en-tête de requête HTTP requis par les identités managées. Ces informations sont utilisées pour atténuer les attaques de falsification de requête côté serveur (SSRF). Cette valeur doit être définie sur « true », en minuscules.
object_id (Facultatif) Un paramètre de chaîne de requête, indiquant l’élément object_id de l’identité managée pour laquelle vous souhaitez obtenir le jeton. Obligatoire, si votre machine virtuelle possède plusieurs identités managées affectées par l’utilisateur.
client_id (Facultatif) Un paramètre de chaîne de requête, indiquant l’élément client_id de l’identité managée pour laquelle vous souhaitez obtenir le jeton. Obligatoire, si votre machine virtuelle possède plusieurs identités managées affectées par l’utilisateur.
msi_res_id (Facultatif) Un paramètre de chaîne de requête, indiquant l’élément msi_res_id (ID de la ressource Azure) de l’identité managée pour laquelle vous souhaitez obtenir le jeton. Obligatoire, si votre machine virtuelle possède plusieurs identités managées affectées par l’utilisateur.

Exemple de réponse :

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"
}
Élément Description
access_token Le jeton d’accès demandé. Lorsque vous appelez une API REST sécurisée, le jeton est incorporé dans le champ d’en-tête de requête Authorization comme un jeton « du porteur », autorisant l’API à authentifier l’appelant.
refresh_token Non utilisé par les identités managées pour ressources Azure.
expires_in Le nombre de secondes pendant lesquelles le jeton d’accès est toujours valide, avant d’expirer, à partir de son émission. L’heure d’émission est accessible dans la revendication iat du jeton.
expires_on L’intervalle de temps lorsque le jeton d’accès expire. La date est exprimée en nombre de secondes à partir de « 1970-01-01T0:0:0Z UTC » (correspond à la revendication exp du jeton).
not_before L’intervalle de temps pendant lequel le jeton d’accès prend effet, et peut être accepté. La date est exprimée en nombre de secondes à partir de « 1970-01-01T0:0:0Z UTC » (correspond à la revendication nbf du jeton).
resource La ressource pour laquelle le jeton d’accès a été demandé, correspondant au paramètre de chaîne de requête resource de la requête.
token_type Le type de jeton, qui est un jeton d’accès « du porteur », ce qui signifie que la ressource peut donner l’accès au porteur de ce jeton.

Obtenir un jeton à l’aide de la bibliothèque de client d’identité Azure

L’utilisation de la bibliothèque de client d’identité Azure est la méthode recommandée pour utiliser des identités managées. Tous les kits de développement logiciel (SDK) Azure sont intégrés à la bibliothèque Azure.Identity, qui prend en charge DefaultAzureCredential. Cette classe facilite l’utilisation des identités managées avec les kits de développement logiciel (SDK) Azure.En savoir plus

  1. Installez le package Azure.Identity et les autres packages de bibliothèque de kit de développement logiciel (SDK) Azure nécessaires, comme Azure.Security.KeyVault.Secrets.

  2. Utilisez l’exemple de code ci-dessous. Vous n’avez pas à vous inquiéter de recevoir des jetons expirés. Vous pouvez utiliser directement les clients du kit de développement logiciel (SDK) Azure. Le code est destiné à illustrer comment obtenir le jeton, si nécessaire.

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

Obtenir un jeton à l’aide de la bibliothèque Microsoft.Azure.Services.AppAuthentication pour .NET

Pour les applications et fonctions .NET, la façon la plus simple d’utiliser des identités managées pour ressources Azure consiste à se servir du package Microsoft.Azure.Services.AppAuthentication. Cette bibliothèque vous permet également de tester votre code localement sur votre ordinateur de développement. Vous pouvez tester votre code à l’aide de votre compte d’utilisateur à partir de Visual Studio, d’Azure CLI ou de l’authentification intégrée Active Directory. Pour plus d’informations sur les options de développement local avec cette bibliothèque, consultez le Guide de référence technique sur Microsoft.Azure.Services.AppAuthentication. Cette section vous montre comment prendre en main la bibliothèque dans votre code.

  1. Ajoutez des références aux packages NuGet Microsoft.Azure.Services.AppAuthentication et Microsoft.Azure.KeyVault à votre application.

  2. Ajoutez le code suivant à votre application :

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

Pour en savoir plus sur Microsoft.Azure.Services.AppAuthentication et les opérations qu’il expose, voir le Guide de référence technique sur Microsoft.Azure.Services.AppAuthentication et l’exemple .NET d’utilisation d’App Service et de Key Vault avec des identités managées pour ressources Azure.

Obtenir un jeton par 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");
}

Obtenir un jeton par le biais de Java

Utilisez cette bibliothèque JSON pour récupérer un jeton à l’aide de 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;
                }
            }
        }
    }
}

Obtenir un jeton par 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)
}

Obtenir un jeton à l’aide de PowerShell

L’exemple suivant montre comment utiliser le point de terminaison REST d’identités managées pour ressources Azure à partir d’un client PowerShell :

  1. Obtenez un jeton d’accès.
  2. Utilisez le jeton d’accès pour appeler une API REST de Azure Resource Manager et obtenez des informations sur la machine virtuelle. Indiquez votre ID d’abonnement, le nom de groupe de ressources et le nom de la machine virtuelle respectivement à la place de <SUBSCRIPTION-ID>, <RESOURCE-GROUP>, et <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"}

Exemple d’extraction du jeton d’accès de la réponse :

# 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

Obtenir un jeton par 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

Exemple d’extraction du jeton d’accès de la réponse :

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

Mise en cache de jeton

Le sous-système d’identités managées met en cache les jetons, mais nous vous recommandons quand même d’implémenter la mise en cache des jetons dans votre code. Vous devez vous préparer pour les scénarios dans lesquels la ressource indique que le jeton a expiré.

Les appels téléphoniques vers Microsoft Entra ID résultent uniquement lorsque :

  • Une absence de mise en cache se produit en raison de l’absence de jeton dans le cache du sous-système des identités managées pour les ressources Azure.
  • Le jeton mis en cache a expiré.

Gestion des erreurs

Le point de terminaison d’identités managées signale des erreurs par le biais du champ de code d’état de l’en-tête du message de la réponse HTTP en tant qu’erreurs 4xx ou 5xx :

Code d’état Motif de l’erreur Procédure de gestion
404 Introuvable. Le point de terminaison IMDS est en cours de mise à jour. Réessayer avec interruption exponentielle. Consultez les conseils ci-dessous.
410 Mises à jour de IMDS en cours IMDS sera disponible dans 70 secondes
429 Trop de requêtes. Limite IMDS atteinte. Réessayer avec interruption exponentielle. Consultez les conseils ci-dessous.
Erreur 4xx dans la requête. Un ou plusieurs des paramètres de la requête étaient incorrects. Ne réessayez pas. Examinez les détails de l’erreur pour plus d’informations. Les erreurs 4xx sont des erreurs au moment de la conception.
Erreur 5xx temporaire de service. Les identités managées pour le sous-système de ressources Azure ou Microsoft Entra ID ont renvoyé une erreur temporaire. Il est possible de faire une nouvelle tentative après un délai d’une seconde. Si vous réessayez trop rapidement ou trop souvent, IMDS et/ou Microsoft Entra ID peuvent renvoyer une erreur de limite de débit (429).
timeout Le point de terminaison IMDS est en cours de mise à jour. Réessayer avec interruption exponentielle. Consultez les conseils ci-dessous.

Si une erreur se produit, le corps de réponse HTTP correspondant contient des données JSON avec les détails de l’erreur :

Élément Description
error Identificateur de l’erreur.
error_description Description détaillée de l’erreur. Les descriptions des erreurs peuvent changer à tout moment. N’écrivez pas de codes créant des branches en fonction des valeurs dans la description de l’erreur.

Référence de réponse HTTP

Cette section documente les réponses possibles aux erreurs. Un état « 200 OK » est une réponse correcte, et le jeton d’accès est contenu au sein du corps de réponse JSON, dans l’élément access_token.

Code d’état Error Description de l’erreur Solution
400 Demande incorrecte invalid_resource AADSTS50001 : L’application nommée <URI> est introuvable dans le locataire nommé <ID DE LOCATAIRE>. Ce message indique que l’administrateur client n’a pas installé l’application ou qu’aucun utilisateur locataire ne lui a donné son consentement. Vous avez peut-être envoyé votre requête d’authentification au locataire incorrect.\ (Linux uniquement)
400 Demande incorrecte bad_request_102 En-tête de métadonnées requis non spécifié Le champ d’en-tête de métadonnées Metadata est absent de votre requête, ou bien il n’est pas correctement formaté. La valeur spécifiée doit être true, en minuscules. Un « Exemple de requête » est disponible à la section REST précédente.
401 Non autorisé unknown_source <URI> de source inconnue Vérifiez que votre URI de requête HTTP GET est correctement mise en forme. La partie scheme:host/resource-path doit être spécifiée comme http://localhost:50342/oauth2/token. Un « Exemple de requête » est disponible à la section REST précédente.
invalid_request Il manque un paramètre nécessaire à la requête, elle comprend une valeur de paramètre non valide, plus d’un paramètre à la fois, ou bien elle est incorrecte.
unauthorized_client Le client n’est pas autorisé à demander un jeton d’accès avec cette méthode. Occasionnée par une requête sur une machine virtuelle dont les identités managées pour les ressources Azure ne sont pas correctement configurées. Si vous avez besoin d’aide pour configurer une machine virtuelle, voir Configurer des identités managées pour ressources Azure sur une machine virtuelle en utilisant le portail Azure.
access_denied Le propriétaire de la ressource ou le serveur d’autorisation a refusé la requête.
unsupported_response_type Le serveur d’autorisation ne prend pas en charge l’obtention d’un jeton d’accès par cette méthode.
invalid_scope L’étendue demandée est incorrecte, inconnue ou non valide.
Erreur interne 500 du serveur unknown Impossible de récupérer le jeton depuis Active Directory. Pour plus d’informations, consultez les journaux d’activité dans <Chemin d’accès de fichier> Vérifiez que les identités managées pour ressources Azure sont activées sur la machine virtuelle. Si vous avez besoin d’aide pour configurer une machine virtuelle, voir Configurer des identités managées pour ressources Azure sur une machine virtuelle en utilisant le portail Azure.

Vérifiez également que votre URI de requête HTTP GET est correctement mise en forme, en particulier l’URI de la ressource spécifiée dans la chaîne de requête. Consultez « Exemple de requête » dans la section REST précédente pour un exemple, ou les services Azure qui prennent en charge l'authentification Microsoft Entra pour une liste de services et leurs ID de ressources respectifs.

Important

  • IMDS n’est pas destiné à être utilisé derrière un proxy, ce qui n’est pas pris en charge. Pour obtenir des exemples de contournement des proxies, reportez-vous aux exemples de métadonnées d’instance Azure.

Conseils sur les nouvelles tentatives

Il est recommandé d’effectuer une nouvelle tentative si vous recevez un code d’erreur 404, 429 ou 5xx (consultez la section Gestion des erreurs ci-dessus). Si vous recevez une erreur 410, elle indique que des mises à jour sont en cours sur IMDS et que la solution sera disponible dans un maximum de 70 secondes.

La limitation s’applique au nombre d’appels effectués au point de terminaison IMDS. Quand le seuil de limitation est dépassé, le point de terminaison IMDS limite toutes les autres requêtes pendant que la limitation est appliquée. Pendant cette période, le point de terminaison IMDS retourne le code d’état HTTP 429 (« Trop de requêtes ») et les requêtes échouent.

Pour une nouvelle tentative, nous vous recommandons la stratégie suivante :

Stratégie de nouvelle tentative Paramètres Valeurs Fonctionnement
ExponentialBackoff Nombre de tentatives
Temporisation min
Temporisation max
Temporisation delta
Première nouvelle tentative rapide
5
0 seconde
60 secondes
2 secondes
false
Tentative 1 - délai 0 s
Tentative 2 - délai ~2 s
Tentative 3 - délai ~6 s
Tentative 4 - délai ~14 s
Tentative 5 - délai ~30 s

ID de ressource pour les services Azure

Pour obtenir la liste des ressources qui prennent en charge les identités managées pour les ressources Azure, consultez Services Azure qui prennent en charge les identités managées.

Étapes suivantes