Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
Vous pouvez utiliser des identités managées affectées par le système et affectées par l’utilisateur pour vous authentifier auprès d’une instance de serveur flexible Azure Database pour PostgreSQL. Cet article explique comment utiliser une identité managée affectée par le système pour une machine virtuelle Azure pour accéder à une instance de serveur flexible Azure Database pour PostgreSQL. Les identités managées sont automatiquement gérées par Azure et vous permettent de vous authentifier auprès des services qui prennent en charge l’authentification Microsoft Entra sans avoir à insérer d’informations d’identification dans votre code.
Vous allez apprendre à effectuer les actions suivantes :
- Accordez à votre machine virtuelle l’accès à une instance de serveur flexible Azure Database pour PostgreSQL.
- Créez un utilisateur dans la base de données qui représente l’identité affectée par le système de la machine virtuelle.
- Obtenez un jeton d’accès à l’aide de l’identité de machine virtuelle et utilisez-le pour interroger une instance de serveur flexible Azure Database pour PostgreSQL.
- Implémentez la récupération de jeton dans un exemple d’application C#.
Prerequisites
- Si vous n’êtes pas familiarisé avec les identités managées pour la fonctionnalité de ressources Azure, consultez cette vue d’ensemble. Si vous n’avez pas de compte Azure, inscrivez-vous à un compte gratuit avant de continuer.
- Pour effectuer la création de ressources et la gestion des rôles requises, votre compte a besoin des autorisations « Propriétaire » dans l’étendue appropriée (votre abonnement ou groupe de ressources). Si vous avez besoin d’aide pour une attribution de rôle, consultez Affecter des rôles Azure pour gérer l’accès à vos ressources d’abonnement Azure.
- Vous avez besoin d’une machine virtuelle Azure (par exemple, exécutant Ubuntu Linux) que vous souhaitez utiliser pour accéder à votre base de données à l’aide de Managed Identity
- Vous avez besoin d’une instance de serveur flexible Azure Database pour PostgreSQL avec l’authentification Microsoft Entra configurée
- Pour suivre l’exemple C#, commencez par suivre le guide de connexion avec C#
Créer une identité managée affectée par le système pour votre machine virtuelle
Utilisez az vm identity assign with the identity assign command enables the system-assigned identity to an existing VM :
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, dont vous 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 utilisateur Azure Database for PostgreSQL pour votre identité managée
À présent, connectez-vous en tant qu’utilisateur administrateur Microsoft Entra à votre base de données 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éé une identité managée affectée par le système :
Notez pgaadauth_create_principal devez être exécuté sur la base de données Postgres.
select * from pgaadauth_create_principal('<identity_name>', false, false);
La réussite ressemble à ceci :
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 l’ID Microsoft Entra, consultez Gérer les rôles Microsoft Entra dans Azure Database pour PostgreSQL.
L’identité managé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.
Note
Si l’identité managée n’est pas valide, une erreur est retournée : ERROR: Could not validate AAD user <ObjectId> because its name is not found in the tenant. [...].
Si vous voyez une erreur telle que « Aucune fonction ne correspond... », vérifiez que vous vous connectez à la postgres base de données, pas une autre base de données que vous avez également créée.
Récupérer le jeton d’accès à partir du service de métadonnées d’instance Azure
Votre application peut maintenant récupérer un jeton d’accès à partir du service de métadonnées d’instance Azure et l’utiliser pour l’authentification auprès de la base de données.
Cette récupération de jeton est effectuée en effectuant une HTTP requête vers http://169.254.169.254/metadata/identity/oauth2/token et en transmettant les paramètres suivants :
api-version=2018-02-01resource=https://ossrdbms-aad.database.windows.net-
client_id=CLIENT_ID(que vous avez récupéré précédemment)
Vous récupérez un résultat JSON contenant un access_token champ : cette valeur de texte longue est le jeton d’accès d’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.
Note
Notez que vous avez besoin curl, jqet que le psql client est installé.
# 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 à l’aide d’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 une instance de serveur flexible Azure Database pour PostgreSQL. Azure Database pour PostgreSQL prend en charge en mode natif l’authentification Microsoft Entra, afin qu’elle puisse 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 à une base de données Azure pour PostgreSQL, vous transmettez le jeton d’accès dans le champ mot de passe.
Se connecter à l’aide d’une identité managée dans Python
Pour obtenir un exemple de code Python, reportez-vous au guide de démarrage rapide : Utiliser Python pour connecter et interroger des données dans Azure Database pour PostgreSQL
Se connecter à l’aide d’une identité managée dans Java
Pour obtenir un exemple de code Java, consultez le guide de démarrage rapide : Utiliser Java et JDBC avec Azure Database pour PostgreSQL
Se connecter à l’aide d’une identité managée en C#
Voici un exemple de code .NET qui montre comment ouvrir une connexion à une instance de 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 affectée par le système pour obtenir un jeton d’accès à partir de l’ID Microsoft Entra. Remplacez les valeurs de HOST, USER (par <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 renseigner les espaces réservés suivants :
- HÔTE : remplacez your-server-name.postgres.database.azure.com par le nom d’hôte de votre instance.
- UTILISATEUR : remplacez <identity_name> par le nom de votre identité managée.
-
DATABASE: remplacez votre nom de base de données 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 un jeton d’accès à partir de l’ID Microsoft Entra.
Lors de l’exécution, cette commande donne 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