Partager via


Tutoriel : Utiliser une identité managée pour connecter une application web Azure à une base de données Azure SQL sans secrets

Azure App Service offre un service d'hébergement web hautement évolutif appliquant des mises à jour correctives automatiques dans Azure. App Service fournit également une identité managée pour votre application, qui est une solution clé en main pour sécuriser l’accès à Azure SQL et à d’autres services Azure. Les identités managées dans App Service sécurisent votre application en éliminant les secrets, tels que les informations d’identification dans les chaînes de connexion.

Ce tutoriel vous montre comment ajouter une identité managée à un exemple d’application .NET qui a un back-end Azure SQL. Une fois que vous avez terminé, votre application peut se connecter à la base de données Azure SQL en toute sécurité sans avoir besoin d’un nom d’utilisateur et d’un mot de passe.

Diagramme architectural du scénario du tutoriel.

Dans ce tutoriel, vous allez :

  • Activer les identités managées.
  • Accordez à Azure SQL Database l’accès à l’identité managée.
  • Configurez Entity Framework pour utiliser l’authentification Microsoft Entra avec SQL Database.
  • Connectez-vous à SQL Database à partir de Visual Studio à l’aide de l’authentification Microsoft Entra.

Pour obtenir des conseils sur l’utilisation d’Azure Database pour MySQL ou d’Azure Database pour PostgreSQL dans les infrastructures Node.js, Python et Java, consultez tutoriel : Se connecter aux bases de données Azure à partir d’App Service sans secrets à l’aide d’une identité managée.

Remarque

Prérequis

  • Si vous ne disposez pas d’un compte Azure, créez-en un gratuitement avant de commencer.

  • Disposez d’une application CRUD (Create-read-update-delete) Azure App Service de base ASP.NET MVC ou ASP.NET Core MVC qui utilise Azure SQL Database avec l’authentification SQL comme back-end. Les étapes décrites dans ce tutoriel prennent en charge les versions .NET suivantes :

    • .NET Framework 4.8 et versions ultérieures
    • .NET 6.0 et versions ultérieures
  • Autorisez la connexion cliente de votre ordinateur à Azure, afin de pouvoir déboguer votre application dans votre environnement de développement. Vous pouvez ajouter l’adresse IP du client en suivant les étapes décrites dans Gérer les règles de pare-feu IP au niveau du serveur à l’aide du portail Azure.

  • Connectez-vous à Azure Cloud Shell ou préparez votre environnement pour utiliser Azure CLI.

Accorder à l’administrateur de base de données l’accès à un utilisateur Microsoft Entra

Activez l’authentification Microsoft Entra sur la base de données Azure SQL en affectant un utilisateur Microsoft Entra en tant qu’administrateur du serveur Azure SQL. L’administrateur Microsoft Entra doit être un utilisateur créé, importé, synchronisé ou invité dans l’ID Microsoft Entra. Cet utilisateur peut ne pas être identique à l’utilisateur du compte Microsoft pour votre abonnement Azure.

Exécutez les commandes suivantes dans l’environnement Bash d’Azure Cloud Shell ou après la connexion à Azure CLI localement.

  1. Utilisez az ad user list avec le display-nameparamètre , filterou upn pour obtenir l’ID d’objet de l’utilisateur Microsoft Entra ID que vous souhaitez rendre administrateur. Exécutez az ad user list une commande autonome pour afficher des informations pour tous les utilisateurs du répertoire Microsoft Entra.

    Par exemple, la commande suivante répertorie les informations d’un utilisateur Microsoft Entra ID avec le display-name nom de prénom.

    az ad user list --display-name "Firstname Lastname"
    

    Voici un exemple de sortie :

     "businessPhones": [],
     "displayName": "Firstname Lastname",
     "givenName": null,
     "id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
     "jobTitle": null,
     "mail": "firstname@contoso.com",
     "mobilePhone": null,
     "officeLocation": null,
     "preferredLanguage": null,
     "surname": null,
     "userPrincipalName": "firstname@contoso.com"
    
  2. Ajoutez l’utilisateur Microsoft Entra ID en tant qu’administrateur sur le serveur Azure SQL à l’aide de az sql server ad-admin create avec le paramètre object-id. Dans la commande suivante, remplacez <server-name> par le nom de votre serveur moins le .database.windows.net suffixe et <entra-id> par la id valeur de la sortie de la commande précédente az ad user list .

    az sql server ad-admin create --resource-group myResourceGroup --server-name <server-name> --display-name ADMIN --object-id <entra-id>
    

Configurer la connectivité d’identité managée pour l’application

Les étapes suivantes configurent votre application pour se connecter à Azure SQL Database à l’aide d’une identité managée affectée par le système. Pour utiliser une identité affectée par l’utilisateur, consultez Tutoriel : Se connecter aux bases de données Azure à partir d’App Service sans secrets à l’aide d’une identité managée.

Activer l’identité managée pour l’application

Pour activer une identité managée pour votre application Azure, utilisez la commande az webapp identity assign , en remplaçant <app-name> par le nom de votre application. Le nom d’une identité affectée par le système est toujours identique au nom de l’application.

az webapp identity assign --resource-group myResourceGroup --name <app-name>

Voici un exemple de sortie :

{
  "additionalProperties": {},
  "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
  "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
  "type": "SystemAssigned"
}

Pour activer l’identité managée pour un emplacement de déploiement, ajoutez --slot <slot-name> à la commande précédente et utilisez le nom de l’emplacement dans <slot-name>. Le nom d’une identité affectée par le système pour un emplacement de déploiement est <app-name>/slots/<slot-name>.

Vous pouvez également ajouter l’identité à un groupe Microsoft Entra, puis accorder à SQL Database l’accès au groupe Microsoft Entra au lieu de l’identité. Pour accorder des autorisations pour un groupe Microsoft Entra, utilisez le nom d’affichage du groupe. Les commandes suivantes ajoutent l’exemple d’identité managée à un nouveau groupe appelé myAzureSQLDBAccessGroup.

$groupid=(az ad group create --display-name myAzureSQLDBAccessGroup --mail-nickname myAzureSQLDBAccessGroup --query objectId --output tsv)
$msiobjectid=(az webapp identity show --resource-group myResourceGroup --name <app-name> --query principalId --output tsv)
az ad group member add --group $groupid --member-id $msiobjectid
az ad group member list -g $groupid

Accorder des autorisations à l’identité managée

Accordez à l’identité les autorisations minimales dont votre application a besoin.

  1. Ouvrez une ligne de commande PowerShell et connectez-vous à SQL Database à l’aide de la commande SQLCMD suivante. Remplacez <server-name> par le nom de votre serveur, <db-name> par le nom de votre base de données et <admin-user> par l’utilisateur userPrincipalName administrateur à partir de la sortie de la commande précédente az ad user list .

    sqlcmd -S <servername>.database.windows.net -d <db-name> -U <admin-user> -G -l 30
    

    Suivez les invites pour vous connecter.

  2. À l’invite SQL, exécutez les commandes suivantes pour accorder à l’application les autorisations minimales dont elle a besoin sur la base de données. Remplacez <identity-name> par le nom de l’identité managée dans l’ID Microsoft Entra, qui est identique au nom de l’application.

    CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [<identity-name>];
    ALTER ROLE db_datawriter ADD MEMBER [<identity-name>];
    ALTER ROLE db_ddladmin ADD MEMBER [<identity-name>];
    GO
    

Remarque

Les services d’identité managée back-end gèrent un cache de jetons qui met à jour le jeton d’une ressource cible uniquement lorsqu’il expire. Si vous essayez de modifier vos autorisations SQL Database après avoir obtenu d’abord un jeton avec votre application, vous n’obtenez pas de nouveau jeton avec des autorisations mises à jour tant que le jeton mis en cache n’expire pas.

Supprimer la chaîne de connexion d’origine

Toutes les modifications que vous avez apportées dans web.config ou appsettings.json fonctionnent avec l’identité managée. Vous pouvez supprimer la chaîne de connexion d’origine que vous avez utilisée lorsque vous avez déployé votre application la première fois. Pour supprimer la chaîne de connexion, exécutez la commande Azure CLI suivante, en remplaçant <app-name> par le nom de votre application et <connection-string-name> par le nom de votre chaîne de connexion.

az webapp config connection-string delete --resource-group myResourceGroup --name <app-name> --setting-names <connection-string-name>

Configurer votre environnement de développement

Configurez votre environnement de développement choisi et connectez-vous à Azure. Pour plus d’informations sur la configuration de votre environnement de développement pour l’authentification Microsoft Entra, consultez Bibliothèque de client Azure Identity pour .NET.

Visual Studio pour Windows est intégré à l’authentification Microsoft Entra.

  1. Pour activer le développement et le débogage dans Visual Studio, ajoutez votre utilisateur Microsoft Entra dans Visual Studio en sélectionnantParamètres du compte de > dans le menu supérieur, puis sélectionnez Se connecter ou Ajouter.
  2. Pour définir l’utilisateur Microsoft Entra pour l’authentification du service Azure, sélectionnez Options d’outils> dans le menu supérieur, puis sélectionnezSélection du compted’authentification> du service Azure. Sélectionnez l’utilisateur Microsoft Entra que vous avez ajouté, puis OK.

Modifier votre projet et publier votre application

Votre application web adossée à une base de données Azure SQL utilise un contexte de base de données pour se connecter à la base de données. Pour utiliser l’authentification Microsoft Entra pour utiliser l’application, vous devez mettre à jour le contexte de base de données pour faire référence au fournisseur Entity Framework SQL Server, qui dépend du fournisseur microsoft.Data.SqlClient moderne ADO.NET.

Le fournisseur Entity Framework remplace le fournisseur SQL Server System.Data.SqlClient intégré et inclut la prise en charge des méthodes d’authentification Microsoft Entra ID. Pour plus d’informations, consultez Microsoft.EntityFramework.SqlServer.

[DbConfigurationType(typeof(MicrosoftSqlDbConfiguration))] fonctionne localement pour utiliser le contexte de base de données Microsoft.Data.SqlClient, mais étant donné que System.Data.SqlClient est codé en dur en tant que fournisseur dans Azure App Service, vous devez étendre MicrosoftSqlDbConfiguration pour rediriger les références de System.Data.SqlClient vers Microsoft.Data.SqlClient à la place. Les étapes diffèrent selon que vous disposez d’une application ASP.NET ou ASP.NET Core.

Une application ASP.NET Core utilise Entity Framework Core par défaut.

  1. Dans la console du Gestionnaire de package Visual Studio, ajoutez le package NuGet Microsoft.Data.SqlClient.

    Install-Package Microsoft.Data.SqlClient
    
  2. Dans appsettings.json, remplacez la valeur de la chaîne de connexion par le code suivant, en remplaçant <server-name et <database-name> par le nom de votre serveur et de votre base de données.

    "Server=tcp:<server-name>.database.windows.net;Authentication=Active Directory Default; Database=<database-name>;"
    

    Remarque

    Vous pouvez utiliser l’authentification Par défaut Active Directory sur votre ordinateur local et dans Azure App Service. Le pilote peut acquérir un jeton auprès de Microsoft Entra ID de plusieurs façons différentes.

    Si l’application est déployée, le conducteur obtient un jeton de l’identité managée attribuée par le système de l’application. Le pilote peut également s’authentifier avec une identité managée affectée par l’utilisateur si vous incluez User Id=<client-id-of-user-assigned-managed-identity>; dans votre chaîne de connexion.

    La DefaultAzureCredential classe met en cache le jeton en mémoire et le récupère à partir de l’ID Microsoft Entra avant l’expiration. Vous n’avez pas besoin de code personnalisé pour actualiser le jeton.

    Vous disposez maintenant de tout ce dont vous avez besoin pour vous connecter à Azure SQL Database lorsque vous déboguez dans Visual Studio. Votre code utilise l’utilisateur Microsoft Entra que vous avez configuré lors de la configuration de votre environnement de développement.

  3. Exécutez votre application. L’application CRUD dans votre navigateur se connecte directement à la base de données Azure SQL à l’aide de l’authentification Microsoft Entra. Cette configuration vous permet d’exécuter des migrations de base de données à partir de Visual Studio.

  4. Publiez vos modifications à l’aide des commandes Git suivantes :

    git commit -am "configure managed identity"
    git push azure main
    

Tester l’application

Lorsque la nouvelle page web affiche votre liste des tâches, votre application se connecte à la base de données à l’aide de l’identité managée.

Capture d’écran montrant l’application Azure après la première migration du code.

Vous pouvez maintenant modifier la liste de tâches.

Nettoyer les ressources

Au cours des étapes précédentes, vous avez créé des ressources Azure au sein d’un groupe de ressources. Si vous ne pensez pas avoir besoin de ces ressources à l’avenir, supprimez le groupe de ressources en exécutant la commande suivante dans Cloud Shell :

az group delete --name myResourceGroup

L’exécution de cette commande peut prendre une minute.