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 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
- 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 de vereiste resources wilt maken en rolbeheer wilt uitvoeren, heeft uw account "Eigenaar"-machtigingen nodig op het juiste niveau (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 Azure-VM nodig (bijvoorbeeld Ubuntu Linux) die u wilt gebruiken voor toegang tot uw database met beheerde identiteit.
- U hebt een Azure Database for PostgreSQL flexibele 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 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-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 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 dooryour-server-name.postgres.database.azure.comde hostnaam van uw server. -
USER: Vervang door<identity_name>de naam van uw beheerde identiteit. -
DATABASE: Vervang dooryour-database-namede 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