Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
U kunt zowel door het systeem toegewezen als door de gebruiker toegewezen beheerde identiteiten gebruiken om te verifiëren bij een flexibele serverinstantie van Azure Database for PostgreSQL. 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.
Vereiste voorwaarden
- Als u niet bekend bent met de functie beheerde identiteiten voor Azure-resources, raadpleegt u dit overzicht. Als u geen Azure-account hebt, meldt u zich aan voor een gratis account voordat u doorgaat.
- 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 gebruiker voor Azure Database for PostgreSQL maken voor je 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 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 ongeldig is, wordt 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.
Deze token ophalen wordt uitgevoerd door een HTTP aanvraag in te dienen en de volgende parameters door te http://169.254.169.254/metadata/identity/oauth2/token geven:
api-version=2018-02-01resource=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 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 opvragen met behulp van de door de gebruiker toegewezen beheerde identiteit van de VIRTUELE machine en deze gebruikt om een exemplaar van een flexibele Azure Database for PostgreSQL-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
Raadpleeg voor een voorbeeld van Java-code de quickstart: Java en JDBC gebruiken met Azure Database for PostgreSQL
Verbinding maken met beheerde identiteit in C#
Hier volgt een .NET-codevoorbeeld van het openen van een verbinding met een flexibele Server-instantie van Azure Database for PostgreSQL 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 exemplaar.
- 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