Utiliser Microsoft Entra ID pour l’authentification avec PostgreSQL

S’APPLIQUE À : Azure Database pour PostgreSQL – Serveur unique

Important

Azure Database pour PostgreSQL - Serveur unique est en voie de mise hors service. Nous vous recommandons vivement de procéder à une mise à niveau vers un serveur flexible Azure Database pour PostgreSQL. Pour plus d’informations sur la migration vers le Serveur flexible Azure Database pour PostgreSQL, consultez l’article Qu’arrive-t-il au Serveur unique Azure Database pour PostgreSQL ?.

Cet article détaille les étapes à suivre pour configurer l’accès à Microsoft Entra ID avec Azure Database pour PostgreSQL et la connexion à l’aide d’un jeton Microsoft Entra.

Configuration de l’utilisateur administrateur Microsoft Entra

Seuls les utilisateurs administrateurs Microsoft Entra peuvent créer ou activer des utilisateurs pour l’authentification basée sur Microsoft Entra ID. Nous vous déconseillons d’utiliser l’administrateur Microsoft Entra pour les opérations de bases de données courantes, car il dispose d’autorisations utilisateur élevées (par exemple, CREATEDB).

Pour définir l’administrateur Microsoft Entra (vous pouvez utiliser un utilisateur ou un groupe), suivez les étapes ci-dessous

  1. Dans le Portail Azure, sélectionnez l’instance Azure Database pour PostgreSQL que vous souhaitez activer pour Microsoft Entra ID.
  2. Sous Paramètres, sélectionnez Administrateur Active Directory :

Définir un administrateur Microsoft Entra

  1. Sélectionnez un utilisateur Microsoft Entra valide dans le locataire client pour être administrateur Microsoft Entra.

Important

Lorsque vous définissez l’administrateur, un nouvel utilisateur est ajouté au serveur Azure Database pour PostgreSQL avec les autorisations d’administrateur complètes. L’utilisateur administrateur Microsoft Entra dans Azure Database pour PostgreSQL a le rôle azure_ad_admin. Un seul administrateur Microsoft Entra peut être créé par serveur PostgreSQL, et la sélection d’un autre administrateur remplace l’administrateur Microsoft Entra existant configuré pour le serveur. Vous pouvez spécifier un groupe Microsoft Entra plutôt qu’un utilisateur individuel pour avoir plusieurs administrateurs.

Un seul administrateur Microsoft Entra peut être créé par serveur PostgreSQL, et la sélection d’un autre administrateur remplace l’administrateur Microsoft Entra existant configuré pour le serveur. Vous pouvez spécifier un groupe Microsoft Entra plutôt qu’un utilisateur individuel pour avoir plusieurs administrateurs. Notez que vous vous connecterez alors avec le nom du groupe à des fins d’administration.

Connexion à Azure Database pour PostgreSQL à l’aide de Microsoft Entra ID

Le diagramme de niveau élevé suivant résume le workflow de l’utilisation de l’authentification Microsoft Entra avec Azure Database pour PostgreSQL :

flux d’authentification

Nous avons conçu l’intégration Microsoft Entra pour qu’elle fonctionne avec des outils PostgreSQL courants, tels que psql, qui sont indépendants de Microsoft Entra et ne prennent en charge que la spécification du nom d’utilisateur et du mot de passe lors de la connexion à PostgreSQL. Nous transmettons le jeton Microsoft Entra comme mot de passe, comme illustré ci-dessus.

Pour le moment, nous avons testé les clients suivants :

  • psql CommandLine (utiliser la variable PGPASSWORD pour passer le jeton, voir l’étape 3 pour plus d’informations)
  • Azure Data Studio (utilisant l’extension PostgreSQL)
  • Autres clients basés sur libpq (par exemple, frameworks d’application courants et ORM)
  • PgAdmin (décochez se connecter maintenant lors de la création du serveur. Pour plus d’informations, consultez l’étape 4.

Voici les étapes nécessaires à l’authentification d’un utilisateur ou d’une application avec Microsoft Entra :

Prérequis

Vous pouvez poursuivre dans Azure Cloud Shell, une machine virtuelle Azure ou sur votre ordinateur local. Assurez-vous que l’interface Azure CLI est installée.

S’authentifier avec Microsoft Entra ID en tant qu’utilisateur unique

Étape 1 : Se connecter à l’abonnement Azure de l’utilisateur

Commencez par vous authentifier auprès de Microsoft Entra ID à l’aide de l’outil Azure CLI. Cette étape n’est pas obligatoire dans Azure Cloud Shell.

az login

La commande lance une fenêtre de navigateur sur la page d’authentification Microsoft Entra. Vous devez fournir votre ID utilisateur Microsoft Entra et le mot de passe.

Étape 2 : Récupérer le jeton d’accès Microsoft Entra

Appelez l’outil Azure CLI pour obtenir un jeton d’accès pour l’utilisateur authentifié auprès de Microsoft Entra à l’étape 1 afin d’accéder à Azure Database pour PostgreSQL.

Exemple (pour le cloud public) :

az account get-access-token --resource https://ossrdbms-aad.database.windows.net

La valeur de la ressource ci-dessus doit être spécifiée exactement comme indiqué. Pour les autres clouds, la valeur de la ressource peut être recherchée à l’aide de ce qui suit :

az cloud show

Pour Azure CLI version 2.0.71 et les versions ultérieures, la commande peut être spécifiée dans la version plus pratique suivante pour tous les clouds :

az account get-access-token --resource-type oss-rdbms

Une fois l’authentification réussie, Microsoft Entra ID renvoie un jeton d’accès :

{
  "accessToken": "TOKEN",
  "expiresOn": "...",
  "subscription": "...",
  "tenant": "...",
  "tokenType": "Bearer"
}

Le jeton est une chaîne de base 64 qui code toutes les informations relatives à l’utilisateur authentifié et qui est ciblée vers le service Azure Database pour PostgreSQL.

Étape 3 : Utiliser un jeton comme mot de passe pour la connexion avec psql client

Lors de la connexion, vous devez utiliser le jeton d’accès comme mot de passe utilisateur PostgreSQL.

Lorsque vous utilisez le client de ligne de commande psql, le jeton d’accès doit être transmis via la variable d’environnement PGPASSWORD, car le jeton d’accès dépasse la longueur du mot de passe que psql peut accepter directement :

Exemple Windows :

set PGPASSWORD=<copy/pasted TOKEN value from step 2>
$env:PGPASSWORD='<copy/pasted TOKEN value from step 2>'

Exemple Linux/macOS :

export PGPASSWORD=<copy/pasted TOKEN value from step 2>

Vous pouvez désormais établir une connexion avec Azure Database pour PostgreSQL comme vous le feriez normalement :

psql "host=mydb.postgres... user=user@tenant.onmicrosoft.com@mydb dbname=postgres sslmode=require"

Étape 4 : Utiliser un jeton en tant que mot de passe pour la connexion avec PgAdmin

Pour vous connecter en utilisant un jeton Microsoft Entra avec pgAdmin, procédez comme suit :

  1. Désactivez l’option Se connecter maintenant lors de la création du serveur.
  2. Entrez les détails du serveur sous l’onglet Connexion, puis enregistrez.
  3. Dans le menu du navigateur, sélectionnez Se connecter au serveur Azure Database pour PostgreSQL.
  4. Entrez le jeton mot de passe AD quand vous y êtes invité.

Considérations importantes à prendre en compte lors de la connexion :

  • user@tenant.onmicrosoft.com est le nom de l’utilisateur Microsoft Entra
  • Veillez à l’orthographier exactement de la même façon que l’utilisateur Azure, car les noms d’utilisateurs et de groupes Microsoft Entra sont sensibles à la casse.
  • Si le nom contient des espaces, insérez \ devant chaque espace pour l’échapper.
  • La validité du jeton d’accès est comprise entre 5 minutes et 60 minutes. Nous vous recommandons d’obtenir le jeton d’accès juste avant de lancer la connexion à Azure Database pour PostgreSQL.

Vous vous êtes à présent authentifié auprès de votre serveur Azure Database pour PostgreSQL via l’authentification Microsoft Entra.

S’authentifier auprès de Microsoft Entra ID en tant que membre d’un groupe

Étape 1 : Créer des groupes Microsoft Entra dans Azure Database pour PostgreSQL

Pour permettre à un groupe Microsoft Entra d’accéder à votre base de données, utilisez le même mécanisme que pour les utilisateurs, mais spécifiez plutôt le nom du groupe :

Exemple :

CREATE USER <new_user> IN ROLE azure_ad_user;

Lors de la connexion, les membres du groupe utilisent leurs jetons d’accès personnels, mais se connectent avec le nom du groupe spécifié comme nom d’utilisateur.

Étape 2 : Se connecter à l’abonnement Azure de l’utilisateur

Authentifiez-vous auprès de Microsoft Entra ID à l’aide de l’outil Azure CLI. Cette étape n’est pas obligatoire dans Azure Cloud Shell. L’utilisateur doit être membre du groupe Microsoft Entra.

az login

Étape 3 : Récupérer le jeton d’accès Microsoft Entra

Appelez l’outil Azure CLI pour obtenir un jeton d’accès pour l’utilisateur authentifié auprès de Microsoft Entra à l’étape 2 afin d’accéder à Azure Database pour PostgreSQL.

Exemple (pour le cloud public) :

az account get-access-token --resource https://ossrdbms-aad.database.windows.net

La valeur de la ressource ci-dessus doit être spécifiée exactement comme indiqué. Pour les autres clouds, la valeur de la ressource peut être recherchée à l’aide de ce qui suit :

az cloud show

Pour Azure CLI version 2.0.71 et les versions ultérieures, la commande peut être spécifiée dans la version plus pratique suivante pour tous les clouds :

az account get-access-token --resource-type oss-rdbms

Une fois l’authentification réussie, Microsoft Entra ID renvoie un jeton d’accès :

{
  "accessToken": "TOKEN",
  "expiresOn": "...",
  "subscription": "...",
  "tenant": "...",
  "tokenType": "Bearer"
}

Étape 4 : Utiliser un jeton en tant que mot de passe pour la connexion avec psql ou PgAdmijetonn (voir les étapes ci-dessus pour la connexion utilisateur)

Considérations importantes concernant la connexion en tant que membre d’un groupe :

  • groupname@mydb est le nom du groupe Microsoft Entra sous lequel vous essayez de vous connecter
  • Ajoutez toujours le nom du serveur après le nom d’utilisateur/de groupe Microsoft Entra (par exemple, @mydb))
  • Veillez à orthographier correctement le nom de groupe Microsoft Entra.
  • Les noms d’utilisateurs et de groupes Microsoft Entra respectent la casse
  • Quand vous vous connectez en tant que groupe, utilisez uniquement le nom du groupe (par exemple, GroupName@mydb), non l’alias d’un membre de celui-ci.
  • Si le nom contient des espaces, insérez une barre oblique inverse (\) devant chaque espace pour l’échapper.
  • La validité du jeton d’accès est comprise entre 5 minutes et 60 minutes. Nous vous recommandons d’obtenir le jeton d’accès juste avant de lancer la connexion à Azure Database pour PostgreSQL.

Vous vous êtes à présent authentifié auprès de votre serveur PostgreSQL à l’aide de l’authentification Microsoft Entra.

Création d’utilisateurs Microsoft Entra dans Azure Database pour PostgreSQL

Pour ajouter un utilisateur Microsoft Entra à votre base de données Azure Database pour PostgreSQL, procédez comme suit après la connexion (voir la section suivante sur la connexion) :

  1. Tout d’abord, assurez-vous que l’utilisateur <user>@yourtenant.onmicrosoft.com Microsoft Entra est un utilisateur valide dans le locataire Microsoft Entra.
  2. Connectez-vous à votre instance Azure Database pour PostgreSQL en tant qu’utilisateur administrateur Microsoft Entra.
  3. Créez le rôle <user>@yourtenant.onmicrosoft.com dans Azure Database pour PostgreSQL.
  4. Faites de <user>@yourtenant.onmicrosoft.com un membre du rôle azure_ad_user. Cela n’est possible que pour les utilisateurs Microsoft Entra.

Exemple :

CREATE USER "user1@yourtenant.onmicrosoft.com" IN ROLE azure_ad_user;

Remarque

L’authentification d’un utilisateur par le biais de Microsoft Entra ne lui donne pas d’autorisation d’accès aux objets dans la base de données Azure Database pour PostgreSQL. Vous devez accorder manuellement les autorisations requises à l’utilisateur.

Validation du jeton

L’authentification Microsoft Entra dans Azure Database pour PostgreSQL garantit que l’utilisateur existe dans le serveur PostgreSQL et vérifie la validité du jeton en validant son contenu. Les étapes de validation de jeton suivantes sont exécutées :

  • Le jeton est signé par Microsoft Entra ID et n’a pas été falsifié
  • Le jeton a été émis par Microsoft Entra ID pour le locataire associé au serveur
  • Le jeton n’a pas expiré
  • Le jeton est destiné à la ressource Azure Database pour PostgreSQL (et non pour une autre ressource Azure)

Migration d’utilisateurs PostgreSQL existants vers l’authentification basée sur Microsoft Entra ID

Vous pouvez activer l’authentification Microsoft Entra pour les utilisateurs existants. Il existe deux cas à prendre en compte :

Cas 1 : Le nom d’utilisateur PostgreSQL correspond au nom d’utilisateur principal Microsoft Entra

Dans le cas improbable où vos utilisateurs existants correspondent déjà aux noms d’utilisateur Microsoft Entra, vous pouvez leur accorder le rôle azure_ad_user afin de les activer pour l’authentification Microsoft Entra :

GRANT azure_ad_user TO "existinguser@yourtenant.onmicrosoft.com";

Ils peuvent désormais se connecter avec les informations d’identification Microsoft Entra au lieu d’utiliser leur mot de passe utilisateur PostgreSQL précédemment configuré.

Cas 2 : Le nom d’utilisateur PostgreSQL est différent du nom d’utilisateur Microsoft Entra

Si un utilisateur PostgreSQL n’existe pas dans Microsoft Entra ID ou a un nom d’utilisateur différent, vous pouvez utiliser des groupes Microsoft Entra pour vous authentifier en tant qu’utilisateur PostgreSQL. Vous pouvez effectuer la migration des utilisateurs Azure Database pour PostgreSQL existants vers Microsoft Entra ID en créant un groupe Microsoft Entra avec un nom qui correspond à celui de l’utilisateur PostgreSQL, puis en accordant le rôle azure_ad_user à l’utilisateur PostgreSQL existant :

GRANT azure_ad_user TO <new_user>;

Cela suppose que vous avez créé un groupe « DBReadUser » dans votre Microsoft Entra ID. Les utilisateurs appartenant à ce groupe peuvent désormais se connecter à la base de données en tant que cet utilisateur.

Étapes suivantes