Partager via


Utiliser Microsoft Entra ID et des rôles PostgreSQL natifs pour l’authentification avec Azure Cosmos DB for PostgreSQL

S’APPLIQUE À : Azure Cosmos DB for PostgreSQL (avec l’extension de base de données Citus pour PostgreSQL)

Dans cet article, vous allez configurer des méthodes d’authentification pour Azure Cosmos DB for PostgreSQL. Vous allez gérer les utilisateurs administrateurs Microsoft Entra ID et les rôles PostgreSQL natifs pour l’authentification avec Azure Cosmos DB for PostgreSQL. Vous allez également apprendre à utiliser un jeton Microsoft Entra ID avec Azure Cosmos DB for PostgreSQL.

Un cluster Azure Cosmos DB for PostgreSQL est créé avec un rôle PostgreSQL natif intégré nommé « citus ». Vous pouvez ajouter d’autres rôles PostgreSQL natifs une fois l’approvisionnement de cluster terminé.

Vous pouvez également configurer l’authentification Microsoft Entra ID (anciennement Azure Active Directory) pour Azure Cosmos DB for PostgreSQL. Vous pouvez activer l’authentification Microsoft Entra ID en plus ou à la place de l’authentification PostgreSQL native sur votre cluster. Vous pouvez modifier les méthodes d’authentification activées sur le cluster à tout moment après l’approvisionnement du cluster. Lorsque l’authentification Microsoft Entra ID est activée, vous pouvez ajouter plusieurs utilisateurs Microsoft Entra ID à un cluster Azure Cosmos DB for PostgreSQL et les affecter comme administrateurs. Un utilisateur Microsoft Entra ID peut être un utilisateur ou un principal de service.

Choisir la méthode d’authentification

Vous devez utiliser le portail Azure pour configurer des méthodes d’authentification sur un cluster Azure Cosmos DB for PostgreSQL.

Renseignez les éléments suivants sur votre cluster Azure Cosmos DB for PostgreSQL pour activer ou désactiver l’authentification Microsoft Entra ID et l’authentification PostgreSQL native.

  1. Dans la page du cluster, sous l’en-tête Gestion du cluster, choisissez Authentification pour ouvrir les options de gestion de l’authentification.
  2. Dans la section Méthodes d’authentification, choisissez Authentification PostgreSQL uniquement, Authentification Microsoft Entra ID ou Authentification PostgreSQL et Microsoft Entra ID comme méthode d’authentification en fonction de vos besoins.

Une fois que vous avez terminé, configurez l’authentification Microsoft Entra ID ou ajoutez des rôles PostgreSQL natifs sur la même page Authentification.

Configurez l’authentification Microsoft Entra ID

Prérequis

Les utilisateurs doivent être autorisés à se connecter à Azure Cosmos DB for PostgreSQL dans le locataire Microsoft Entra ID. Ces étapes doivent être effectuées une fois pour le locataire Microsoft Entra ID qui sera utilisé pour l’authentification sur les clusters Azure Cosmos DB for PostgreSQL.

Important

Les autorisations d’administrateur du locataire Microsoft Entra ID sont nécessaires pour apporter la modification. Consultez conseils pour résoudre les problèmes d’autorisations.

  1. Recherchez « Microsoft Entra ID » dans portail Azure.
  2. Ouvrez le service « Microsoft Entra ID ».
  3. Dans la page Vue d’ensemble du service Microsoft Entra ID dans la section Vue d’ensemble, recherchez l’ID d’application « b4fa09d8-5da5-4352-83d9-05c2a44cf431 ».
  4. Choisissez l’application d’entreprise « Azure Cosmos DB for PostgreSQL AAD Authentification » dans les résultats de la recherche.
  5. Dans l’application d’entreprise Azure Cosmos DB for PostgreSQL AAD Authentification, choisissez la page Propriétés.
  6. Définissez Activer pour que les utilisateurs se connectent ? pour Oui et enregistrer la modification.

Remarque

Modifier des propriétés d’application d’entreprise, telles que « Activé pour que les utilisateurs puissent se connecter », nécessite des autorisations accordées à un rôle disposant de privilèges pour mettre à jour les propriétés de l’application d’entreprise. Les rôles, tels que Propriétaire de l’application d’entreprise, doivent disposer de l’autorisation « mettre à jour les propriétés de l’application d’entreprise ». Pour plus d’informations, consultez Rôles Microsoft Entra les moins privilégiés par tâche – Applications d’entreprise.

Ajouter des administrateurs Microsoft Entra ID au cluster Azure Cosmos DB for PostgreSQL

Pour ajouter ou supprimer des rôles Microsoft Entra ID sur un cluster, procédez comme suit dans la page Authentification :

  1. Dans la section Authentification Microsoft Entra ID, sélectionnez Ajouter des administrateurs Microsoft Entra ID.
  2. Dans le panneau Sélectionner des administrateurs Microsoft Entra ID, sélectionnez un ou plusieurs utilisateurs ou applications d’entreprise Microsoft Entra ID valides dans le locataire AD actuel à rendre administrateur(s) Microsoft Entra ID sur votre cluster Azure Cosmos DB for PostgreSQL.
  3. Utilisez Sélectionner pour confirmer votre choix.
  4. Dans la page Authentification, sélectionnez Enregistrer dans la barre d’outils pour enregistrer les modifications ou poursuivre l’ajout de rôles PostgreSQL natifs.

Configurer l’authentification PostgreSQL native

Pour ajouter des rôles Postgres sur un cluster, procédez comme suit dans la page Authentification :

  1. Dans la section Authentification PostgreSQL, sélectionnez Ajouter un rôle PostgreSQL.
  2. Saisissez le nom de rôle et le mot de passe. Cliquez sur Enregistrer.
  3. Dans la page Authentification, sélectionnez Enregistrer dans la barre d’outils pour enregistrer les modifications ou poursuivre l’ajout d’utilisateurs administrateurs Microsoft Entra ID.

L’utilisateur PostgreSQL natif est créé sur le nœud coordinateur du cluster et propagé à tous les nœuds Worker. Les rôles créés via le portail Azure comportent l’attribut LOGIN, ce qui signifie qu’il s’agit d’utilisateurs véritables qui peuvent se connecter à la base de données.

Se connecter à Azure Cosmos for PostgreSQL à l’aide de l’authentification Microsoft Entra ID

L’intégration Microsoft Entra ID fonctionne avec les outils clients PostgreSQL standard comme psql, qui ne reconnaissent pas Microsoft Entra ID et qui prennent uniquement en charge la spécification du nom d’utilisateur et du mot de passe lors de la connexion à PostgreSQL. Dans ce cas, le jeton Microsoft Entra ID est passé en tant que mot de passe.

Nous avons testé les clients suivants :

  • Ligne de commande psql : utilisez la variable PGPASSWORD pour passer le jeton.
  • Autres clients basés sur libpq : par exemple, les frameworks d’application courants et les mappeurs relationnels d’objets (ORM).
  • pgAdmin : désactivez l’option Se connecter maintenant lors de la création du serveur.

Utilisez les procédures suivantes pour vous authentifier auprès de Microsoft Entra ID en tant qu’utilisateur Azure Cosmos DB for PostgreSQL. Vous pouvez poursuivre dans Azure Cloud Shell, sur une machine virtuelle Azure ou sur votre ordinateur local.

Se connecter à l’abonnement Azure de l’utilisateur

Commencez par vous authentifier avec Microsoft Entra ID en utilisant Azure CLI. Cette étape n’est pas obligatoire dans Azure Cloud Shell.

az login

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

Le nom du compte d’utilisateur que vous utilisez pour l’authentification (par exemple, user@tenant.onmicrosoft.com) est celui pour lequel le jeton d’accès sera généré à l’étape suivante.

Récupérer le jeton d’accès Microsoft Entra ID

Utilisez Azure CLI pour obtenir un jeton d’accès pour l’utilisateur authentifié Microsoft Entra ID afin d’accéder à Azure Cosmos for PostgreSQL. Voici un exemple :

az account get-access-token --resource https://token.postgres.cosmos.azure.com

Une fois l’authentification réussie, Microsoft Entra ID retourne un jeton d’accès pour l’abonnement Azure actuel :

{
  "accessToken": "[TOKEN]",
  "expiresOn": "[expiration_date_and_time]",
  "subscription": "[subscription_id]",
  "tenant": "[tenant_id]",
  "tokenType": "Bearer"
}

Le jeton est une chaîne Base64. Il encode toutes les informations sur l’utilisateur authentifié et est associé au service Azure Cosmos DB for PostgreSQL. Le jeton est valide pendant au moins 5 minutes avec un maximum de 90 minutes. L’option expiresOn définit le délai d’expiration réel du jeton.

Utiliser un jeton comme mot de passe pour la connexion avec un client psql

Pendant la connexion, il est préférable d’utiliser le jeton d’accès comme mot de passe utilisateur PostgreSQL.

Lorsque vous utilisez le client en ligne de commande psql, le jeton d’accès a besoin d’être transmis par le biais de la variable d’environnement PGPASSWORD. La raison en est que le jeton d’accès dépasse la longueur du mot de passe que psql peut accepter directement.

Voici un exemple Windows :

set PGPASSWORD=<TOKEN value from the previous step>
$env:PGPASSWORD='<TOKEN value from the previous step>'

Voici un exemple Linux/macOS :

export PGPASSWORD=<TOKEN value from the previous step>

Vous pouvez également combiner les deux étapes précédentes à l’aide de la substitution de commande. La récupération de jeton peut être encapsulée dans une variable et passée directement en tant que valeur pour la variable d’environnement PGPASSWORD :

export PGPASSWORD=$(az account get-access-token --resource https://token.postgres.cosmos.azure.com --query "[accessToken]" -o tsv)

Remarque

Vérifiez que la variable PGPASSWORD est définie sur le jeton d’accès Microsoft Entra ID pour votre abonnement pour l’authentification Microsoft Entra ID. Si vous devez effectuer une authentification de rôle Postgres à partir de la même session, vous pouvez définir PGPASSWORD sur le mot de passe de rôle Postgres ou effacer la valeur de la variable PGPASSWORD pour entrer le mot de passe de manière interactive. L’authentification échoue avec la valeur incorrecte dans PGPASSWORD.

Vous pouvez à présent lancer une connexion avec Azure Cosmos DB for PostgreSQL à l’aide du compte d’utilisateur Microsoft Entra ID pour lequel le jeton d’accès a été généré. Vous pouvez le faire comme d’habitude, en utilisant le compte d’utilisateur en tant qu’utilisateur et sans paramètre « password » dans la ligne de commande :

psql "host=mycluster.[uniqueID].postgres.cosmos.azure.com user=user@tenant.onmicrosoft.com dbname=[db_name] sslmode=require"

Utiliser un jeton comme mot de passe pour la connexion avec PgAdmin

Pour vous connecter à l’aide d’un jeton Microsoft Entra ID avec PgAdmin, suivez ces étapes :

  1. Décochez 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.
    1. Vérifiez qu’un utilisateur Microsoft Entra ID valide est spécifié dans Nom d’utilisateur.
  3. Dans le menu Objet pgAdmin, sélectionnez Connecter le serveur.
  4. Entrez le mot de passe du jeton Microsoft Entra ID lorsque vous y êtes invité.

Voici quelques considérations essentielles lorsque vous vous connectez :

  • user@tenant.onmicrosoft.com est le nom de l’utilisateur Microsoft Entra ID.
  • Veillez à orthographier l’utilisateur Azure avec exactitude. Les noms d’utilisateur et de groupe Microsoft Entra ID respectent la casse.
  • 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 90 minutes. Vous avez tout intérêt à obtenir le jeton d’accès avant d’établir la connexion à Azure Cosmos DB for PostgreSQL.

Vous êtes maintenant authentifié sur votre serveur Azure Cosmos for PostgreSQL avec l’authentification Microsoft Entra ID.

Gérer les rôles PostgreSQL natifs

Lorsque l’authentification PostgreSQL native est activée sur le cluster, vous pouvez ajouter et supprimer des rôles Postgres en plus du rôle « citus » intégré. Vous pouvez également réinitialiser le mot de passe et modifier les privilèges Postgres pour les rôles natifs.

Comment supprimer un rôle utilisateur PostgreSQL natif ou modifier son mot de passe

Pour mettre à jour un utilisateur, accédez à la page Authentification pour votre cluster, puis sélectionnez les points de suspension en regard de l’utilisateur. L’ellipse ouvre un menu permettant de supprimer l’utilisateur ou réinitialiser son mot de passe.

Le rôle citus est privilégié et ne peut pas être supprimé. Toutefois, le rôle citus est désactivé si la méthode d’authentification « Authentification Microsoft Entra ID uniquement » est sélectionnée sur le cluster.

Comment modifier des privilèges pour des rôles utilisateur

De nouveaux rôles d’utilisateur sont couramment utilisés pour fournir un accès à la base de données avec des privilèges restreints. Pour modifier des privilèges d’utilisateur, utilisez des commandes PostgreSQL standard, à l’aide d’un outil tel que PgAdmin ou psql. Pour plus d’informations, consultez Se connecter un cluster.

Par exemple, pour autoriser db_user PostgreSQL à lire mytable, accordez l’autorisation :

GRANT SELECT ON mytable TO db_user;

Pour accorder les mêmes autorisations au rôle Microsoft Entra IDuser@tenant.onmicrosoft.com, utilisez la commande suivante :

GRANT SELECT ON mytable TO "user@tenant.onmicrosoft.com";

Azure Cosmos DB for PostgreSQL propage les instructions GRANT sur une table unique à travers l’ensemble du cluster, en les appliquant à tous les nœuds Worker. Il propage également les instructions GRANT à l’ensemble du système (par exemple, pour toutes les tables d’un schéma) :

-- applies to the coordinator node and propagates to worker nodes for Postgres role db_user
GRANT SELECT ON ALL TABLES IN SCHEMA public TO db_user;

Ou pour le rôle Microsoft Entra ID

-- applies to the coordinator node and propagates to worker nodes for Azure AD role user@tenant.onmicrosoft.com
GRANT SELECT ON ALL TABLES IN SCHEMA public TO "user@tenant.onmicrosoft.com";

Étapes suivantes