Partager via


Tutoriel : Utiliser une machine virtuelle Windows ou un groupe de machines virtuelles identiques pour accéder à des ressources Azure

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.

Prérequis

Utiliser une identité managée attribuée par le système de la machine virtuelle Windows pour accéder à Azure Data Lake Store

Ce tutoriel montre comment utiliser une identité managée affectée par le système afin de permettre à une machine virtuelle Windows d’accéder à Azure Data Lake Storage. Les identités managées sont gérées automatiquement par Azure. Elles permettent à votre application de s’authentifier auprès de services prenant en charge l’authentification Microsoft Entra, sans avoir recours à des informations d’identification dans votre code.

Dans cet article, vous allez apprendre à :

  • Accorder à votre machine virtuelle l’accès à Azure Data Lake Store
  • Obtenir un jeton d’accès à l’aide de l’identité de machine virtuelle, et l’utiliser pour accéder à Azure Data Lake Store

Activer

L’activation d’une identité managée affectée par le système s’effectue en un seul clic. Vous pouvez l’activer au moment de la création d’une machine virtuelle ou plus tard dans les propriétés d’une machine virtuelle existante.

Capture d’écran montrant l’onglet « Affecté(e) par le système » d’une machine virtuelle, sous lequel vous pouvez activer l’état « Affecté(e) par le système ».

Pour activer une identité managée affectée par le système sur une nouvelle machine virtuelle :

  1. Connectez-vous au portail Azure.

  2. Créez une machine virtuelle avec une identité affectée par le système activée.

Accorder l'accès

Vous pouvez accorder à votre machine virtuelle l’accès à des fichiers et des dossiers dans un magasin Azure Data Lake Storage. Pour cette étape, vous pouvez utiliser un Data Lake Store existant ou bien en créer un.

Pour créer un magasin Data Lake Storage via le portail Azure, consultez Démarrage rapide Azure Data Lake Storage. Des procédures de démarrage rapide utilisant Azure CLI et Azure PowerShell sont également décrites dans la Documentation Azure Data Lake Store.

Dans votre Data Lake Store, créez un dossier et accordez l’autorisation d’identité affectée par le système de votre machine virtuelle. L’identité a besoin de droits de lecture, d’écriture et d’exécution de fichiers dans ce dossier :

  1. Dans le portail Azure, sélectionnez Data Lake Store dans le volet de navigation gauche.
  2. Sélectionnez le Data Lake Store que vous souhaitez utiliser pour ce didacticiel.
  3. Sélectionnez Explorateur de données dans la barre de commandes.
  4. Le dossier racine du Data Lake Store est sélectionné. Dans la barre de commandes, sélectionnez Accès.
  5. Sélectionnez Ajouter. Dans le champ Sélectionner, saisissez le nom de votre machine virtuelle, par exemple DevTestVM. Sélectionnez votre machine virtuelle à partir des résultats de recherche, puis cliquez sur Sélectionner.
  6. Sélectionnez Sélectionner des autorisations, puis Lire et Exécuter. Ajoutez à Ce dossier, puis sélectionnez Une autorisation d’accès uniquement.
  7. Sélectionnez OK, puis fermez le panneau Accès. L’autorisation doit être ajoutée avec succès.
  8. Ensuite, créez un dossier. Sélectionnez Nouveau dossier dans la barre de commandes et donnez-lui un nom. Par exemple, TestFolder, puis sélectionnez OK.
  9. Sélectionnez le dossier créé, puis Accès dans la barre de commandes.
  10. Sélectionnez Ajouter puis, dans le champ Sélectionner, entrez le nom de votre machine virtuelle et sélectionnez Sélectionner.
  11. Sélectionnez Sélectionner des autorisations, puis Lire, Écrire et Exécuter. Ajoutez à Ce dossier, puis ajoutez en tant que Une entrée d’autorisation d’accès et une entrée d’autorisation par défaut.
  12. Sélectionnez OK. L’autorisation doit être ajoutée avec succès.

Votre identité managée attribuée par le système de la machine virtuelle peut désormais effectuer toutes les opérations sur les fichiers du dossier que vous avez créé. Pour plus d’informations sur la gestion de l’accès à Data Lake Storage, consultez Contrôle d’accès dans Data Lake Storage.

Accéder aux données

Azure Data Lake Storage prenant en charge l’authentification Microsoft Entra en mode natif, il peut accepter directement des jetons d’accès obtenus à l’aide d’identités managées pour les ressources Azure. Pour s’authentifier sur le système de fichiers de Data Lake Storage, vous envoyez un jeton d’accès émis par Microsoft Entra ID au point de terminaison de votre système de fichiers Data Lake Storage dans un en-tête d’autorisation. L’en-tête a le format Bearer <ACCESS_TOKEN_VALUE>.

Pour en savoir plus sur la prise en charge de Data Lake Storage pour l’authentification Microsoft Entra, consultez Authentification auprès de Data Lake Storage à l’aide de Microsoft Entra ID.

Remarque

Les kits de développement logiciel clients du système de fichiers de Data Lake Store ne gèrent pas encore les identités managées pour les ressources Azure.

Dans ce didacticiel, vous vous authentifiez sur l’API REST du système de fichiers de Data Lake Store à l’aide de PowerShell pour effectuer des requêtes REST. Pour utiliser l’identité managée attribuée par le système de la machine virtuelle pour l’authentification, vous devez effectuer les requêtes à partir de la machine virtuelle.

  1. Dans le portail, accédez à Machines virtuelles, puis accédez à votre machine virtuelle Windows. Ensuite, dans la Vue d’ensemble, sélectionnez Connecter.

  2. Entrez votre Nom d’utilisateur et le Mot de passe que vous avez ajoutés quand vous avez créé la machine virtuelle Windows.

  3. Maintenant que vous avez créé une Connexion Bureau à distance avec la machine virtuelle, ouvrez PowerShell dans la session à distance.

  4. À l’aide de la cmdlet Invoke-WebRequest PowerShell, adressez une requête au point de terminaison des identités managées locales pour les ressources Azure afin d’obtenir un jeton d’accès pour Azure Data Lake Storage. L’identificateur de ressources pour Data Lake Store est https://datalake.azure.net/. Data Lake effectue une correspondance exacte sur l’identificateur de ressource ; la barre oblique est par conséquent importante.

    $response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fdatalake.azure.net%2F' -Method GET -Headers @{Metadata="true"}
    

    Convertissez la réponse d’objet JSON en objet PowerShell.

    $content = $response.Content | ConvertFrom-Json
    

    Extrayez le jeton d’accès de la réponse.

    $AccessToken = $content.access_token
    
  5. Vérifiez que tout est correctement configuré. À l’aide de la cmdlet Invoke-WebRequest PowerShell, adressez une requête au point de terminaison REST de votre magasin Data Lake Storage pour répertorier les dossiers dans le dossier racine. Il est important que la chaîne Bearer dans l’en-tête d’autorisation ait un « P » majuscule. Vous pouvez rechercher le nom de votre Data Lake Store dans la section Vue d’ensemble de votre Data Lake Store.

    Invoke-WebRequest -Uri https://<YOUR_ADLS_NAME>.azuredatalakestore.net/webhdfs/v1/?op=LISTSTATUS -Headers @{Authorization="Bearer $AccessToken"}
    

    Une réponse correcte se présente ainsi :

    StatusCode        : 200
    StatusDescription : OK
    Content           : {"FileStatuses":{"FileStatus":[{"length":0,"pathSuffix":"TestFolder","type":"DIRECTORY", "blockSize":0,"accessTime":1507934941392, "modificationTime":1507944835699,"replication":0, "permission":"770","ow..."
    RawContent        : HTTP/1.1 200 OK
                        Pragma: no-cache
                        x-ms-request-id: b4b31e16-e968-46a1-879a-3474aa7d4528
                        x-ms-webhdfs-version: 17.04.22.00
                        Status: 0x0
                        X-Content-Type-Options: nosniff
                        Strict-Transport-Security: ma...
    Forms             : {}
    Headers           : {[Pragma, no-cache], [x-ms-request-id, b4b31e16-e968-46a1-879a-3474aa7d4528],
                        [x-ms-webhdfs-version, 17.04.22.00], [Status, 0x0]...}
    Images            : {}
    InputFields       : {}
    Links             : {}
    ParsedHtml        : System.__ComObject
    RawContentLength  : 556
    
  6. Maintenant, essayez de charger un fichier dans votre magasin Data Lake Storage. Commencez par créer un fichier à charger.

    echo "Test file." > Test1.txt
    
  7. À l’aide de la cmdlet Invoke-WebRequest PowerShell, adressez une requête au point de terminaison REST de votre magasin Data Lake Storage pour charger le fichier dans le dossier créé précédemment. Cette requête prend deux étapes.

    1. Adressez une requête et obtenez une redirection vers l’emplacement où le fichier doit être chargé.
    2. Chargez le fichier. N’oubliez pas de définir le nom du dossier et du fichier de façon appropriée si vous avez utilisé des valeurs différentes de celles indiquées dans ce tutoriel.
    $HdfsRedirectResponse = Invoke-WebRequest -Uri https://<YOUR_ADLS_NAME>.azuredatalakestore.net/webhdfs/v1/TestFolder/Test1.txt?op=CREATE -Method PUT -Headers @{Authorization="Bearer $AccessToken"} -Infile Test1.txt -MaximumRedirection 0
    

    Si vous examinez la valeur de $HdfsRedirectResponse, elle doit ressembler à la réponse suivante :

    PS C:\> $HdfsRedirectResponse
    
    StatusCode        : 307
    StatusDescription : Temporary Redirect
    Content           : {}
    RawContent        : HTTP/1.1 307 Temporary Redirect
                        Pragma: no-cache
                        x-ms-request-id: b7ab492f-b514-4483-aada-4aa0611d12b3
                        ContentLength: 0
                        x-ms-webhdfs-version: 17.04.22.00
                        Status: 0x0
                        X-Content-Type-Options: nosn...
    Headers           : {[Pragma, no-cache], [x-ms-request-id, b7ab492f-b514-4483-aada-4aa0611d12b3], 
                        [ContentLength, 0], [x-ms-webhdfs-version, 17.04.22.00]...}
    RawContentLength  : 0
    

    Terminez le chargement en envoyant une requête au point de terminaison de redirection :

    Invoke-WebRequest -Uri $HdfsRedirectResponse.Headers.Location -Method PUT -Headers @{Authorization="Bearer $AccessToken"} -Infile Test1.txt -MaximumRedirection 0
    

    Une réponse correcte se présente ainsi :

    StatusCode        : 201
    StatusDescription : Created
    Content           : {}
    RawContent        : HTTP/1.1 201 Created
                        Pragma: no-cache
                        x-ms-request-id: 1e70f36f-ead1-4566-acfa-d0c3ec1e2307
                        ContentLength: 0
                        x-ms-webhdfs-version: 17.04.22.00
                        Status: 0x0
                        X-Content-Type-Options: nosniff
                        Strict...
    Headers           : {[Pragma, no-cache], [x-ms-request-id, 1e70f36f-ead1-4566-acfa-d0c3ec1e2307],
                        [ContentLength, 0], [x-ms-webhdfs-version, 17.04.22.00]...}
    RawContentLength  : 0
    

Pour finir, vous pouvez utiliser d’autres API de système de fichiers Data Lake Storage pour ajouter et télécharger des fichiers, entre autres.

Disable

Pour désactiver l’identité affectée par le système sur votre machine virtuelle, définissez son état sur Off.

Capture d’écran montrant l’onglet « Affecté(e) par le système » d’une machine virtuelle, sous lequel vous pouvez désactiver l’état « Affecté(e) par le système ».

Utiliser une identité managée affectée par le système de machine virtuelle Windows pour accéder au Stockage Azure

Ce didacticiel vous indique comment utiliser une identité managée affectée par le système pour une machine virtuelle Windows afin d’accéder au Stockage Azure. Vous allez apprendre à effectuer les actions suivantes :

  • Créer un conteneur d’objets blob dans un compte de stockage
  • Accorder l’accès à votre identité managée affectée par le système de machine virtuelle Windows à un compte de stockage
  • Obtenir un accès et l’utiliser pour appeler le stockage Azure

Activer

L’activation d’une identité managée affectée par le système s’effectue en un seul clic. Vous pouvez l’activer au moment de la création d’une machine virtuelle ou plus tard dans les propriétés d’une machine virtuelle existante.

Capture d’écran montrant l’onglet « Affecté(e) par le système » d’une machine virtuelle, sous lequel vous pouvez activer l’état « Affecté(e) par le système ».

Pour activer une identité managée affectée par le système sur une nouvelle machine virtuelle :

  1. Connectez-vous au portail Azure.

  2. Créez une machine virtuelle avec une identité affectée par le système activée.

Créer un compte de stockage

Dans cette section, vous créez un compte de stockage.

  1. Sélectionnez le bouton + Créer une ressource dans le coin supérieur gauche du portail Azure.

  2. Sélectionnez Stockage, puis sur Compte de stockage - blob, fichier, table, file d’attente.

  3. Dans le champ Nom, entrez un nom pour le compte de stockage.

  4. Modèle de déploiement et Type de compte doivent être définis sur Gestionnaire des ressources et Storage (general purpose v1) (Stockage (usage général v1)).

  5. Assurez-vous que les champs Abonnement et Groupe de ressources correspondent à ceux que vous avez spécifiés lorsque vous avez créé votre machine virtuelle à l’étape précédente.

  6. Sélectionnez Créer.

    Capture d'écran montrant comment créer un compte de stockage.

Créer un conteneur d’objets blob et charger un fichier vers le compte de stockage

Les fichiers nécessitent un stockage d’objets blob, vous devez donc créer un conteneur d’objets blob dans lequel stocker le fichier. Vous chargez ensuite un fichier vers le conteneur d’objets blob dans le nouveau compte de stockage.

  1. Accédez au compte de stockage que vous venez de créer.

  2. Dans la section Service Blob, sélectionnez Conteneurs.

  3. Sélectionnez + Conteneur en haut de la page.

  4. Dans le champ Nouveau conteneur, entrez un nom pour le conteneur puis, pour l’option Niveau d’accès public, conservez la valeur par défaut.

    Capture d’écran montrant comment créer un conteneur de stockage.

  5. À l’aide de l’éditeur de votre choix, créez un fichier intitulé hello world.txt sur votre ordinateur local. Ouvrez le fichier et ajoutez le texte Hello world!, puis enregistrez-le.

  6. Sélectionnez le nom du conteneur pour charger le fichier dans le nouveau conteneur, puis sélectionnez Charger.

  7. Dans le volet Charger l’objet blob, dans la section Fichiers, sélectionnez l’icône de dossier et recherchez le fichier hello_world.txt sur votre ordinateur local. Sélectionnez ensuite le fichier et Charger. Capture d’écran montrant l’écran de chargement d’un fichier texte.

Accorder l'accès

Cette section montre comment accorder à votre machine virtuelle l’accès à un conteneur de stockage Azure. Vous pouvez utiliser l’identité managée affectée par le système de machine virtuelle pour récupérer les données dans l’objet blob de stockage Azure.

  1. Accédez au compte de stockage que vous venez de créer.

  2. Sélectionnez Contrôle d’accès (IAM) .

  3. Sélectionnez Ajouter>Ajouter une attribution de rôle pour ouvrir la page Ajouter une attribution de rôle.

  4. Attribuez le rôle suivant. Pour connaître les étapes détaillées, consultez Attribuer des rôles Azure à l’aide du portail Azure.

    Paramètre Valeur
    Role Lecteur des données blob du stockage
    Attribuer l’accès à Identité managée
    Attribué par le système Machine virtuelle
    Sélectionnez <votre machine virtuelle>

    Capture d’écran montrant la page d’ajout d’une attribution de rôle.

Accéder aux données

Le Stockage Azure prend en charge l’authentification Microsoft Entra en mode natif et peut donc accepter directement des jetons d’accès obtenus à l’aide d’une identité managée. Cette approche utilise l’intégration du Stockage Azure avec Microsoft Entra ID, et diffère de la fourniture d’informations d’identification sur la chaîne de connexion.

Voici un exemple de code .NET permettant d’ouvrir une connexion au Stockage Azure. L’exemple utilise un jeton d’accès, puis lit le contenu du fichier que vous avez créé précédemment. Pour permettre l’accès au point de terminaison de l’identité managée de machine virtuelle, ce code doit s’exécuter sur la machine virtuelle. Pour pouvoir utiliser la méthode de jeton d’accès, .NET framework 4.6 ou version ultérieure est requis. Remplacez la valeur de <URI to blob file> en conséquence. Vous pouvez obtenir cette valeur en accédant au fichier que vous avez créé et chargé vers le stockage d’objets blob et en copiant l’URL sous Propriétés de la page Vue d’ensemble.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Net;
using System.Web.Script.Serialization;
using Microsoft.WindowsAzure.Storage.Auth;
using Microsoft.WindowsAzure.Storage.Blob;

namespace StorageOAuthToken
{
    class Program
    {
        static void Main(string[] args)
        {
            //get token
            string accessToken = GetMSIToken("https://storage.azure.com/");

            //create token credential
            TokenCredential tokenCredential = new TokenCredential(accessToken);

            //create storage credentials
            StorageCredentials storageCredentials = new StorageCredentials(tokenCredential);

            Uri blobAddress = new Uri("<URI to blob file>");

            //create block blob using storage credentials
            CloudBlockBlob blob = new CloudBlockBlob(blobAddress, storageCredentials);

            //retrieve blob contents
            Console.WriteLine(blob.DownloadText());
            Console.ReadLine();
        }

        static string GetMSIToken(string resourceID)
        {
            string accessToken = string.Empty;
            // Build request to acquire MSI token
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=" + resourceID);
            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>));
                accessToken = list["access_token"];
                return accessToken;
            }
            catch (Exception e)
            {
                string errorText = String.Format("{0} \n\n{1}", e.Message, e.InnerException != null ? e.InnerException.Message : "Acquire token failed");
                return accessToken;
            }
        }
    }
}

La réponse contient le contenu du fichier :

Hello world! :)

Disable

Pour désactiver l’identité affectée par le système sur votre machine virtuelle, définissez son état sur Off.

Capture d’écran montrant l’onglet « Affecté(e) par le système » d’une machine virtuelle, sous lequel vous pouvez désactiver l’état « Affecté(e) par le système ».

Utiliser une identité managée affectée par le système de machine virtuelle Windows pour accéder au Stockage Azure avec des informations d’identification SAP

Ce tutoriel montre comment utiliser une identité affectée par le système pour une machine virtuelle Windows afin d’obtenir des informations d’identification SAP (signature d’accès partagé) de stockage.

Une SAP de service offre la possibilité d’accorder un accès limité à des objets dans un compte de stockage, pendant une durée limitée et pour un service spécifique (en l’occurrence, un service BLOB). La SAP effectue cette opération sans exposer de clé d’accès de compte. Vous pouvez utiliser des informations d’identification SAP comme d’habitude pour les opérations de stockage, par exemple, lors de l’utilisation d’un SDK de stockage. Ce tutoriel illustre le chargement et le téléchargement d’un objet blob à l’aide de Stockage Azure PowerShell.

Vous découvrirez comment effectuer les actions suivantes :

  • Créez un compte de stockage.
  • Autoriser votre machine virtuelle à accéder à la SAP d’un compte stockage dans le Gestionnaire des ressources
  • Obtenir un jeton d’accès à l’aide de l’identité de votre machine virtuelle et l’utiliser pour récupérer la SAP à partir du Gestionnaire des ressources

Remarque

Nous vous recommandons d’utiliser le module Azure Az PowerShell pour interagir avec Azure. Pour commencer, consultez Installer Azure PowerShell. Pour savoir comment migrer vers le module Az PowerShell, consultez Migrer Azure PowerShell depuis AzureRM vers Az.

Créez un compte de stockage.

Si vous n’en avez pas encore, vous devez créer un compte de stockage. Autrement, effectuez ces étapes pour accorder à l’identité managée affectée par le système de votre machine virtuelle un accès aux informations d’identification SAP d’un compte de stockage existant.

  1. Sélectionnez Stockage, puis Compte de stockage.

  2. Dans le panneau Créer un compte de stockage, entrez un nom pour le compte de stockage.

  3. Vérifiez que Modèle de déploiement et Type de compte sont définis respectivement sur Gestionnaire de ressources et Usage général.

  4. Vérifiez que les champs Abonnement et Groupe de ressources correspondent à ceux que vous avez spécifiés lorsque vous avez créé votre machine virtuelle à l’étape précédente.

  5. Sélectionnez Créer pour créer votre compte de stockage.

    Capture d’écran montrant comment créer un compte de stockage.

Création d’un conteneur d’objets blob dans le compte de stockage

Plus loin dans le tutoriel, vous chargerez et téléchargerez un fichier vers le nouveau compte de stockage. Étant donné que les fichiers nécessitent un stockage d’objets blob, vous devez créer un conteneur d’objets blob dans lequel stocker le fichier.

  1. Accédez au compte de stockage que vous venez de créer.

  2. Sélectionnez le lien Conteneurs dans le panneau gauche, sous Service Blob.

  3. Sélectionnez + Conteneur en haut de la page. Un panneau Nouveau conteneur doit apparaître.

  4. Nommez le conteneur, déterminez le niveau d’accès, puis sélectionnez OK. Le nom que vous spécifiez ici est utilisé plus loin dans le tutoriel.

    Capture d’écran montrant comment créer un conteneur de stockage.

Autoriser votre identité managée affectée par le système de machine virtuelle à utiliser une SAP de stockage

Le service Stockage Azure ne prend pas en charge de manière native l’authentification Microsoft Entra. Toutefois, vous pouvez utiliser une identité managée pour récupérer une SAP de stockage à partir du Gestionnaire des ressources, puis utiliser cette SAP pour accéder au stockage. Dans cette étape, vous autorisez votre identité managée affectée par le système de machine virtuelle à accéder à la SAP de votre compte de stockage.

  1. Revenez à votre compte de stockage nouvellement créé.

  2. Sélectionnez Contrôle d’accès (IAM) .

  3. Sélectionnez Ajouter>Ajouter une attribution de rôle pour ouvrir la page Ajouter une attribution de rôle.

  4. Attribuez le rôle suivant. Pour connaître les étapes détaillées, consultez Attribuer des rôles Azure à l’aide du portail Azure.

    Paramètre Valeur
    Role Contributeur de compte de stockage
    Attribuer l’accès à Identité managée
    Attribué par le système Machine virtuelle
    Sélectionnez <votre machine virtuelle Windows>

    Capture d’écran montrant la page d’ajout d’une attribution de rôle.

Obtenir un jeton d’accès à l’aide de l’identité de la machine virtuelle et l’utiliser pour appeler Azure Resource Manager

Pour le reste de ce tutoriel, vous allez utiliser votre machine virtuelle. Dans cette partie, vous devez utiliser les cmdlets PowerShell d’Azure Resource Manager. Si vous n’avez pas installé PowerShell, téléchargez la dernière version avant de continuer.

  1. Dans le portail Azure, accédez à Machines virtuelles, accédez à votre machine virtuelle Windows, puis en haut de la page Vue d’ensemble, sélectionnez Se connecter.

  2. Entrez votre Nom d’utilisateur et le Mot de passe que vous avez ajoutés quand vous avez créé votre machine virtuelle Windows.

  3. Établissez une connexion Bureau à distance avec la machine virtuelle.

  4. Ouvrez PowerShell dans la session à distance, puis utilisez la cmdlet Invoke-WebRequest PowerShell pour obtenir un jeton Azure Resource Manager à partir du point de terminaison de l’identité managée locale pour les ressources Azure.

       $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' -Method GET -Headers @{Metadata="true"}
    

    Remarque

    La valeur du paramètre resource doit correspondre exactement aux attentes de Microsoft Entra ID. Lorsque vous utilisez l’ID de ressource Azure Resource Manager, vous devez inclure la barre oblique de fin à l’URI.

    Extrayez ensuite l’élément content, qui est stocké sous forme de chaîne au format JSON (JavaScript Object Notation) dans l’objet $response.

    $content = $response.Content | ConvertFrom-Json
    

    Ensuite, extrayez le jeton d’accès de la réponse.

    $ArmToken = $content.access_token
    

Obtenir des informations d’identification SAP d’Azure Resource Manager pour effectuer des appels de stockage

Pour finir, utilisez PowerShell pour appeler Resource Manager à l’aide du jeton d’accès que vous avez récupéré dans la section précédente. Vous utilisez ce jeton pour créer des informations d’identification SAP de stockage. Une fois que vous disposez des informations d’identification SAP, vous pouvez appeler d’autres opérations de stockage.

Pour cette requête, utilisez les paramètres de requête HTTP suivants afin de créer les informations d’identification SAP :

{
    "canonicalizedResource":"/blob/<STORAGE ACCOUNT NAME>/<CONTAINER NAME>",
    "signedResource":"c",              // The kind of resource accessible with the SAS, in this case a container (c).
    "signedPermission":"rcw",          // Permissions for this SAS, in this case (r)ead, (c)reate, and (w)rite. Order is important.
    "signedProtocol":"https",          // Require the SAS be used on https protocol.
    "signedExpiry":"<EXPIRATION TIME>" // UTC expiration time for SAS in ISO 8601 format, for example 2017-09-22T00:06:00Z.
}

Les paramètres ici sont inclus dans le corps POST de la requête pour les informations d’identification SAP. Pour plus d’informations concernant les paramètres pour la création d’informations d’identification SAP, consultez Répertorier les SAP de service – Informations de référence REST.

  1. Convertissez les paramètres au format JSON, puis appelez le point de terminaison listServiceSas du stockage pour créer les informations d’identification SAP :

    $params = @{canonicalizedResource="/blob/<STORAGE-ACCOUNT-NAME>/<CONTAINER-NAME>";signedResource="c";signedPermission="rcw";signedProtocol="https";signedExpiry="2017-09-23T00:00:00Z"}
    $jsonParams = $params | ConvertTo-Json
    
    $sasResponse = Invoke-WebRequest -Uri https://management.azure.com/subscriptions/<SUBSCRIPTION-ID>/resourceGroups/<RESOURCE-GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE-ACCOUNT-NAME>/listServiceSas/?api-version=2017-06-01 -Method POST -Body $jsonParams -Headers @{Authorization="Bearer $ArmToken"}
    

    Remarque

    L’URL respecte la casse. Veillez par conséquent à utiliser une casse identique à celle utilisée lorsque vous avez nommé le groupe de ressources, en vérifiant notamment que la majuscule « G » est correcte dans resourceGroups.

  2. Ensuite, extrayez les informations d’identification SAP de la réponse :

    $sasContent = $sasResponse.Content | ConvertFrom-Json
    $sasCred = $sasContent.serviceSasToken
    
  3. Si vous inspectez les informations d’identification SAP, vous devez voir quelque chose qui ressemble à ceci :

    PS C:\> $sasCred
    sv=2015-04-05&sr=c&spr=https&se=2017-09-23T00%3A00%3A00Z&sp=rcw&sig=JVhIWG48nmxqhTIuN0uiFBppdzhwHdehdYan1W%2F4O0E%3D
    
  4. Créez un fichier nommé test.txt. Ensuite, utilisez les informations d’identification SAP pour vous authentifier à l’aide de la cmdlet New-AzStorageContent, charger le fichier dans le conteneur d’objets blob, puis télécharger le fichier.

    echo "This is a test text file." > test.txt
    
  5. Veillez à installer les applets de commande du stockage Azure en premier, à l’aide de Install-Module Azure.Storage. Ensuite, chargez l’objet blob que vous venez de créer à l’aide de la cmdlet Set-AzStorageBlobContent PowerShell :

    $ctx = New-AzStorageContext -StorageAccountName <STORAGE-ACCOUNT-NAME> -SasToken $sasCred
    Set-AzStorageBlobContent -File test.txt -Container <CONTAINER-NAME> -Blob testblob -Context $ctx
    

    Réponse :

    ICloudBlob        : Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob
    BlobType          : BlockBlob
    Length            : 56
    ContentType       : application/octet-stream
    LastModified      : 9/21/2017 6:14:25 PM +00:00
    SnapshotTime      :
    ContinuationToken :
    Context           : Microsoft.WindowsAzure.Commands.Storage.AzureStorageContext
    Name              : testblob
    
  6. Vous pouvez également télécharger l’objet blob que vous avez chargé à l’aide de l’applet de commande PowerShell Get-AzStorageBlobContent :

    Get-AzStorageBlobContent -Blob testblob -Container <CONTAINER-NAME> -Destination test2.txt -Context $ctx
    

    Réponse :

    ICloudBlob        : Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob
    BlobType          : BlockBlob
    Length            : 56
    ContentType       : application/octet-stream
    LastModified      : 9/21/2017 6:14:25 PM +00:00
    SnapshotTime      :
    ContinuationToken :
    Context           : Microsoft.WindowsAzure.Commands.Storage.AzureStorageContext
    Name              : testblob
    

Utiliser une identité managée de machine virtuelle Windows affectée par le système pour accéder à Azure SQL Database

Ce tutoriel illustre comment utiliser une identité attribuée par le système pour une machine virtuelle Windows afin d’accéder à Azure SQL Database. Les identités MSI sont gérées automatiquement par Azure et vous permettent de vous authentifier auprès des services prenant en charge l’authentification Microsoft Entra sans avoir à insérer des informations d’identification dans votre code.

Vous découvrirez comment effectuer les actions suivantes :

  • Accorder à votre machine virtuelle l’accès à Azure SQL Database
  • Activez l’authentification Microsoft Entra
  • Créer un utilisateur contenu dans la base de données représentant l’identité attribuée du système de la machine virtuelle
  • Obtenir un jeton d’accès à l’aide de l’identité de machine virtuelle, et l’utiliser pour interroger Azure SQL Database

Activer

L’activation d’une identité managée affectée par le système s’effectue en un seul clic. Vous pouvez l’activer au moment de la création d’une machine virtuelle ou plus tard dans les propriétés d’une machine virtuelle existante.

Capture d’écran montrant l’onglet « Affecté(e) par le système » d’une machine virtuelle, sous lequel vous pouvez activer l’état « Affecté(e) par le système ».

Pour activer une identité managée affectée par le système sur une nouvelle machine virtuelle :

  1. Connectez-vous au portail Azure.

  2. Créez une machine virtuelle avec une identité affectée par le système activée.

Accorder l'accès

Pour accorder à votre machine virtuelle l’accès à une base de données dans Azure SQL Database, utilisez un serveur SQL logique existant ou créez-en un. Pour créer un serveur et une base de données à l’aide du portail Azure, suivez les instructions fournies dans le Démarrage rapide Azure SQL. Des procédures de démarrage rapide utilisant Azure CLI et Azure PowerShell sont également décrites dans la Documentation Azure SQL Database.

Effectuez ces étapes pour accorder à votre machine virtuelle l’accès à une base de données :

  1. Activez l’authentification Microsoft Entra pour le serveur.
  2. Créez un utilisateur contenu dans la base de données représentant l’identité attribuée du système de la machine virtuelle.

Activez l’authentification Microsoft Entra

Pour configurer l’authentification Microsoft Entra :

  1. Dans le portail Azure, dans le volet de navigation gauche, sélectionnez Serveur SQL.
  2. Sélectionnez le serveur SQL que vous souhaitez activer pour l’authentification Microsoft Entra.
  3. Dans la section Paramètres du panneau, sélectionnez Administrateur Active Directory.
  4. Dans la barre de commandes, sélectionnez Définir l’administrateur.
  5. Sélectionnez un compte d’utilisateur Microsoft Entra à désigner comme administrateur du serveur, puis sélectionnez Sélectionner.
  6. Dans la barre de commandes, sélectionnez Enregistrer.

Créer un utilisateur contenu

Cette section montre comment créer un utilisateur contenu dans la base de données représentant l’identité affectée par le système de la machine virtuelle. Pour cette étape, il faut que Microsoft SQL Server Management Studio (SSMS) soit installé. Avant de commencer, il peut également être utile de lire les articles suivants pour bien comprendre l’intégration de Microsoft Entra :

Les bases de données SQL nécessitent des noms d’affichage Microsoft Entra ID uniques. Ainsi, les comptes Microsoft Entra comme les comptes d’utilisateurs, de groupes et de principaux de service (applications), et les noms des machines virtuelles activées pour l’identité managée doivent être définis de façon unique dans Microsoft Entra ID en fonction de leurs noms d’affichage. SQL vérifie les noms d’affichage Microsoft Entra ID lors de la création T-SQL de ces utilisateurs. Si les noms d’affichage ne sont pas uniques, la commande échoue et vous invite à fournir un nom d’affichage Microsoft Entra ID unique pour chaque compte donné.

Pour créer un utilisateur contenu

  1. Ouvrez SQL Server Management Studio.

  2. Dans la boîte de dialogue Se connecter au serveur, entrez le nom de votre serveur dans le champ Nom du serveur.

  3. Dans le champ Authentification, sélectionnez Active Directory - Authentification universelle avec prise en charge de MFA.

  4. Dans le champ Nom d’utilisateur, entrez le nom du compte Microsoft Entra que vous avez défini en tant qu’administrateur du serveur, par exemple, cjensen@fabrikam.com

  5. Cliquez sur Options.

  6. Dans le champ Connexion à une base de données, entrez le nom de la base de données non-système que vous souhaitez configurer.

  7. Sélectionnez Se connecter et terminez le processus de connexion.

  8. Dans l’Explorateur d’objets, développez le dossier Bases de données.

  9. Cliquez avec le bouton droit sur une base de données utilisateur, puis sélectionnez Nouvelle requête.

  10. Dans la fenêtre de requête, entrez la ligne suivante, puis sélectionnez Exécuter dans la barre d’outils :

    Remarque

    VMName dans la commande suivante est le nom de la machine virtuelle pour laquelle vous avez activé l’identité attribuée au système sur dans la section Conditions préalables.

    CREATE USER [VMName] FROM EXTERNAL PROVIDER
    

    La commande doit s’exécuter correctement, en créant l’utilisateur contenu pour l’identité affectée par le système de la machine virtuelle.

  11. Effacez la fenêtre de requête, entrez la ligne suivante, puis sélectionnez Exécuter dans la barre d’outils :

    Remarque

    VMName dans la commande suivante est le nom de la machine virtuelle pour laquelle vous avez activé l’identité attribuée au système sur dans la section Conditions préalables.

    Si vous rencontrez l’erreur « Principal VMName a un nom d’affichage en double », ajoutez l’instruction CREATE USER avec WITH OBJECT_ID='xxx'.

    ALTER ROLE db_datareader ADD MEMBER [VMName]
    

    La commande doit s’exécuter correctement, en octroyant à l’utilisateur contenu la capacité à lire la base de données entière.

Le code qui s’exécute dans la machine virtuelle peut désormais obtenir un jeton à partir de son identité managée attribuée par le système et l’utiliser pour s’authentifier auprès du serveur.

Accéder aux données

Cette section montre comment obtenir un jeton d’accès à l’aide de l’identité managée affectée par le système de la machine virtuelle et comment l’utiliser pour appeler Azure SQL. Azure SQL prenant en charge de l’authentification Microsoft Entra en mode natif, il peut accepter directement des jetons d’accès obtenus à l’aide d’identités managées attribuées par le système pour les ressources Azure. Cette méthode ne demande pas de fournir d’informations d’identification sur la chaîne de connexion.

Voici un exemple de code .NET pour ouvrir une connexion à SQL en utilisant l’authentification Active Directory Managed Identity. Pour permettre l’accès au point de terminaison de l’identité managée attribuée par le système de la machine virtuelle, le code doit s’exécuter sur la machine virtuelle.

Pour pouvoir utiliser cette méthode, .NET Framework 4.6.2 ou ultérieur ou .NET Core 3.1 ou ultérieure est requis. Remplacez les valeurs d’AZURE-SQL-SERVERNAME et DATABASE en conséquence et ajoutez une référence NuGet à la bibliothèque Microsoft.Data.SqlClient.

using Microsoft.Data.SqlClient;

try
{
//
// Open a connection to the server using Active Directory Managed Identity authentication.
//
string connectionString = "Data Source=<AZURE-SQL-SERVERNAME>; Initial Catalog=<DATABASE>; Authentication=Active Directory Managed Identity; Encrypt=True";
SqlConnection conn = new SqlConnection(connectionString);
conn.Open();

Notes

Vous pouvez utiliser des identités managées lors de l’utilisation d’autres options de programmation à l’aide de nos kits SDK.

Vous pouvez également utiliser PowerShell pour tester la configuration de bout en bout sans devoir écrire et déployer une application sur la machine virtuelle.

  1. Dans le portail, accédez à Machines virtuelles, accédez à votre machine virtuelle Windows puis, dans Vue d’ensemble, sélectionnez Connecter.

  2. Entrez les Informations d’identification d’administrateur que vous avez ajoutées lors de la création de la machine virtuelle Windows.

  3. Maintenant que vous avez créé une Connexion Bureau à distance avec la machine virtuelle, ouvrez PowerShell dans une session à distance.

  4. À l’aide de la cmdlet Invoke-WebRequest PowerShell, adressez une requête au point de terminaison de l’identité managée locale afin d’obtenir un jeton d’accès pour Azure SQL.

        $response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fdatabase.windows.net%2F' -Method GET -Headers @{Metadata="true"}
    

    Convertissez la réponse d’objet JSON en objet PowerShell.

    $content = $response.Content | ConvertFrom-Json
    

    Extrayez le jeton d’accès de la réponse.

    $AccessToken = $content.access_token
    
  5. Ouvrez une connexion au serveur. N’oubliez pas de remplacer les valeurs de AZURE-SQL-SERVERNAME et DATABASE.

    $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
    $SqlConnection.ConnectionString = "Data Source = <AZURE-SQL-SERVERNAME>; Initial Catalog = <DATABASE>; Encrypt=True;"
    $SqlConnection.AccessToken = $AccessToken
    $SqlConnection.Open()
    

    Ensuite, créez et envoyez une requête au serveur. N’oubliez pas de remplacer la valeur de TABLE.

    $SqlCmd = New-Object System.Data.SqlClient.SqlCommand
    $SqlCmd.CommandText = "SELECT * from <TABLE>;"
    $SqlCmd.Connection = $SqlConnection
    $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
    $SqlAdapter.SelectCommand = $SqlCmd
    $DataSet = New-Object System.Data.DataSet
    $SqlAdapter.Fill($DataSet)
    

Pour finir, examinez la valeur de $DataSet.Tables[0] pour voir les résultats de la requête.

Disable

Pour désactiver l’identité affectée par le système sur votre machine virtuelle, définissez son état sur Off.

Capture d’écran montrant l’onglet « Affecté(e) par le système » d’une machine virtuelle, sous lequel vous pouvez désactiver l’état « Affecté(e) par le système ».

Utiliser une identité managée de machine virtuelle Windows attribuée par le système pour accéder à Azure Key Vault

Ce tutoriel vous indique comment une machine virtuelle Windows peut utiliser une identité managée affectée par le système pour accéder à Azure Key Vault. Key Vault permet à votre application client d'utiliser un secret pour accéder aux ressources non sécurisées par Microsoft Entra ID. Les identités managées sont gérées automatiquement par Azure. Ils vous permettent de vous authentifier auprès des services prenant en charge l'authentification Microsoft Entra, sans inclure d'informations d'authentification dans votre code.

Vous découvrirez comment effectuer les actions suivantes :

  • Accorder à votre machine virtuelle l’accès à un secret stocké dans Key Vault
  • Obtenir un jeton d’accès à l’aide d’une identité de machine virtuelle et l’utiliser pour récupérer un secret de Key Vault

Créer un coffre de clés

Conseil

Les étapes décrites dans cet article peuvent varier légèrement en fonction du portail de départ.

Cette section montre comment accorder à votre machine virtuelle l’accès à un secret stocké dans un coffre de clés. Lorsque vous utilisez des identités managées pour les ressources Azure, votre code peut obtenir des jetons d'accès pour s'authentifier auprès des ressources qui prennent en charge l'authentification Microsoft Entra. 

Toutefois, tous les services Azure ne prennent pas en charge l’authentification Microsoft Entra. Pour utiliser des identités managées pour les ressources Azure avec ces services, stockez les informations d’identification des services dans Azure Key Vault, puis utilisez des identités managées de machine virtuelle afin d’accéder à Key Vault pour récupérer les informations d’identification.

Tout d’abord, vous devez créer un coffre de clés Key Vault, et accorder l’accès à ce coffre à l’identité managée affectée par le système de votre machine virtuelle.

  1. Connectez-vous au portail Azure.

  2. En haut de la barre de navigation de gauche, sélectionnez Créer une ressource.

  3. Dans la zone Rechercher dans la Place de marché, tapez Key Vault, puis appuyez sur Entrer.

  4. Sélectionnez Key Vault dans les résultats, puis sélectionnez Créer.

  5. Entrez un Nom pour le nouveau coffre de clés.

    Capture de l’écran Créer un coffre de clés Azure.

  6. Remplissez toutes les informations requises. Veillez à choisir l’abonnement et le groupe de ressources que vous utilisez pour ce tutoriel.

  7. Sélectionnez Vérifier + créer.

  8. Sélectionnez Créer.

Création d’une clé secrète

Ensuite, vous devez ajouter un secret au coffre de clés afin de pouvoir le récupérer ultérieurement à l’aide du code en cours d’exécution dans votre machine virtuelle. Dans cette section, vous utilisez PowerShell, mais les mêmes concepts s’appliquent à tout code que vous exécutez dans votre machine virtuelle.

  1. Accédez au coffre de clés que vous venez de créer.

  2. Sélectionnez Secrets, puis Ajouter.

  3. Sélectionnez Générer/Importer.

  4. Dans l’écran Créer un secret, dans les Options de chargement, laissez Manuel sélectionné.

  5. Entrez un nom et une valeur pour le secret. Vous pouvez choisir la valeur de votre choix. 

  6. Laissez les champs pour la date d’activation et la date d’expiration vides, puis pour Activé, laissez la valeur Oui

  7. Sélectionnez Créer pour créer le secret.

    Capture d’écran illustrant la création d’un secret.

Accorder l'accès

L’identité managée utilisée par la machine virtuelle doit disposer d’un accès pour lire le secret stocké dans le coffre de clés.

  1. Accédez au coffre de clés que vous venez de créer.

  2. Dans le menu de gauche, sélectionnez Stratégie d’accès.

  3. Sélectionnez Ajouter une stratégie d’accès.

    Capture d’écran illustrant la stratégie d’accès au coffre de clés.

  4. Dans la section Ajouter une stratégie d’accès sous Configurer à partir du modèle (facultatif), choisissez Gestion des secrets dans le menu déroulant.

  5. Choisissez Sélectionner le principal et, dans la zone de recherche, entrez le nom de la machine virtuelle créée précédemment. 

  6. Sélectionnez la machine virtuelle dans la liste des résultats, puis choisissez Sélectionner.

  7. Sélectionnez Ajouter.

  8. Sélectionnez Enregistrer.

Accéder aux données

Cette section montre comment obtenir un jeton d’accès à l’aide d’une identité de machine virtuelle, et comment l’utiliser pour récupérer le secret dans le coffre de clés. Si PowerShell 4.3.1 ou version ultérieure n’est pas installé, vous devez télécharger et installer la dernière version.

Remarque

La méthode d’utilisation de PowerShell pour authentifier et récupérer le secret est préférée dans les scénarios où les identités managées sont spécifiquement requises ou lors de l’incorporation du processus dans le code d’une application.

Tout d’abord, utilisez l’identité managée affectée par le système de la machine virtuelle pour obtenir un jeton d’accès permettant de s’authentifier auprès de Key Vault :

  1. Dans le portail, accédez à Machines virtuelles, accédez à votre machine virtuelle Windows puis, dans Vue d’ensemble, sélectionnez Connecter.
  2. Entrez votre Nom d’utilisateur et le Mot de passe que vous avez ajoutés quand vous avez créé la machine virtuelle Windows.
  3. Maintenant que vous avez créé une Connexion Bureau à distance avec la machine virtuelle, ouvrez PowerShell dans une session à distance.
  4. Dans PowerShell, appelez la requête web sur le client pour obtenir le jeton de l’hôte local dans le port spécifique pour la machine virtuelle.

Remarque

Si vous utilisez un cloud souverain, tel que GCC-H, utilisez le point de terminaison vault.usgovcloudapi.net au lieu de vault.azure.net dans la cmdlet PowerShell.

Exemple de requête PowerShell :

$Response = Invoke-RestMethod -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -Method GET -Headers @{Metadata="true"} 

Remarque

Lorsque vous travaillez avec des clouds souverains, vous devez apporter des ajustements au point de terminaison spécifié à la fin de la cmdlet.

Par exemple, vault.usgovcloudapi.net doit être utilisé lors de l’utilisation du cloud Azure Government, avec comme résultat final :

$Response = Invoke-RestMethod -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.usgovcloudapi.net' -Method GET -Headers @{Metadata="true"

Pour confirmer que le suffixe correspond à votre environnement, consultez l’article Vue d’ensemble de la sécurité d’Azure Key Vault.

La réponse doit ressembler à ce qui suit :

Capture d’écran illustrant une demande avec une réponse par jeton.

Ensuite, extrayez le jeton d’accès de la réponse.

   $KeyVaultToken = $Response.access_token

Pour finir, utilisez la cmdlet Invoke-WebRequest PowerShell pour récupérer le secret que vous avez créé précédemment dans Key Vault et transmettre le jeton d’accès dans l’en-tête d’autorisation. Vous avez besoin de l’URL de votre Key Vault qui se trouve dans la section Bases de la page Vue d’ensemble de Key Vault.

Invoke-RestMethod -Uri https://<your-key-vault-URL>/secrets/<secret-name>?api-version=2016-10-01 -Method GET -Headers @{Authorization="Bearer $KeyVaultToken"}

La réponse est de ce type :

  value       id                                                                                    attributes
  -----       --                                                                                    ----------
  'My Secret' https://mi-lab-vault.vault.azure.net/secrets/mi-test/50644e90b13249b584c44b9f712f2e51 @{enabled=True; created=16…

Après avoir récupéré le secret à partir de Key Vault, vous pouvez l’utiliser pour vous authentifier sur un service qui requiert un nom et un mot de passe.

Nettoyer les ressources

Pour finir, lorsque vous souhaitez nettoyer les ressources, connectez-vous au portail Azure, sélectionnez Groupes de ressources, puis localisez et sélectionnez le groupe de ressources créé au moyen de ce tutoriel (par exemple, mi-test). Ensuite, utilisez la commande Supprimer le groupe de ressources.

Vous pouvez également nettoyer les ressources à l’aide de PowerShell ou de l’interface CLI.

Utiliser une identité managée affectée par le système de machine virtuelle Windows pour accéder au gestionnaire des ressources

Conseil

Les étapes décrites dans cet article peuvent varier légèrement en fonction du portail de départ.

Ce tutoriel explique comment créer une identité affectée par le système, comment l’affecter à une machine virtuelle Windows, puis l’utiliser pour accéder à l’API Azure Resource Manager. Les identités MSI sont gérées automatiquement par Azure. Elles permettent l’authentification auprès de services prenant en charge l’authentification Microsoft Entra, sans devoir nécessairement incorporer des informations d’identification à votre code.

Vous découvrirez comment effectuer les actions suivantes :

  • Accordez à votre machine virtuelle l’accès à Azure Resource Manager.
  • Obtenez un jeton d’accès à l’aide de l’identité managée affectée par le système de la machine virtuelle pour accéder à Resource Manager.
  1. Connectez-vous au portail Azure avec votre compte d’administrateur.

  2. Accédez à l’onglet Groupes de ressources.

  3. Sélectionnez le groupe de ressources dont vous souhaitez octroyer l’accès à l’identité managée de la machine virtuelle.

  4. Dans le volet gauche, sélectionnez Contrôle d’accès (IAM).

  5. Sélectionnez Ajouter, puis Ajouter une attribution de rôle.

  6. Sous l’onglet Rôle, sélectionnez Lecteur. Ce rôle permet de voir toutes les ressources, mais ne vous autorise pas à apporter des modifications.

  7. Sous l’onglet Membres, dans l’option Attribuer l’accès à, sélectionnez Identité managée, puis + Sélectionner des membres.

  8. Vérifiez que l’abonnement approprié est listé dans la liste déroulante Abonnement. Pour Groupe de ressources, sélectionnez Tous les groupes de ressources.

  9. Dans la liste déroulante Gérer l’identité, sélectionnez Machine virtuelle.

  10. Pour Sélectionner, choisissez votre machine virtuelle dans la liste déroulante, puis sélectionnez Enregistrer.

    Capture d’écran montrant l’ajout du rôle de lecteur à l’identité managée.

Obtention d’un jeton d’accès

Utilisez l’identité managée affectée par le système de la machine virtuelle, puis appelez Resource Manager pour obtenir un jeton d’accès.

Pour effectuer cette procédure, vous avez besoin d’un client SSH. Si vous utilisez Windows, vous pouvez utiliser le client SSH dans le Sous-système Windows pour Linux. Si vous avez besoin d’aide pour configurer les clés de votre client SSH, consultez Comment utiliser les clés SSH avec Windows sur Azure, ou Comment créer et utiliser une paire de clés publique et privée SSH pour les machines virtuelles Linux dans Azure.

  1. Dans le portail, accédez à votre machine virtuelle Linux et dans Vue d’ensemble, sélectionnez Connexion.
  2. Connectez-vous à la machine virtuelle à l’aide du client SSH de votre choix.
  3. Dans la fenêtre de terminal, à l’aide de curl, adressez une requête au point de terminaison d’identités managées pour ressources Azure en vue d’obtenir un jeton d’accès pour Azure Resource Manager.   Vous trouverez la requête curl pour le jeton d’accès ci-dessous.
curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/' -H Metadata:true

Remarque

La valeur du paramètre resource doit correspondre exactement aux attentes de Microsoft Entra ID. Dans le cas de l’ID de ressource de Resource Manager, vous devez inclure la barre oblique finale dans l’URI.

La réponse inclut le jeton d’accès dont vous avez besoin pour accéder à Azure Resource Manager.

Réponse :

{
  "access_token":"eyJ0eXAiOi...",
  "refresh_token":"",
  "expires_in":"3599",
  "expires_on":"1504130527",
  "not_before":"1504126627",
  "resource":"https://management.azure.com",
  "token_type":"Bearer"
}

Utilisez ce jeton d’accès pour accéder à Azure Resource Manager, par exemple pour lire les détails du groupe de ressources auquel vous avez octroyé l’accès à cette machine virtuelle. Remplacez les valeurs de <SUBSCRIPTION-ID>, <RESOURCE-GROUP>, et <ACCESS-TOKEN> par celles que vous avez créées précédemment.

Remarque

L’URL respecte la casse. Vous devez donc vérifier si vous utilisez exactement la même casse que celle que vous avez utilisée plus tôt quand vous avez nommé le groupe de ressources. Vérifiez également la présence du « G » majuscule dans « resourceGroup ».

curl https://management.azure.com/subscriptions/<SUBSCRIPTION-ID>/resourceGroups/<RESOURCE-GROUP>?api-version=2016-09-01 -H "Authorization: Bearer <ACCESS-TOKEN>" 

La réponse est retournée avec les informations spécifiques au groupe de ressources :

{
"id":"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/DevTest",
"name":"DevTest",
"location":"westus",
"properties":
{
  "provisioningState":"Succeeded"
  }
} 

Utiliser une identité managée attribuée par l’utilisateur sur une machine virtuelle Windows pour accéder à Azure Resource Manager

Ce tutoriel explique comment créer une identité affectée par l’utilisateur, comment l’affecter à une machine virtuelle Windows, puis l’utiliser pour accéder à l’API Azure Resource Manager. Les identités MSI sont gérées automatiquement par Azure. Elles permettent l’authentification auprès de services prenant en charge l’authentification Microsoft Entra, sans devoir nécessairement incorporer des informations d’identification à votre code.

Vous découvrirez comment effectuer les actions suivantes :

  • Créer une identité managée attribuée par l’utilisateur
  • Attribuer votre identité attribuée par l’utilisateur à votre machine virtuelle Windows
  • Accorder à l’identité attribuée par l’utilisateur l’accès à un groupe de ressources dans Azure Resource Manager
  • Obtenir un jeton d’accès par l’identité attribuée par l’utilisateur et l’utiliser pour appeler Azure Resource Manager
  • Lire les propriétés d’un groupe de ressources

Notes

Nous vous recommandons d’utiliser le module Azure Az PowerShell pour interagir avec Azure. Pour commencer, consultez Installer Azure PowerShell. Pour savoir comment migrer vers le module Az PowerShell, consultez Migrer Azure PowerShell depuis AzureRM vers Az.

Configurer Azure PowerShell localement

Pour exécuter des scripts dans cet exemple, vous avez deux options :

  • Utiliser Azure Cloud Shell, que vous pouvez ouvrir en utilisant le bouton Essayer dans le coin supérieur droit des blocs de code.
  • Exécutez les scripts localement avec Azure PowerShell, comme décrit dans la section suivante.

Pour utiliser Azure PowerShell localement dans ce tutoriel (au lieu d’utiliser Cloud Shell), effectuez les étapes suivantes :

  1. Installez la dernière version d’Azure PowerShell, si ce n’est déjà fait.

  2. Connectez-vous à Azure :

    Connect-AzAccount
    
  3. Installez la dernière version de PowerShellGet.

    Install-Module -Name PowerShellGet -AllowPrerelease
    

    Vous devrez peut-être Exit de la session PowerShell en cours après avoir exécuté cette commande, pour l’étape suivante.

  4. Installez la version publiée du module Az.ManagedServiceIdentity. Vous en avez besoin pour effectuer les opérations d’identité managée affectée par l’utilisateur décrites dans ce tutoriel.

    Install-Module -Name Az.ManagedServiceIdentity -AllowPrerelease
    

Enable

Pour les scénarios basés sur une identité affectée par l’utilisateur, vous devez effectuer les étapes suivantes dans cette section :

  1. Créer une identité.
  2. Affecter l’identité nouvellement créée.

Créer une identité

Cette section montre comment créer une identité affectée par l’utilisateur, qui est créée en tant que ressource Azure autonome. À l’aide de la cmdlet New-AzUserAssignedIdentity, Azure crée dans votre locataire Microsoft Entra une identité que vous pouvez affecter à une ou plusieurs instances de service Azure.

Important

Quand vous créez des identités managées affectées par l’utilisateur, le nom doit commencer par une lettre ou un chiffre, et peut inclure une combinaison de caractères alphanumériques, de traits d’union (-) et de traits de soulignement (_). Pour que l’attribution à une machine virtuelle ou à un groupe de machines virtuelles identiques fonctionne correctement, le nom est limité à 24 caractères. Pour plus d’informations, voir FAQ et problèmes connus.

New-AzUserAssignedIdentity -ResourceGroupName myResourceGroupVM -Name ID1

La réponse contient les détails de l’identité affectée par l’utilisateur qui a été créée, comme dans l’exemple suivant. Définissez les valeurs Id et ClientId de votre identité affectée par l’utilisateur, car elles seront utilisées lors des étapes suivantes :

{
Id: /subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1
ResourceGroupName : myResourceGroupVM
Name: ID1
Location: westus
TenantId: aaaabbbb-0000-cccc-1111-dddd2222eeee
PrincipalId: aaaaaaaa-bbbb-cccc-1111-222222222222
ClientId: 00001111-aaaa-2222-bbbb-3333cccc4444
ClientSecretUrl: https://control-westus.identity.azure.net/subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1/credentials?tid=aaaabbbb-0000-cccc-1111-dddd2222eeee&oid=aaaaaaaa-bbbb-cccc-1111-222222222222&aid=00001111-aaaa-2222-bbbb-3333cccc4444
Type: Microsoft.ManagedIdentity/userAssignedIdentities
}

Attribuer une identité

Cette section montre comment affecter l’identité affectée par l’utilisateur à une machine virtuelle Windows. Une identité attribuée par l’utilisateur peut être utilisée par les clients sur plusieurs ressources Azure. Utilisez les commandes suivantes pour attribuer l’identité attribuée par l’utilisateur à une seule machine virtuelle. Utilisez la propriété Id retournée à l’étape précédente pour le paramètre -IdentityID.

$vm = Get-AzVM -ResourceGroupName myResourceGroup -Name myVM
Update-AzVM -ResourceGroupName TestRG -VM $vm -IdentityType "UserAssigned" -IdentityID "/subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1"

Accorder l'accès

Cette section montre comment accorder à votre identité affectée par l’utilisateur l’accès à un groupe de ressources dans Azure Resource Manager. Les identités managées pour les ressources Azure fournissent des identités que votre code peut utiliser afin de demander des jetons d’accès pour s’authentifier auprès d’API de ressources qui prennent en charge l’authentification Microsoft Entra. Dans ce tutoriel, votre code accède à l’API Azure Resource Manager.

Avant que ce code puisse accéder à l’API, vous devez accorder à l’identité l’accès à une ressource dans Azure Resource Manager. Ici, vous accédez au groupe de ressources pour lequel la machine virtuelle est contenue. Mettez à jour la valeur de <SUBSCRIPTIONID> en fonction de votre environnement.

$spID = (Get-AzUserAssignedIdentity -ResourceGroupName myResourceGroupVM -Name ID1).principalid
New-AzRoleAssignment -ObjectId $spID -RoleDefinitionName "Reader" -Scope "/subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/"

La réponse contient les détails de l’affectation de rôle qui a été créée, comme dans l’exemple suivant :

RoleAssignmentId: /subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.Authorization/roleAssignments/00000000-0000-0000-0000-000000000000
Scope: /subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM
DisplayName: ID1
SignInName:
RoleDefinitionName: Reader
RoleDefinitionId: 00000000-0000-0000-0000-000000000000
ObjectId: aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
ObjectType: ServicePrincipal
CanDelegate: False

Accéder aux données

Conseil

Les étapes décrites dans cet article peuvent varier légèrement en fonction du portail de départ.

Obtention d’un jeton d’accès

Pour la suite de ce tutoriel, vous utilisez la machine virtuelle que vous avez créée précédemment.

  1. Connectez-vous au portail Azure.

  2. Dans le portail, accédez à Machines virtuelles, puis accédez à la machine virtuelle Windows. Dans la Vue d’ensemble, sélectionnez Connecter.

  3. Entrez le Nom d’utilisateur et le Mot de passe que vous avez utilisés quand vous avez créé la machine virtuelle Windows.

  4. Maintenant que vous avez créé une Connexion Bureau à distance avec votre machine virtuelle, ouvrez PowerShell dans une session à distance.

  5. À l’aide de la cmdlet Invoke-WebRequest PowerShell, adressez une requête au point de terminaison des identités managées locales pour les ressources Azure afin d’obtenir un jeton d’accès pour Azure Resource Manager. La valeur client_id est la valeur qui a été renvoyée lorsque vous avez créé l’identité managée attribuée par l’utilisateur.

    $response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&client_id=00001111-aaaa-2222-bbbb-3333cccc4444&resource=https://management.azure.com/' -Method GET -Headers @{Metadata="true"}
    $content = $response.Content | ConvertFrom-Json
    $ArmToken = $content.access_token
    

Lire les propriétés

Pour finir, utilisez le jeton d’accès récupéré à l’étape précédente pour accéder à Azure Resource Manager, puis lisez les propriétés du groupe de ressources dont vous avez accordé l’accès à votre identité affectée par l’utilisateur. Remplacez <SUBSCRIPTION ID> par l’ID d’abonnement de votre environnement.

(Invoke-WebRequest -Uri https://management.azure.com/subscriptions/80c696ff-5efa-4909-a64d-f1b616f423ca/resourceGroups/myResourceGroupVM?api-version=2016-06-01 -Method GET -ContentType "application/json" -Headers @{Authorization ="Bearer $ArmToken"}).content

La réponse contient les informations particulières du groupe de ressources, comme dans l’exemple suivant :

{"id":"/subscriptions/<SUBSCRIPTIONID>/resourceGroups/myResourceGroupVM","name":"myResourceGroupVM","location":"eastus","properties":{"provisioningState":"Succeeded"}}

En savoir plus