Delen via


Verbind met beheerde identiteit aan Azure Database for PostgreSQL - Flexibele server

VAN TOEPASSING OP: 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 azure Database for PostgreSQL flexibele server. In dit artikel leest u hoe u een door het systeem toegewezen beheerde identiteit gebruikt voor een virtuele Azure-machine (VM) voor toegang tot een exemplaar van een flexibele Azure Database for PostgreSQL-server. Beheerde identiteiten worden automatisch beheerd door Azure en stellen u in staat om te verifiëren bij services die ondersteuning bieden voor Microsoft Entra-verificatie zonder referenties in uw code in te voegen.

U leert het volgende:

  • Ververleent uw VM toegang tot een exemplaar van een flexibele Azure Database for PostgreSQL-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 dit om een query uit te voeren op een exemplaar van een flexibele Azure Database for PostgreSQL-server.
  • Implementeer het ophalen van tokens in een C#-voorbeeldtoepassing.

Vereisten

  • Als u niet bekend bent met de functie voor beheerde identiteiten voor Azure-resources, raadpleegt u dit overzicht. Als u geen Azure-account hebt, registreert u zich voor een gratis account voordat u verder gaat.
  • Als u het vereiste resource maken en rolbeheer wilt uitvoeren, heeft uw account machtigingen voor eigenaar nodig voor het juiste bereik (uw abonnement of resourcegroep). Als u hulp nodig hebt bij een roltoewijzing, raadpleegt u Azure-rollen toewijzen om de toegang tot uw Azure-abonnementsbronnen te beheren.
  • U hebt een Virtuele Azure-machine (bijvoorbeeld Ubuntu Linux) nodig die u wilt gebruiken voor toegang tot uw database met behulp van beheerde identiteit
  • U hebt een exemplaar van een flexibele Azure Database for PostgreSQL-server nodig waarop Microsoft Entra-verificatie is geconfigureerd
  • Als u het C#-voorbeeld wilt volgen, voltooit u eerst de handleiding voor het maken van verbinding met C#

Een door het systeem toegewezen beheerde identiteit maken voor uw VM

Gebruik az vm identity assign with the identity assign command enable the system-assigned identity to an existing 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 flexibele Azure Database for PostgreSQL-servergebruiker maken voor uw beheerde identiteit

Maak nu verbinding als de Microsoft Entra-beheerdergebruiker met uw flexibele Azure Database for PostgreSQL-serverdatabase en voer de volgende SQL-instructies uit, waarbij <identity_name> u de naam vervangt 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 voor meer informatie over het beheren van databaserollen met Microsoft Entra ID ingeschakelde Microsoft Entra ID Azure Database for PostgreSQL - Flexible Server-rollen

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

Notitie

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

Notitie

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.

Dit token ophalen wordt uitgevoerd door een HTTP-aanvraag naar http://169.254.169.254/metadata/identity/oauth2/token en door te geven van de volgende parameters:

  • 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.

Notitie

Houd er rekening mee dat u de client nodig hebt curljqen dat de psql client is 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 flexibele Azure Database for PostgreSQL-server aan te roepen. Flexibele Azure Database for PostgreSQL-server biedt systeemeigen ondersteuning voor Microsoft Entra-verificatie, zodat toegangstokens die zijn verkregen via beheerde identiteiten voor Azure-resources rechtstreeks kunnen worden geaccepteerd. Wanneer u een verbinding maakt met een flexibele Azure Database for PostgreSQL-server, geeft u het toegangstoken door in het wachtwoordveld.

Verbinding maken met beheerde identiteit in Python

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

Verbinding maken met beheerde identiteit in Java

Raadpleeg voor een voorbeeld van Java-code de quickstart: Java en JDBC gebruiken met Azure Database for PostgreSQL - Flexible Server

Verbinding maken met beheerde identiteit in C#

Hier volgt een voorbeeld van .NET-code voor het openen van een verbinding met een flexibele Azure Database for PostgreSQL-server 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 van Microsoft Entra-id te verkrijgen. 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}");
        }
    }
}

U moet de volgende tijdelijke aanduidingen invullen:

  • HOST: Vervang your-server-name.postgres.database.azure.com door de hostnaam van uw flexibele server.
  • GEBRUIKER: Vervang identity_name> door <de naam van uw beheerde identiteit.
  • DATABASE: Vervang uw databasenaam door de naam van uw Azure Database for PostgreSQL-exemplaar.
  • 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 deze opdracht wordt uitgevoerd, krijgt deze uitvoer als volgt:

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

Deel uw suggesties en bugs met het productteam van Azure Database for PostgreSQL.