Didacticiel : Utiliser une identité managée affectée par le système de machine virtuelle Windows pour accéder au Stockage 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.

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

Remarque

L’authentification Microsoft Entra pour le Stockage Azure est en préversion publique.

Prérequis

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éer une machine virtuelle avec une identité affectée par le système activée

Accorder l'accès

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. Sous 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. Revenez à votre compte de stockage nouvellement créé.

  2. Sous Service BLOB, sélectionnez Conteneurs.

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

  4. Sous Nouveau conteneur, entrez un nom pour le conteneur puis, sous 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 (sans les guillemets) « Hello world! :) », puis enregistrez-le.

  6. Chargez le fichier vers le conteneur nouvellement créé en cliquant sur le nom du conteneur, puis sur Charger

  7. Dans le volet Charger l’objet blob, sous Fichiers, sélectionnez l’icône de dossier et recherchez le fichier hello_world.txt sur votre ordinateur local, sélectionnez le fichier, puis sélectionnez 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. 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 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 ».

Étapes suivantes

Dans ce didacticiel, vous avez appris à activer une identité managée affectée par le système de machine virtuelle Windows pour accéder au Stockage Azure. Pour en savoir plus sur le stockage Azure, consultez :