Accéder à Stockage Azure à partir d’une application web à l’aide d’identités managées

Découvrez comment accéder au stockage Azure pour le compte d’une application web (et non d’un utilisateur connecté) s’exécutant sur Azure App Service à l’aide d’identités managées.

Diagramme illustrant comment accéder au stockage.

Vous souhaitez ajouter l’accès au plan de données Azure (stockage Azure, Azure SQL Database, Azure Key Vault ou d’autres services) à partir de votre application web. Vous pourriez utiliser une clé partagée, mais vous devriez alors vous occuper de la sécurité opérationnelle afin d’identifier qui pourrait créer, déployer et gérer le secret. La clé pourrait également être archivée dans GitHub, que les pirates savent analyser. Un moyen plus sûr d’accorder à votre application web l’accès aux données consiste à utiliser des identités managées.

Une identité managée de Microsoft Entra ID permet à App Service d’accéder aux ressources par le biais du contrôle d’accès en fonction du rôle (RBAC) sans demander d’informations d’identification d’application. Après avoir affecté une identité managée à votre application web, Azure s’occupe de la création et de la distribution d’un certificat. Vous n’avez pas à vous soucier de la gestion des secrets ou des informations d’identification d’application.

Dans ce tutoriel, vous allez apprendre à :

  • Créer une identité managée affectée par le système sur une application web.
  • Créer un compte de stockage et un conteneur de stockage d’objets blob Azure.
  • Accéder au stockage à partir d’une application web avec des identités managées.

Si vous n’avez pas d’abonnement Azure, créez un compte gratuit Azure avant de commencer.

Prérequis

Activer une identité managée sur une application

Si vous créez et publiez votre application web à l’aide de Visual Studio, l’identité managée a été activée pour vous sur votre application. Dans votre service d’application, sélectionnez Identité dans le volet gauche, puis Affectée par le système. Vérifiez qu’État a la valeur Activé. Si ce n’est pas le cas, sélectionnez Enregistrer, puis Oui pour activer l’identité managée affectée par le système. Lorsque l’identité managée est activée, l’état prend la valeur Activé et l’ID d’objet est disponible.

Capture d’écran montrant l’option d’identité affectée par le système.

Cette étape crée un ID d’objet différent de l’ID d’application créé dans le volet Authentification/Autorisation. Copiez l’ID d’objet de l’identité managée affectée par le système. Vous en aurez besoin ultérieurement.

Créer un compte de stockage et un conteneur de stockage d’objets blob

Vous êtes maintenant prêt à créer un compte de stockage et un conteneur de stockage d’objets blob.

Chaque compte de stockage doit appartenir à un groupe de ressources Azure. Un groupe de ressources est un conteneur logique servant à grouper vos services Azure. Quand vous créez un compte de stockage, vous avez le choix entre créer un groupe de ressources ou utiliser un groupe de ressources existant. Cet article montre comment créer un groupe de ressources.

Un compte de stockage v2 à usage général fournit un accès à tous les services de Stockage Azure : objets blob, fichiers, files d’attente, tables et disques. Les étapes décrites ici créent un compte de stockage v2 universel, mais les étapes de création d’un autre type de compte de stockage sont similaires.

Les objets BLOB dans le stockage Azure sont organisés en conteneurs. Avant de pouvoir télécharger un objet blob plus loin dans ce tutoriel, vous devez d’abord créer un conteneur.

Pour créer un compte de stockage v2 universel dans le portail Azure, procédez comme suit.

  1. Dans le menu du portail Azure, sélectionnez Tous les services. Dans la liste des ressources, entrez Comptes de stockage. Au fur et à mesure de la saisie, la liste est filtrée. Sélectionnez Comptes de stockage.

  2. Dans la fenêtre Comptes de stockage qui apparaît, sélectionnez Créer.

  3. Sélectionnez l’abonnement dans lequel créer le compte de stockage.

  4. Sous le champ Groupe de ressources, sélectionnez le groupe de ressources qui contient votre application web dans le menu déroulant.

  5. Ensuite, entrez un nom pour votre compte de stockage. Le nom choisi doit être unique dans tout Azure. Le nom doit aussi contenir entre 3 et 24 caractères, et uniquement des lettres minuscules et des chiffres.

  6. Sélectionnez l’emplacement de votre compte de stockage ou utilisez l’emplacement par défaut.

  7. Pour Performances, sélectionnez l’option Standard.

  8. Pour Redondance, sélectionnez l’option Stockage localement redondant (LRS) dans la liste déroulante.

  9. Sélectionnez Vérifier pour passer en revue vos paramètres de compte de stockage et créer le compte.

  10. Sélectionnez Create (Créer).

Pour créer un conteneur de stockage d’objets blob dans le stockage Azure, effectuez les étapes suivantes.

  1. Accédez à votre nouveau compte de stockage dans le portail Azure.

  2. Faites défiler le menu de gauche du compte de stockage jusqu’à la section Stockage de données, puis sélectionnez Conteneurs.

  3. Sélectionnez le bouton + Conteneur.

  4. Entrez un nom pour votre nouveau conteneur. Le nom du conteneur doit être en minuscules, commencer par une lettre ou un chiffre, et peut comporter uniquement des lettres, des chiffres et des tirets (-).

  5. Définissez le niveau d’accès public sur le conteneur. Le niveau par défaut est Private (no anonymous access) (Privé (aucun accès anonyme)).

  6. Sélectionnez Créer pour créer le conteneur.

Accorder l’accès au compte de stockage

Vous devez accorder à votre application web un accès au compte de stockage avant de pouvoir créer, lire ou supprimer des objets blob. Lors d’une étape précédente, vous avez configuré l’application web s’exécutant sur App Service avec une identité managée. À l’aide de RBAC Azure, vous pouvez accorder à l’identité managée l’accès à une autre ressource, comme n’importe quel principal de sécurité. Le rôle Contributeur aux données Blob du stockage accorde à l’application web (représentée par l’identité managée affectée par le système) un accès en lecture, écriture et suppression au conteneur d’objets blob et aux données.

Notes

Certaines opérations sur les conteneurs d'objets blob privés ne sont pas prises en charge par Azure RBAC, telles que l'affichage d'objets blob ou la copie d'objets blob entre comptes. Un conteneur d'objets blob avec un niveau d'accès privé nécessite un jeton SAS pour toute opération non autorisée par Azure RBAC. Pour plus d'informations, consultez Quand utiliser une signature d'accès partagé.

Dans le portail Azure, accédez à votre compte de stockage pour accorder l’accès à votre application web. Sélectionnez Contrôle d’accès (IAM) dans le volet gauche, puis Attributions de rôle. La liste des utilisateurs ayant accès au compte de stockage s’affiche. À présent, vous souhaitez ajouter une attribution de rôle à un bot, le service d’application qui a besoin d’accéder au compte de stockage. Sélectionnez Ajouter>Ajouter une attribution de rôle pour ouvrir la page Ajouter une attribution de rôle.

  1. Dans l’onglet Type d’affectation, sélectionnez Type de fonction de travail, puis Suivant.

  2. Dans l’onglet Rôle, sélectionnez le rôle Contributeur aux données Blob du stockage dans la liste déroulante, puis sélectionnez Suivant.

  3. Dans l’onglet Membres, sélectionnez Attribuer l’accès à ->Identité managée, puis Membres ->Sélectionner des membres. Dans la fenêtre Sélectionner des identités managées, recherchez et sélectionnez l’identité managée créée pour App Service dans la liste déroulante Identité managée. Sélectionnez le bouton Sélectionner.

  4. Sélectionnez Passer en revue et attribuer, puis à nouveau Passer en revue et attribuer.

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

Votre application web a maintenant accès à votre compte de stockage.

Accéder au Stockage Blob

La classe DefaultAzureCredential est utilisée pour obtenir les informations d’identification d’un jeton pour votre code afin d’autoriser les requêtes d’accès à Stockage Azure. Créez une instance de la classe DefaultAzureCredential, qui utilise l’identité managée pour extraire des jetons et les attacher au client de service. L’exemple de code suivant obtient les informations d’identification du jeton authentifiées, et les utilise pour créer un objet de client de service, qui charge un nouvel objet blob.

Pour voir ce code dans un exemple d’application, consultez l’exemple sur GitHub.

Installer des packages de bibliothèque de client

Installez le package NuGet de stockage d’objets blob pour utiliser le stockage d’objets blob et le package NuGet de la bibliothèque cliente Azure Identity pour .NET afin de vous authentifier avec des informations d’identification Microsoft Entra. Installez les bibliothèques clientes à l’aide de l’interface de ligne de commande (CLI) .NET ou de la console du gestionnaire de package dans Visual Studio.

CLI .NET

Ouvrez une ligne de commande et basculez vers le répertoire qui contient votre fichier projet.

Exécutez les commandes d’installation.

dotnet add package Azure.Storage.Blobs

dotnet add package Azure.Identity

Console du Gestionnaire de package

Ouvrez le projet ou la solution dans Visual Studio, puis ouvrez la console à l’aide de la commande Outils>Gestionnaire de package NuGet>Console du gestionnaire de package.

Exécutez les commandes d’installation.

Install-Package Azure.Storage.Blobs

Install-Package Azure.Identity

Exemple

using System;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Text;
using System.IO;
using Azure.Identity;

// Some code omitted for brevity.

static public async Task UploadBlob(string accountName, string containerName, string blobName, string blobContents)
{
    // Construct the blob container endpoint from the arguments.
    string containerEndpoint = string.Format("https://{0}.blob.core.windows.net/{1}",
                                                accountName,
                                                containerName);

    // Get a credential and create a client object for the blob container.
    BlobContainerClient containerClient = new BlobContainerClient(new Uri(containerEndpoint),
                                                                    new DefaultAzureCredential());

    try
    {
        // Create the container if it does not exist.
        await containerClient.CreateIfNotExistsAsync();

        // Upload text to a new block blob.
        byte[] byteArray = Encoding.ASCII.GetBytes(blobContents);

        using (MemoryStream stream = new MemoryStream(byteArray))
        {
            await containerClient.UploadBlobAsync(blobName, stream);
        }
    }
    catch (Exception e)
    {
        throw e;
    }
}

Nettoyer les ressources

Si vous avez terminé ce tutoriel et que vous n’avez plus besoin de l’application web ni des ressources associées, nettoyez les ressources que vous avez créées.

Étapes suivantes