Comment sécuriser Azure SQL Database avec « Managed Identity » & l’authentification Azure AD ?

Article corédigé par Yacine Smail et Amine Teffahi
Comment se connecter de manière transparente et sécurisée à une base de données SQL à l’aide de l’authentification Azure AD au lieu d’utiliser la méthode classique (utilisateur & mot de passe) ? C’est ce que nous vous proposons de découvrir aujourd’hui étape par étape. Dans le cadre de cet article, nous utiliserons une App service pour illustrer cette méthode.
Prérequis
Avant de commencer, il est nécessaire de procéder au déploiement des ressources suivantes :
- SQL Server
- SQL Database
- App Service
Activer le Managed Service Identity (MSI)
L’activation d’une identité managée pour un App service peut se faire de différentes façons (PowerShell, Azure CLI, Portail Azure…). Pour des raisons de simplicité, nous allons l’activer via le portail Azure.
Il existe deux types d’identité managée :
- System assigned : Cette identité étant liée à l’App Service, la suppression de l’App Service supprimera également l’identité. Une application ne peut avoir qu’une seule identité managée par le système.
- User assigned : User Assigned Identity est une ressource séparée qui peut être assignée à plusieurs applications. Une application peut également avoir plusieurs identités attribuées par l’utilisateur.
Pour l’activer depuis le portail, il suffit de suivre les étapes ci-dessous :
Cela va créer une Entreprise Application que nous pouvons trouver dans l’Azure Active Directory (AAD) :
La web app Managed Identity sera utilisée pour se connecter à la base de données SQL comme le montre la figure ci-dessous :
Accorder les accès à la base de données
Accorder les accès à la base de données est très simple. Il vous suffit de :
- Accéder au portail Azure
- Sélectionner votre serveur SQL
- Sélectionner le menu Directory Active Admin
- Cliquer sur le bouton “Set admin” et choisir une identité Azure AD
- Cliquer sur le bouton « Save »
A noter : il est préférable de fournir un groupe d’admins.
Maintenant que le groupe AAD est configuré comme Admin du serveur SQL, il est visible au niveau du serveur SQL. Il suffit de se connecter via SSMS depuis une machine qui a accès au réseau du serveur SQL. Notons qu’un serveur SQL contient généralement des données sensibles : il ne doit donc en aucun cas être exposé en public. II faut privilégier l’utilisation des Private Endpoint ou des Service Endpoint.
Si l’on ajoute la web app Managed Identity dans le groupe « admin », ce dernier va être utilisé dans notre App Service pour lire et/ou écrire en base.
Ajouter le MSI directement dans le groupe « admin » n’est pas une bonne pratique : c’est pourquoi on préférera ajouter l’utilisateur en base de données avec des droits plus restreints.
Il faut se connecter à la base de données avec un compte admin SSMS (SQL Server Management Studio) et exécuter ce code afin de donner les droits en lecture à notre App Service.
Une fois que l’utilisateur a été ajouté et que le bon rôle lui a été affecté, on peut appeler notre API, qui à son tour récupéra les informations depuis la base de données.
Accéder à la base de données
Pour accéder à la base de données depuis un App Service, il suffit de mettre à jour la configuration et le code de connexion au serveur SQL :
1. Configuration de la connection string :
Pour que l’App Service utilise l’Identity System pour accéder à SQL, il faut modifier le fichier de config comme le montre la capture ci-dessous :
2. Accès à la base de données :
Une fois la configuration faite, il suffit de modifier le code de connexion à la base de données :
Voici notre résultat de test :
Limites de SQL Server
Le compte admin de SQL server ne peut être ni désactivé ni supprimé. Ainsi, toute personne connaissant les credentials de l’admin peut se connecter à la base de données SQL avec les droits d’administrateur.
Recommandations de Microsoft :
- Activer SQL audit logs (export vers un compte de stockage (Storage Account), Log Analytics ou Event Hub)
- Activer Advanced Threat Detection avec des alertes de sécurité via le Security Center
- Utiliser Azure Policy built-in definitions for SQL Database
Pour plus d’informations sur les alertes SQL, nous vous invitons à consulter la documentation officielle Microsoft.
Vous souhaitez en savoir plus ? Vous voulez partager votre retour d’expérience ? N’hésitez pas à nous laisser un message en commentaire !