Tutoriel : Connexion à des bases de données Azure à partir d’App Service 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. Il s’agit d’une solution clé en main permettant de sécuriser l’accès à des bases de données Azure :

Remarque

Ce tutoriel ne contient pas de conseils sur Azure Cosmos DB, qui prend en charge l’authentification Microsoft Entra différemment. Pour plus d’informations, consultez la documentation Azure Cosmos DB, par exemple, la rubrique Utiliser des identités managées affectées par le système pour accéder aux données Azure Cosmos DB.

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. Ce tutoriel vous montre comment vous connecter aux bases de données mentionnées ci-dessus à partir d’App Service à l’aide d’identités managées.

Contenu :

  • Configurer un utilisateur Microsoft Entra en tant qu’administrateur pour votre base de données Azure.
  • Vous connecter à votre base de données en tant qu’utilisateur Microsoft Entra.
  • Configuration d’une identité managée affectée par le système ou par l’utilisateur pour une application App Service
  • Octroi à l’identité managée de l’accès à la base de données
  • Connexion à la base de données Azure à partir de votre code (.NET Framework 4.8, .NET 6, Node.js, Python ou Java) à l’aide d’une identité managée
  • Vous connecter à la base de données Azure à partir de votre environnement de développement en vous servant de l’utilisateur Microsoft Entra.

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

Prérequis

  • Créez une application basée sur .NET, Node.js, Python ou Java dans App Service.
  • Créez un serveur de base de données avec Azure SQL Database, Azure Database pour MySQL ou Azure Database pour PostgreSQL.
  • Vous devez connaître le modèle de connectivité standard (avec nom d’utilisateur et mot de passe) et savoir vous connecter à la base de données de votre choix à partir de votre application App Service.

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

1. Installer l’extension sans mot de passe du Connecteur de services

Installez l’extension sans mot de passe Service Connector pour Azure CLI :

az extension add --name serviceconnector-passwordless --upgrade

2. Créer une connexion sans mot de passe

Créez ensuite une connexion sans mot de passe avec le Connecteur de services.

Conseil

Le Portail Azure peut vous aider à composer les commandes ci-dessous. Dans le Portail Azure, accédez à votre ressource Azure App Service, sélectionnez Connecteur de service dans le menu de gauche, puis Créer. Renseignez le formulaire avec tous les paramètres nécessaires. Azure génère automatiquement la commande de création de la connexion. Vous pouvez la copier pour l’utiliser dans l’interface CLI ou l’exécuter dans Azure Cloud Shell.

La commande Azure CLI suivante utilise un paramètre --client-type.

  1. Exécutez éventuellement le az webapp connection create sql -h pour obtenir les types de clients pris en charge.

  2. Choisissez un type de client et exécutez la commande correspondante. Remplacez les espaces réservés suivants par vos propres informations.

    az webapp connection create sql \
        --resource-group <group-name> \
        --name <server-name> \
        --target-resource-group <sql-group-name> \
        --server <sql-name> \
        --database <database-name> \
        --user-identity client-id=<client-id> subs-id=<subscription-id> \
        --client-type <client-type>
    

Cette commande Service Connector effectue les tâches suivantes en arrière-plan :

  • Activez l’identité managée affectée par le système ou attribuez une identité d’utilisateur pour l’application <server-name> hébergée par Azure App Service.
  • Définissez l’utilisateur actuellement connecté comme administrateur Microsoft Entra.
  • Ajoutez un utilisateur de la base de données pour l’identité managée affectée par le système ou l’identité managée affectée par l’utilisateur. Accordez tous les privilèges de la base de données <database-name> à cet utilisateur. Le nom d’utilisateur se trouve dans la chaîne de connexion dans la sortie de commande précédente.
  • Définissez les configurations nommées AZURE_MYSQL_CONNECTIONSTRING, AZURE_POSTGRESQL_CONNECTIONSTRING ou AZURE_SQL_CONNECTIONSTRING sur la ressource Azure en fonction du type de base de données.
  • Pour App Service, les configurations sont définies dans le panneau Paramètres de l’application.

Si vous rencontrez un problème lors de la création d’une connexion, reportez-vous à Résolution des problèmes pour obtenir de l’aide.

3. Modification du code

  1. Installez des dépendances.

    dotnet add package Microsoft.Data.SqlClient
    
  2. Obtenez la chaîne de connexion Azure SQL Database à partir de la variable d’environnement ajoutée par le connecteur de services.

    using Microsoft.Data.SqlClient;
    
    // AZURE_SQL_CONNECTIONSTRING should be one of the following:
    // For system-assigned managed identity:"Server=tcp:<server-name>.database.windows.net;Database=<database-name>;Authentication=Active Directory Default;TrustServerCertificate=True"
    // For user-assigned managed identity: "Server=tcp:<server-name>.database.windows.net;Database=<database-name>;Authentication=Active Directory Default;User Id=<client-id-of-user-assigned-identity>;TrustServerCertificate=True"
    
    string connectionString = 
        Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING")!;
    
    using var connection = new SqlConnection(connectionString);
    connection.Open();
    

    Pour plus d’informations, consultez Utilisation de l’authentification d’identité managée Active Directory.

Pour plus d’informations, consultez Page d’accueil pour la programmation client sur Microsoft SQL Server. Pour obtenir davantage d’exemples de code, consultez Créer une connexion sans mot de passe à un service de base de données au travers de Service Connector.

4. Configuration de l’environnement de développement

Cet exemple de code utilise DefaultAzureCredential afin de récupérer un jeton utilisable pour votre base de données Azure auprès de Microsoft Entra ID, puis l’ajoute à la connexion de base de données. Bien que DefaultAzureCredential soit personnalisable, il est déjà polyvalent par défaut. Il récupère un jeton auprès de l’utilisateur Microsoft Entra connecté ou d’une identité managée, selon que vous l’exécutez localement dans votre environnement de développement ou dans App Service.

Votre code est prêt à être exécuté dans Azure sans aucune autre modification. Pour que vous puissiez le déboguer localement, votre environnement de développement a toutefois besoin d’un utilisateur Microsoft Entra connecté. Au cours de cette étape, vous allez configurer l’environnement de votre choix en vous connectant avec votre utilisateur Microsoft Entra.

  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.

5. Test et publication

  1. Exécutez votre code dans votre environnement de développement. Votre code se sert de l’utilisateur Microsoft Entra connecté à votre environnement pour se connecter à la base de données back-end. Cet utilisateur peut accéder à la base de données parce qu’il est configuré en tant qu’administrateur Microsoft Entra de la base de données.

  2. Publiez votre code sur Azure à l’aide de la méthode de votre choix. Dans App Service, votre code utilise l’identité managée de l’application pour se connecter à la base de données principale.

Forum aux questions

L’identité managée prend-elle en charge SQL Server ?

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

J’obtiens l’erreur Login failed for user '<token-identified principal>'.

L’identité managée pour laquelle vous tentez de demander un jeton n’est pas autorisée à accéder à la base de données Azure.

J’ai apporté des modifications à l’authentification App Service ou à l’inscription d’application associée. J’obtiens toujours l’ancien jeton. Pourquoi ?

Les services backend des identités managées gèrent également un cache de jetons qui ne met à jour le jeton d’une ressource cible qu’à l’expiration. Si vous modifiez la configuration après avoir essayé de récupérer un jeton avec votre application, vous n’obtenez pas de nouveau jeton doté des autorisations mises à jour tant que le jeton mis en cache n’a pas expiré. La meilleure façon de contourner ce problème consiste à tester les modifications avec une nouvelle fenêtre InPrivate (Edge), Navigation privée (Safari) ou en mode privé (Chrome). Vous avez ainsi l’assurance de commencer d’une nouvelle session authentifiée.

Comment ajouter l’identité managée à un groupe Microsoft Entra ?

Si vous le souhaitez, vous pouvez ajouter l’identité à un groupe Microsoft Entra, puis accorder l’accès 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 <group-name> --name <app-name> --query principalId --output tsv)
az ad group member add --group $groupid --member-id $msiobjectid
az ad group member list -g $groupid

Pour accorder des autorisations de base de données à un groupe Microsoft Entra, consultez la documentation relative au type de base de données en question.

J’obtiens l’erreur SSL connection is required. Please specify SSL options and retry

La connexion à la base de données Azure exige des paramètres supplémentaires qui ne sont pas abordés dans ce tutoriel. Pour plus d’informations, cliquez sur l’un des liens suivants :

Configuration de la connectivité TLS dans Azure Database pour PostgreSQL – Serveur uniqueConfiguration de la connectivité SSL dans une application pour sécuriser la connexion à Azure Database pour MySQL

Étapes suivantes

Vous avez appris à effectuer les opérations suivantes :

  • Configurer un utilisateur Microsoft Entra en tant qu’administrateur pour votre base de données Azure.
  • Vous connecter à votre base de données en tant qu’utilisateur Microsoft Entra.
  • Configuration d’une identité managée affectée par le système ou par l’utilisateur pour une application App Service
  • Octroi à l’identité managée de l’accès à la base de données
  • Connexion à la base de données Azure à partir de votre code (.NET Framework 4.8, .NET 6, Node.js, Python ou Java) à l’aide d’une identité managée
  • Vous connecter à la base de données Azure à partir de votre environnement de développement en vous servant de l’utilisateur Microsoft Entra.