Authentifier des applications hébergées par Azure auprès de ressources Azure avec le Kit de développement logiciel (SDK) Azure pour .NET

Lorsqu’une application est hébergée dans Azure à l’aide d’un service comme Azure App Service, Machines virtuelles Microsoft Azure ou Azure Container Instances, l’approche recommandée pour authentifier une application auprès des ressources Azure consiste à utiliser une identité managée.

Une identité managée fournit une identité pour votre application afin qu’elle puisse se connecter à d’autres ressources Azure sans avoir à utiliser une clé secrète ou un autre secret d’application. En interne, Azure connaît l’identité de votre application et les ressources auxquelles elle est autorisée à se connecter. Azure utilise ces informations pour obtenir automatiquement des jetons Microsoft Entra pour que l’application lui permette de se connecter à d’autres ressources Azure, sans avoir à gérer les secrets d’application.

Types d’identités managées

Il existe deux types d’identités administrées :

  • Affectation par le système : ce type d’identité managée est fourni par et lié directement à une ressource Azure. Lorsque vous activez l’identité managée sur une ressource Azure, vous obtenez une identité managée affectée par le système pour cette ressource. Une identité managée affectée par le système est liée au cycle de vie de la ressource Azure à laquelle elle est associée. Lorsque la ressource est supprimée, Azure supprime automatiquement l’identité. Étant donné qu’il vous suffit d’activer l’identité managée pour la ressource Azure hébergeant votre code, il s’agit du type d’identité managée le plus simple à utiliser.
  • Affectation par l’utilisateur : vous pouvez également créer une identité managée en tant que ressource Azure autonome. Cela est le plus fréquemment utilisé lorsque votre solution a plusieurs charges de travail qui s’exécutent sur plusieurs ressources Azure qui doivent toutes partager la même identité et les mêmes autorisations. Par exemple, si votre solution avait des composants qui s’exécutaient sur plusieurs instances App Service et de machines virtuelles qui devaient toutes accéder au même ensemble de ressources Azure, la création et l’utilisation d’une identité managée affectée par l’utilisateur sur ces ressources serait logique.

Cet article décrit les étapes permettant d’activer et d’utiliser une identité managée affectée par le système pour une application. Si vous devez utiliser une identité managée affectée par l’utilisateur, consultez l’article Gérer les identités managées affectées par l’utilisateur pour voir comment créer une identité managée affectée par l’utilisateur.

1 - Activer l’identité managée dans la ressource Azure hébergeant l’application

La première étape consiste à activer l’identité managée sur la ressource Azure hébergeant votre application. Par exemple, si vous hébergez une application .NET en utilisant Azure App Service, vous devez activer l’identité managée pour l’application web App Service qui héberge votre application. Si vous utilisiez une machine virtuelle pour héberger votre application, vous autoriseriez votre machine virtuelle à utiliser une identité managée.

Vous pouvez activer l’identité managée pour une ressource Azure à l’aide du Portail Azure ou d’Azure CLI.

Instructions Capture d'écran
Accédez à la ressource qui héberge votre code d’application dans le Portail Azure. Par exemple, vous pouvez taper le nom de votre ressource dans la zone de recherche en haut de la page et y accéder en le sélectionnant dans la boîte de dialogue. Capture d’écran montrant comment utiliser la barre de recherche supérieure dans le Portail Azure pour localiser et accéder à une ressource dans Azure.
Dans la page de vos ressources, sélectionnez l’élément de menu Identité dans le menu gauche. Toutes les ressources Azure capables de prendre en charge l’identité managée auront un élément de menu Identité, même si la disposition du menu peut varier légèrement. Capture d’écran montrant l’emplacement de l’élément de menu Identité dans le menu de gauche d’une ressource Azure.
Dans la page Identité :
  1. Déplacez le curseur État sur Activé.
  2. Cliquez sur Enregistrer.
Une boîte de dialogue de confirmation vérifie que vous souhaitez activer l’identité managée pour votre service. Répondez Oui et l’identité managée sera activée pour la ressource Azure.
Capture d’écran montrant comment activer l’identité managée pour une ressource Azure sur la page Identité de la ressource.

2 - Attribuer des rôles à l’identité managée

Ensuite, déterminez les rôles (autorisations) dont votre application a besoin et affecter l’identité managée à ces rôles dans Azure. Une identité managée peut se voir attribuer des rôles au niveau d’une ressource, d’un groupe de ressources ou d’une étendue d’abonnement. Cet exemple montre comment attribuer des rôles à l’étendue du groupe de ressources, car la plupart des applications regroupent toutes leurs ressources Azure dans un seul groupe de ressources.

Instructions Capture d'écran
Recherchez le groupe de ressources pour votre application en recherchant le nom du groupe de ressources en utilisant la zone de recherche en haut du Portail Azure.

Accédez à votre groupe de ressources en sélectionnant le nom du groupe de ressources sous le titre Groupes de ressources dans la boîte de dialogue.
Capture d’écran montrant comment utiliser la barre de recherche supérieure dans le Portail Azure pour localiser et accéder à un groupe de ressources dans Azure. Il s’agit du groupe de ressources auquel vous allez attribuer des rôles (autorisations).
Dans la page du groupe de ressources, sélectionnez Contrôle d’accès (IAM) dans le menu de gauche. Capture d’écran montrant l’emplacement de l’élément de menu Contrôle d’accès (IAM) dans le menu de gauche d’un groupe de ressources Azure.
Dans la page Contrôle d’accès (IAM) :
  1. Sélectionnez l’onglet Attributions de rôles.
  2. Sélectionnez + Ajouter dans le menu supérieur, puis Ajouter une attribution de rôle dans le menu déroulant résultant.
Capture d’écran montrant comment accéder à l’onglet Attributions de rôles et à l’emplacement du bouton utilisé pour ajouter des attributions de rôles à un groupe de ressources.
La page Ajouter une attribution de rôle répertorie tous les rôles qui peuvent être attribués pour le groupe de ressources.
  1. Utilisez la zone de recherche pour filtrer la liste afin de la rendre plus facile à gérer. Cet exemple montre comment filtrer les rôles d’objets blob de stockage.
  2. Sélectionnez le rôle que vous voulez attribuer.
Sélectionnez Suivant pour accéder à l’écran suivant.
Capture d’écran montrant comment filtrer et sélectionner des attributions de rôles à ajouter au groupe de ressources.
La page Ajouter une attribution de rôle suivante vous permet de spécifier l’utilisateur auquel attribuer le rôle.
  1. Sélectionnez Identité managée sous Attribuer l’accès à.
  2. Sélectionnez + Sélectionner des membres sous Membres.
Une boîte de dialogue s’ouvre à droite du Portail Azure.
Capture d’écran montrant comment sélectionner l’identité managée comme type d’utilisateur que vous souhaitez attribuer le rôle (autorisation) sur la page Ajouter des attributions de rôle.
Dans la boîte de dialogue Sélectionner des identités managées :
  1. La liste déroulante Identité managée et la zone de texte Sélectionner peuvent être utilisées pour filtrer la liste des identités managées dans votre abonnement. Dans cet exemple, en sélectionnant App Service, seules les identités managées associées à un service App Service sont affichées.
  2. Sélectionnez l’identité managée pour la ressource Azure hébergeant votre application.
Sélectionnez Sélectionner en bas de la boîte de dialogue pour continuer.
Capture d’écran montrant comment utiliser la boîte de dialogue Sélectionner des identités managées pour filtrer et sélectionner l’identité managée à laquelle attribuer le rôle.
L’identité managée s’affiche désormais comme sélectionnée dans l’écran Ajouter une attribution de rôle.

Sélectionnez Vérifier + affecter pour accéder à la page finale, puis Vérifier + attribuer à nouveau pour terminer le processus.
Capture d’écran de l’écran d’ajout final d’attribution de rôle où un utilisateur doit sélectionner le bouton Vérifier + Attribuer pour finaliser l’attribution de rôle.

3 - Implémenter DefaultAzureCredential dans votre application

DefaultAzureCredential est une séquence bien arrêtée et ordonnée de mécanismes d’authentification auprès de Microsoft Entra. Chaque mécanisme d’authentification est une classe dérivée de la classe TokenCredential appelée informations d’identification. Au moment de l’exécution, DefaultAzureCredential tente de s’authentifier en utilisant les premières informations d’identification. Si ces informations d’identification ne parviennent pas à acquérir un jeton d’accès, les informations d’identification suivantes de la séquence sont utilisées, et ainsi de suite jusqu’à l’obtention d’un jeton d’accès. De cette façon, votre application peut utiliser différentes informations d’identification dans différents environnements sans qu’il soit nécessaire d’écrire du code propre à l’environnement.

L’ordre et les emplacements dans lesquels DefaultAzureCredential recherchent les informations d’identification se trouvent dans DefaultAzureCredential.

Pour utiliser DefaultAzureCredential, ajoutez les packages Azure.Identity et éventuellement Microsoft.Extensions.Azure à votre application :

Dans un terminal de votre choix, accédez au répertoire du projet d’application et exécutez les commandes suivantes :

dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure

Les services Azure sont accessibles à l’aide de classes clientes spécialisées à partir des différentes bibliothèques de client du Kit de développement logiciel (SDK) Azure. Ces classes et vos propres services personnalisés doivent être inscrits afin qu’ils soient accessibles par le biais de l’injection de dépendances dans votre application. Dans Program.cs, effectuez les étapes suivantes pour inscrire une classe cliente et DefaultAzureCredential :

  1. Incluez les espaces de noms Azure.Identity et Microsoft.Extensions.Azure via les directives using.
  2. Inscrivez le client du service Azure à l’aide de la méthode d’extension correspondante préfixée avec Add.
  3. Passez une instance de DefaultAzureCredential à la méthode UseCredential.

Par exemple :

using Microsoft.Extensions.Azure;
using Azure.Identity;

builder.Services.AddAzureClients(clientBuilder =>
{
    clientBuilder.AddBlobServiceClient(
        new Uri("https://<account-name>.blob.core.windows.net"));
    clientBuilder.UseCredential(new DefaultAzureCredential());
});

Une alternative à UseCredential consiste à instancier directement DefaultAzureCredential :

using Azure.Identity;

builder.Services.AddSingleton<BlobServiceClient>(_ =>
    new BlobServiceClient(
        new Uri("https://<account-name>.blob.core.windows.net"),
        new DefaultAzureCredential()));

Lorsque le code précédent s’exécute sur votre poste de travail de développement local, il recherche dans les variables d’environnement un principal de service d’application ou, dans les outils de développement installés localement comme Visual Studio, un ensemble d’informations d’identification de développeur. Vous pouvez utiliser l’une ou l’autre de ces approches pour authentifier l’application auprès des ressources Azure pendant le développement local.

Quand vous le déployez sur Azure, ce même code peut également authentifier votre application auprès d’autres ressources Azure. DefaultAzureCredential peut récupérer les paramètres d’environnement et les configurations d’identité managée pour s’authentifier automatiquement auprès d’autres services.