Verbinding maken met beheerde identiteit in Azure Database for PostgreSQL flexibele server

U kunt zowel door het systeem toegewezen als door de gebruiker toegewezen beheerde identiteiten gebruiken om te verifiëren bij een Azure Database for PostgreSQL flexibele server. In dit artikel leest u hoe u een door het systeem toegewezen beheerde identiteit gebruikt voor een Azure virtuele machine (VM) voor toegang tot een Azure Database for PostgreSQL flexibele server. Azure beheert automatisch beheerde identiteiten en stelt u in staat om te verifiëren bij services die ondersteuning bieden voor Microsoft Entra verificatie zonder dat u referenties hoeft in te voegen in uw code.

U leert het volgende:

  • Ververleent uw VM toegang tot een Azure Database for PostgreSQL flexibele server.
  • Maak een gebruiker in de database die de door het systeem toegewezen identiteit van de VIRTUELE machine vertegenwoordigt.
  • Haal een toegangstoken op met behulp van de VM-identiteit en gebruik het om een query uit te voeren op een Azure Database for PostgreSQL flexibele server.
  • Implementeer het ophalen van tokens in een C#-voorbeeldtoepassing.

Vereiste voorwaarden

Een door het systeem toegewezen beheerde identiteit maken voor uw VM

Gebruik az vm identity assign met de identity assign opdracht om de door het systeem toegewezen identiteit toe te voegen aan een bestaande VM:

az vm identity assign -g myResourceGroup -n myVm

Haal de toepassings-id op voor de door het systeem toegewezen beheerde identiteit, die u nodig hebt in de volgende stappen:

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

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

Een Azure Database for PostgreSQL gebruiker maken voor uw beheerde identiteit

Maak nu verbinding als de Microsoft Entra administratorgebruiker voor uw Azure Database for PostgreSQL flexibele serverdatabase en voer de volgende SQL-instructies uit. Vervang door <identity_name> de naam van de resources waarvoor u een door het systeem toegewezen beheerde identiteit hebt gemaakt.

Opmerking pgaadauth_create_principal moet worden uitgevoerd op de Postgres-database.

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

Geslaagd ziet er als volgt uit:

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

Zie Microsoft Entra-rollen beheren in Azure Database for PostgreSQL voor meer informatie over het beheren van databaserollen met Microsoft Entra ID.

De beheerde identiteit heeft nu toegang bij verificatie met de identiteitsnaam als rolnaam en het Microsoft Entra-token als wachtwoord.

Opmerking

Als de beheerde identiteit niet geldig is, wordt er een fout geretourneerd: ERROR: Could not validate AAD user <ObjectId> because its name is not found in the tenant. [...].

Als er een fout wordt weergegeven zoals 'Geen functieovereenkomsten...', controleert u of u verbinding maakt met de postgres database, niet een andere database die u ook hebt gemaakt.

Het toegangstoken ophalen uit de Azure Instance Metadata-service

Uw toepassing kan nu een toegangstoken ophalen uit de Azure Instance Metadata-service en deze gebruiken voor verificatie met de database.

Het ophalen van dit token gebeurt door een HTTP-verzoek naar http://169.254.169.254/metadata/identity/oauth2/token te sturen en de volgende parameters mee te geven:

  • api-version = 2018-02-01
  • resource = https://ossrdbms-aad.database.windows.net
  • client_id = CLIENT_ID (die u eerder hebt opgehaald)

U krijgt een JSON-resultaat met een access_token veld terug: deze lange tekstwaarde is het toegangstoken voor beheerde identiteit dat u als wachtwoord moet gebruiken bij het maken van verbinding met de database.

Voor testdoeleinden kunt u de volgende opdrachten uitvoeren in uw shell.

Opmerking

Houd er rekening mee dat u curl, jq en de psql-client moet hebben geïnstalleerd.

# 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

U bent nu verbonden met de database die u eerder hebt geconfigureerd.

Verbinding maken met beheerde identiteit

In deze sectie wordt beschreven hoe u een toegangstoken kunt ophalen met behulp van de door de gebruiker toegewezen beheerde identiteit van de VIRTUELE machine en hoe u dit gebruikt om een Azure Database for PostgreSQL flexibele server aan te roepen. Azure Database for PostgreSQL biedt systeemeigen ondersteuning voor Microsoft Entra-verificatie, zodat toegangstokens die zijn verkregen met behulp van beheerde identiteiten voor Azure-resources, rechtstreeks kunnen worden geaccepteerd. Wanneer u een verbinding met een Azure Database for PostgreSQL maakt, geeft u het toegangstoken door in het wachtwoordveld.

Verbinding maken met beheerde identiteit in Python

Raadpleeg de quickstart voor een Python-codevoorbeeld : Python gebruiken om verbinding te maken met en query's uit te voeren op gegevens in Azure Database for PostgreSQL

Verbinding maken met beheerde identiteit in Java

Zie quickstart: Java en JDBC gebruiken met Azure Database for PostgreSQL voor een voorbeeld van Java code.

Verbinding maken met beheerde identiteit in C#

Hier volgt een .NET codevoorbeeld waarmee een verbinding met een Azure Database for PostgreSQL flexibele server wordt geopend met behulp van een toegangstoken. Deze code moet worden uitgevoerd op de virtuele machine om de door het systeem toegewezen beheerde identiteit te gebruiken om een toegangstoken op te halen uit Microsoft Entra ID. Vervang de waarden van HOST, USER (door <identity_name>) en 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}");
        }
    }
}

Vul de volgende tijdelijke aanduidingen in:

  • HOST: Vervang door your-server-name.postgres.database.azure.com de hostnaam van uw server.
  • USER: Vervang door <identity_name> de naam van uw beheerde identiteit.
  • DATABASE: Vervang door your-database-name de naam van uw Azure Database for PostgreSQL flexibele server.
  • Microsoft Entra-verificatie: de code maakt gebruik van de door het systeem toegewezen beheerde identiteit van de virtuele machine om een toegangstoken op te halen uit Microsoft Entra-id.

Wanneer u deze opdracht uitvoert, krijgt u een uitvoer zoals deze:

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