Partager via


Se connecter avec une identité managée à Azure Database pour PostgreSQL : serveur flexible

S’APPLIQUE À : Azure Database pour PostgreSQL : serveur flexible

Vous pouvez utiliser des identités managées affectées par le système et par l’utilisateur pour l’authentification auprès de Azure Database pour PostgreSQL : serveur flexible. Cet article explique comment utiliser une identité managée affectée par le système à une machine virtuelle Azure pour accéder à une instance de serveur flexible Azure Database pour PostgreSQL. Les identités gérées sont automatiquement gérées par Azure et vous permettent de vous authentifier auprès des services prenant en charge l'authentification Microsoft Entra sans avoir besoin d'insérer des informations d'identification dans votre code.

Vous allez apprendre à effectuer les actions suivantes :

  • Accorder à votre machine virtuelle l’accès à une instance de serveur flexible Azure Database pour PostgreSQL.
  • Créer un utilisateur dans la base de données représentant l’identité affectée par le système de la machine virtuelle.
  • Obtenir un jeton d’accès en utilisant l’identité de la machine virtuelle et s’en servir pour interroger une instance de serveur flexible Azure Database pour PostgreSQL.
  • Implémenter la récupération de jetons dans un exemple d’application C#.

Prérequis

  • Si vous n’êtes pas familiarisé de la fonctionnalité identités managées pour ressources Azure, consultez cette Vue d’ensemble. Si vous n’avez pas encore de compte Azure, Inscrivez-vous sur un compte gratuit avant de continuer.
  • Pour effectuer les opérations nécessaires de création de ressources et de gestion de rôles, votre compte doit disposer des autorisations « Propriétaire » au niveau de l’étendue appropriée (votre abonnement ou groupe de ressources). Si vous avez besoin d’aide concernant l’attribution d’un rôle, consultez Attribuer des rôles Azure pour gérer l’accès aux ressources de votre abonnement Azure.
  • Vous avez besoin d’une machine virtuelle Azure (exécutant Ubuntu Linux, par exemple) que vous souhaitez utiliser pour accéder à votre base de données avec une identité managée
  • Vous avez besoin d'une instance de serveur flexible Azure Database pour PostgreSQL sur lequel l'authentification Microsoft Entra est configurée
  • Pour suivre cet exemple C#, vous devez d’abord consulter le guide pratique Se connecter avec C#

Créer une identité managée affectée par le système pour votre machine virtuelle

Utilisez az vm identity assign avec la commande identity assign pour activer l’identité affectée par le système sur une machine virtuelle existante :

az vm identity assign -g myResourceGroup -n myVm

Récupérez l’ID d’application de l’identité managée affectée par le système. Vous en avez besoin dans les étapes suivantes :

# Get the client ID (application ID) of the system-assigned managed identity

az ad sp list --display-name vm-name --query [*].appId --out tsv

Créer un serveur flexible Azure Database pour PostgreSQL pour votre identité managée

Maintenant, connectez-vous en tant qu'utilisateur administrateur Microsoft Entra à votre base de données de serveur flexible Azure Database pour PostgreSQL et exécutez les instructions SQL suivantes, en remplaçant <identity_name> par le nom des ressources pour lesquelles vous avez créé votre identité managée attribuée par le système :

Notez que pgaadauth_create_principal doit être exécuté sur la base de données Postgres.

select * from pgaadauth_create_principal('<identity_name>', false, false);

Le succès ressemble à :

    pgaadauth_create_principal
-----------------------------------
 Created role for "<identity_name>"
(1 row)

Pour plus d'informations sur la gestion des rôles de base de données activés par Microsoft Entra ID, consultez comment gérer les rôles des serveurs flexible Azure Database pour PostgreSQL activés par Microsoft Entra ID

L'identité gérée a désormais accès lors de l'authentification avec le nom d'identité comme nom de rôle et le jeton Microsoft Entra comme mot de passe.

Remarque

Si l’identité managée n’est pas valide, une erreur est renvoyée : ERROR: Could not validate AAD user <ObjectId> because its name is not found in the tenant. [...].

Remarque

Si vous voyez une erreur ressemblant à « Aucune fonction ne correspond... », vérifiez que vous vous connectez à la base de données postgres et pas à une autre base de données que vous avez également créée.

Récupérer le jeton d’accès à partir d’Azure Instance Metadata Service

Votre application peut désormais récupérer un jeton d’accès à partir d’Azure Instance Metadata Service et l’utiliser pour l’authentification auprès de la base de données.

Vous effectuez cette récupération de jeton en envoyant une requête HTTP à http://169.254.169.254/metadata/identity/oauth2/token et en transmettant les paramètres suivants :

  • api-version = 2018-02-01
  • resource = https://ossrdbms-aad.database.windows.net
  • client_id = CLIENT_ID (que vous avez récupérés précédemment)

Vous obtenez un résultat JSON contenant un champ access_token. Cette longue valeur de texte est le jeton d’accès de l’identité managée que vous devez utiliser comme mot de passe lors de la connexion à la base de données.

À des fins de test, vous pouvez exécuter les commandes suivantes dans votre interpréteur de commandes.

Notes

Notez que curl, jq et le client psql doivent être installés.

# Retrieve the access token

export PGPASSWORD=`curl -s 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fossrdbms-aad.database.windows.net&client_id=CLIENT_ID' -H Metadata:true | jq -r .access_token`

# Connect to the database

psql -h SERVER --user USER DBNAME

Vous êtes maintenant connecté à la base de données que vous avez configurée précédemment.

Se connecter avec une identité managée

Cette section montre comment obtenir un jeton d’accès à l’aide de l’identité managée affectée par l’utilisateur de la machine virtuelle et comment l’utiliser pour appeler le serveur flexible Azure Database pour PostgreSQL. Le serveur flexible Azure Database pour PostgreSQL prend en charge de manière native l’authentification Microsoft Entra, de sorte qu’il peut accepter directement les jetons d’accès obtenus à l’aide d’identités managées pour les ressources Azure. Lors de la création d’une connexion au serveur flexible Azure Database pour PostgreSQL, vous transmettez le jeton d’accès dans le champ du mot de passe.

Se connecter avec une identité managée en Python

Pour obtenir un exemple de code Python, consultez le Démarrage rapide : Utiliser Python afin de se connecter à Azure Database pour PostgreSQL – Serveur flexible et d’interroger les données

Se connecter avec une identité managée en Java

Pour obtenir un exemple de code Java, consultez le Démarrage rapide : utiliser Java et JDBC avec Azure Database pour PostgreSQL – Serveur flexible

Se connecter avec une identité managée dans C#

Voici un exemple de code .NET pour l’ouverture d’une connexion au serveur flexible Azure Database pour PostgreSQL à l’aide d’un jeton d’accès. Ce code doit s'exécuter sur la machine virtuelle pour utiliser l'identité managée attribuée par le système afin d'obtenir un jeton d'accès de Microsoft Entra ID. Remplacez les valeurs de HOST, USER (avec <identity_name>) et DATABASE.

using Azure.Identity;
using Npgsql;
using System;

class Program
{
    static void Main(string[] args)
    {
        try
        {
            // Obtain an access token using the system-assigned managed identity
            var tokenCredential = new DefaultAzureCredential();
            var accessToken = tokenCredential.GetToken(
                new Azure.Core.TokenRequestContext(new[] { "https://ossrdbms-aad.database.windows.net/.default" })
            );

            // Build the connection string
            string host = "your-server-name.postgres.database.azure.com"; // Replace with your flexible server's host
            string database = "your-database-name";                      // Replace with your database name
            string user = "<identity_name>";                             // Replace with your identity name (e.g., "myManagedIdentity")

            var connectionString = $"Host={host};Database={database};Username={user};Password={accessToken.Token};SSL Mode=Require;Trust Server Certificate=true";

            // Open a connection to the database
            using var connection = new NpgsqlConnection(connectionString);
            connection.Open();

            Console.WriteLine("Connection successful!");

            // Optional: Perform a simple query
            using var command = new NpgsqlCommand("SELECT version();", connection);
            using var reader = command.ExecuteReader();
            while (reader.Read())
            {
                Console.WriteLine($"PostgreSQL version: {reader.GetString(0)}");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"An error occurred: {ex.Message}");
        }
    }
}

Vous devez remplir les espaces réservés suivants :

  • HOST : remplacez your-server-name.postgres.database.azure.com par le nom d’hôte de votre serveur flexible.
  • USER : remplacez les <identity_name> par le nom de votre identité managée.
  • DATABASE : remplacez your-database-name par le nom de votre instance Azure Database pour PostgreSQL.
  • Authentification Microsoft Entra : le code utilise l’identité managée affectée par le système de la machine virtuelle pour récupérer le jeton d’accès à partir de Microsoft Entra ID.

Quand elle est exécutée, cette commande retourne une sortie semblable à celle-ci :

Getting access token from Azure AD...
Opening connection using access token...

Connected!

Postgres version: PostgreSQL 11.11, compiled by Visual C++ build 1800, 64-bit