Tutoriel : Se connecter à SQL Database à partir d’App Service .NET sans secrets à l’aide d’une identité managée

App Service offre un service d’hébergement web hautement évolutif appliquant des mises à jour correctives automatiques dans Azure. Il offre également une identité managée pour votre application, qui constitue une solution clé en main permettant de sécuriser l’accès à Azure SQL Database et à d’autres services Azure. Les identités managées dans App Service sécurisent votre application en en éliminant les secrets, par exemple les informations d’identification dans les chaînes de connexion. Dans ce tutoriel, vous ajoutez une identité managée à l’exemple d’application web que vous avez créé dans l’un des tutoriels suivants :

Lorsque vous aurez terminé, votre exemple d’application se connectera à SQL Database en toute sécurité sans nécessiter aucun nom d’utilisateur ni mot de passe.

Diagramme d’architecture pour le scénario de didacticiel.

Notes

Les étapes décrites dans ce tutoriel prennent en charge les versions suivantes :

  • .NET Framework 4.8 et versions ultérieures
  • .NET 6.0 et versions ultérieures

Pour obtenir des conseils sur Azure Database pour MySQL ou Azure Database pour PostgreSQL dans d’autres frameworks de langage (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.

Contenu :

  • Activer les identités managées
  • Accorder à l’identité managée un accès à SQL Database
  • Configurer Entity Framework pour utiliser l’authentification Microsoft Entra avec SQL Database
  • Se connecter à SQL Database à partir de Visual Studio à l’aide de l’authentification Microsoft Entra

Remarque

L’authentification Microsoft Entra est différente de l’authentification Windows intégrée dans Active Directory (AD DS) local. AD DS et Microsoft Entra ID utilisent des protocoles d’authentification totalement différents. Pour plus d’informations, consultez la documentation de Microsoft Entra Domain Services.

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

Prérequis

Cet article reprend là où vous vous êtes arrêté dans l’un des tutoriels suivants :

Si vous ne l’avez pas déjà fait, suivez d’abord l’un des deux tutoriels. Vous pouvez également adapter la procédure à votre propre application .NET avec SQL Database.

Pour déboguer votre application à l’aide de SQL Database en tant que back-end, assurez-vous que vous avez autorisé la connexion cliente à partir de votre machine. Si ce n’est pas le cas, ajoutez l’adresse IP cliente en suivant les étapes décrites dans Gérer les règles de pare-feu IP au niveau du serveur avec le portail Azure.

Préparez votre environnement pour l’interface Azure CLI.

1. Accorder l’accès à la base de données à l’utilisateur Microsoft Entra

Tout d’abord, activez l’authentification Microsoft Entra pour SQL Database en attribuant un utilisateur Microsoft Entra comme administrateur du serveur. Cet utilisateur est différent du compte Microsoft que vous avez utilisé pour vous inscrire à votre abonnement Azure. Il doit s’agir d’un utilisateur créé, importé, synchronisé ou invité dans Microsoft Entra ID. Pour plus d’informations sur les utilisateurs Microsoft Entra autorisés, consultez Fonctionnalités et limitations de Microsoft Entra dans SQL Database.

  1. Si votre locataire Microsoft Entra n’a pas encore d’utilisateur, créez-en un en suivant les étapes de la section Ajouter ou supprimer des utilisateurs à l’aide de Microsoft Entra ID.

  2. Recherchez l’ID d’objet de l’utilisateur Microsoft Entra en utilisant az ad user list et remplacez <user-principal-name> par votre propre valeur. Le résultat est enregistré dans une variable.

    $azureaduser=(az ad user list --filter "userPrincipalName eq '<user-principal-name>'" --query '[].id' --output tsv)
    

    Conseil

    Pour afficher la liste de tous les noms d’utilisateurs principaux dans Microsoft Entra ID, exécutez az ad user list --query '[].userPrincipalName'.

  3. Ajoutez cet utilisateur Microsoft Entra en tant qu’administrateur Active Directory à l’aide de la commande az sql server ad-admin create dans Cloud Shell. Dans la commande suivante, remplacez <server-name> par le nom du serveur (sans le suffixe .database.windows.net).

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

Pour plus d’informations sur l’ajout d’un administrateur Active Directory, consultez Provisionner un administrateur Microsoft Entra pour votre serveur

2. Configurer votre environnement de développement

  1. Visual Studio pour Windows est intégré avec l’authentification Microsoft Entra. Pour activer le développement et le débogage dans Visual Studio, ajoutez votre utilisateur Microsoft Entra dans Visual Studio en sélectionnant Fichier>Paramètres du compte à partir du menu, puis sélectionnez Se connecter ou Ajouter.

  2. Pour définir l’utilisateur Microsoft Entra pour l’authentification de service Azure, sélectionnez Outils>Options dans le menu, puis sélectionnez Authentification du service Azure>Sélection du compte. Sélectionnez l’utilisateur Microsoft Entra que vous avez ajouté, puis sélectionnez OK.

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.

Vous êtes maintenant prêt à développer et déboguer votre application avec SQL Database en tant que back-end, à l’aide de l’authentification Microsoft Entra.

3. Modifier votre projet

Notes

L’utilisation de Microsoft.Azure.Services.AppAuthentication n’est plus recommandée avec le nouveau SDK Azure. Elle est remplacée par une nouvelle bibliothèque de client d’identité Azure disponible pour .NET, Java, TypeScript et Python, qui doit être utilisée pour tout nouveau développement. Vous trouverez des informations sur la migration Azure Identityici : Azure Identity.

Les étapes à suivre pour votre projet varient selon que vous utilisez Entity Framework Core (par défaut pour ASP.NET Core) ou Entity Framework (par défaut pour ASP.NET).

  1. Dans Visual Studio, ouvrez la console du gestionnaire de package et ajoutez le package NuGet Microsoft.Data.SqlClient :

    Install-Package Microsoft.Data.SqlClient -Version 5.1.0
    
  2. Dans le tutoriel ASP.NET Core et SQL Database, la chaîne de connexion MyDbConnection dans appsettings.json n’est pas encore utilisée. L’environnement local et l’environnement Azure obtiennent tous deux des chaînes de connexion à partir de leurs variables d’environnement respectives afin de conserver les secrets de connexion hors du fichier source. Mais maintenant, grâce à l’authentification Active Directory, il n’y a plus de secrets. Dans le fichier appsettings. json, remplacez la valeur de la chaîne de connexion MyDbConnection par :

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

    Remarque

    Le type d’authentification Active Directory Default peut être utilisé à la fois sur votre ordinateur local et dans Azure App Service. Le pilote tente d’acquérir un jeton à partir de Microsoft Entra ID par différents moyens. Si l’application est déployée, elle obtient un jeton à partir de l’identité managée affectée par le système de l’application. Il 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. Si l’application s’exécute localement, elle tente d’obtenir un jeton à partir de Visual Studio, Visual Studio Code et Azure CLI.

    C’est tout ce dont vous avez besoin pour vous connecter à SQL Database. Quand vous déboguez dans Visual Studio, votre code utilise l’utilisateur Microsoft Entra que vous avez configuré à l’étape 2. Configurez votre environnement de développement. Vous configurerez SQL Database ultérieurement pour autoriser la connexion à partir de l’identité managée de votre application App Service. La classe DefaultAzureCredential met en cache le jeton en mémoire et le récupère à partir de Microsoft Entra ID, juste avant l’expiration. Vous n’avez pas besoin de code personnalisé pour actualiser le jeton.

  3. Entrez Ctrl+F5 pour réexécuter l’application. La même application CRUD dans votre navigateur se connecte maintenant à Azure SQL Database directement, à 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. Utiliser la connectivité de l’identité managée

Ensuite, configurez votre application App Service pour qu’elle se connecte à SQL Database avec une identité managée attribuée par le système.

Notes

Même si les instructions de cette section concernent une identité affectée par le système, vous pouvez tout à fait utiliser une identité affectée par l’utilisateur. Pour cela, vous devez changer la az webapp identity assign command pour affecter l’identité affectée à l’utilisateur souhaité. Ensuite, lorsque vous créez l’utilisateur SQL, veillez à utiliser le nom de la ressource d’identité affectée par l’utilisateur plutôt que le nom du site.

Activer une identité managée sur l’application

Pour activer une identité managée pour votre application Azure, utilisez la commande az webapp identity assign dans Cloud Shell. Dans la commande ci-après, remplacez <app-name> par votre propre valeur.

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

Remarque

Pour activer l’identité managée pour un emplacement de déploiement, ajoutez --slot <slot-name> et utilisez le nom de l’emplacement dans <slot-name>.

Voici un exemple de sortie :

{
  "additionalProperties": {},
  "principalId": "21dfa71c-9e6f-4d17-9e90-1d28801c9735",
  "tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47",
  "type": "SystemAssigned"
}

Accorder des autorisations à une identité managée

Remarque

Si vous le souhaitez, vous pouvez ajouter l’identité à un groupe Microsoft Entra, puis accorder l’accès à SQL Database au groupe Microsoft Entra et non à l’identité. Par exemple, les commandes suivantes ajoutent l’identité managée de l’étape précédente à 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
  1. Dans le Cloud Shell, connectez-vous à SQL Database en utilisant la commande SQLCMD. Remplacez <server-name> par le nom de votre serveur, puis <dbname> par le nom de base de données utilisé par votre application, puis <aad-user-name> et <aad-password> par les informations d’identification de votre utilisateur Microsoft Entra.

    sqlcmd -S <server-name>.database.windows.net -d <db-name> -U <aad-user-name> -P "<aad-password>" -G -l 30
    
  2. À l’invite SQL de la base de données souhaitée, exécutez les commandes suivantes pour accorder les autorisations minimales dont votre application a besoin. Par exemple,

    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
    

    <identity-name>> est le nom de l’identité managée dans Microsoft Entra ID. Si l’identité est attribuée par le système, le nom sera toujours identique à celui de votre application App Service. Pour un emplacement de déploiement, le nom de son identité attribuée par le système est <app-name>/slots/<slot-name>. Pour accorder des autorisations pour un groupe Microsoft Entra, utilisez à la place le nom d’affichage du groupe (par exemple, myAzureSQLDBAccessGroup).

  3. Tapez EXIT pour revenir à l’invite Cloud Shell.

    Notes

    Les services back-end des identités managées gèrent également un cache de jetons qui met à jour le jeton d’une ressource cible uniquement lorsque celle-ci expire. Si vous faites une erreur lors de la configuration de vos autorisations SQL Database puis essayez de modifier les autorisations après avoir essayé d’obtenir un jeton avec votre application, vous n’obtiendrez pas un nouveau jeton avec les autorisations mises à jour tant que le jeton mis en cache n’a pas expiré.

    Remarque

    Les identités Microsoft Entra ID et managées ne sont pas prises en charge pour les serveurs SQL locaux.

Modifier la chaîne de connexion

Rappelez-vous que les modifications apportées dans Web.config ou appsettings.json fonctionnent avec l’identité managée. Par conséquent, la seule chose à faire consiste à supprimer la chaîne de connexion existante d’App Service, que Visual Studio a créée lors du premier déploiement de votre application. Utilisez la commande suivante en remplaçant <app-name> par le nom de votre application.

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

5. Publier vos modifications

Il ne vous reste plus qu’à publier vos modifications sur Azure.

  1. Si vous êtes parti du Tutoriel : Créer une application ASP.NET dans Azure avec SQL Database , publiez vos modifications dans Visual Studio. Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le projet DotNetAppSqlDb, puis sélectionnez Publier.

    Publier à partir de l’Explorateur de solutions

  2. Dans la page de publication, sélectionnez Publier.

    Important

    Vérifiez que le nom de votre service d’application ne correspond à aucune inscription d’application existante. Vous éviterez ainsi d’éventuels conflits d’ID de principal.

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.

Application Azure après l’activation des Migrations Code First

Vous devriez désormais être en mesure de modifier la liste des tâches comme auparavant.

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.

Étapes suivantes

Vous avez appris à effectuer les opérations suivantes :

  • Activer les identités managées
  • Accorder à l’identité managée un accès à SQL Database
  • Configurer Entity Framework pour utiliser l’authentification Microsoft Entra avec SQL Database
  • Se connecter à SQL Database à partir de Visual Studio à l’aide de l’authentification Microsoft Entra