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 curl
jq
en 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
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.