Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Sie können sowohl vom System zugewiesene als auch vom Benutzer zugewiesene verwaltete Identitäten verwenden, um sich bei einem Azure Database for PostgreSQL flexiblen Server zu authentifizieren. In diesem Artikel wird erläutert, wie Sie eine vom System zugewiesene verwaltete Identität für einen Azure virtuellen Computer (VM) verwenden, um auf einen Azure Database for PostgreSQL flexiblen Server zuzugreifen. Azure verwaltete Identitäten automatisch verwaltet und ermöglicht es Ihnen, sich bei Diensten zu authentifizieren, die Microsoft Entra Authentifizierung unterstützen, ohne Anmeldeinformationen in Ihren Code einfügen zu müssen.
Hier erfahren Sie, wie Sie:
- Gewähren Sie Ihrem virtuellen Computer Zugriff auf einen Azure Database for PostgreSQL flexiblen Server.
- Erstellen Sie einen Benutzer in der Datenbank, der die vom System zugewiesene Identität des virtuellen Computers darstellt.
- Rufen Sie ein Zugriffstoken mithilfe der VM-Identität ab und verwenden Sie es, um einen Azure Database for PostgreSQL flexiblen Server abzufragen.
- Implementieren Sie den Tokenabruf in einer C#-Beispielanwendung.
Voraussetzungen
- Wenn Sie mit der Funktion für verwaltete Identitäten für Azure-Ressourcen nicht vertraut sind, finden Sie hier eine Übersicht. Wenn Sie nicht über ein Azure-Konto verfügen, registrieren Sie sich für ein kostenloses Konto , bevor Sie fortfahren.
- Um die erforderliche Ressourcenerstellung und Rollenverwaltung zu erledigen, benötigt Ihr Konto "Besitzer"-Berechtigungen im entsprechenden Bereich (Ihr Abonnement oder Ihre Ressourcengruppe). Wenn Sie Unterstützung bei einer Rollenzuweisung benötigen, lesen Sie "Zuweisen von Azure-Rollen zum Verwalten des Zugriffs auf Ihre Azure-Abonnementressourcen".
- Sie benötigen eine Azure VM (z. B. Ubuntu Linux ausführen), die Sie für den Zugriff auf Ihre Datenbank mit verwalteter Identität verwenden möchten.
- Sie benötigen einen Azure Database for PostgreSQL flexiblen Server, auf dem Microsoft Entra Authentifizierung konfiguriert ist.
- Um dem C#-Beispiel zu folgen, führen Sie zunächst den Leitfaden zum Herstellen einer Verbindung mit C# durch.
Erstellen einer vom System zugewiesenen verwalteten Identität für Ihren virtuellen Computer
Verwenden Sie az vm identity assign mit dem Befehl identity assign, um die systemseitig zugewiesene Identität zu einer vorhandenen VM hinzuzufügen:
az vm identity assign -g myResourceGroup -n myVm
Rufen Sie die Anwendungs-ID für die vom System zugewiesene verwaltete Identität ab, die Sie in den nächsten Schritten benötigen:
# Get the client ID (application ID) of the system-assigned managed identity
az ad sp list --display-name vm-name --query [*].appId --out tsv
Erstellen Sie einen Azure Database for PostgreSQL-Benutzer für Ihre verwaltete Identität
Stellen Sie nun eine Verbindung als Microsoft Entra Administratorbenutzer mit Ihrer Azure Database for PostgreSQL flexiblen Serverdatenbank her, und führen Sie die folgenden SQL-Anweisungen aus. Ersetzen Sie den <identity_name> Namen der Ressourcen, für die Sie eine vom System zugewiesene verwaltete Identität erstellt haben.
Beachten Sie , dass pgaadauth_create_principal in der Postgres-Datenbank ausgeführt werden müssen.
select * from pgaadauth_create_principal('<identity_name>', false, false);
Erfolg sieht wie folgt aus:
pgaadauth_create_principal
-----------------------------------
Created role for "<identity_name>"
(1 row)
Weitere Informationen zum Verwalten von aktivierten Microsoft Entra-ID-Datenbankrollen finden Sie unter Verwalten von Microsoft Entra-Rollen in Azure Database for PostgreSQL.
Die verwaltete Identität hat jetzt Zugriff beim Authentifizieren mit dem Identitätsnamen als Rollennamen und dem Microsoft Entra-Token als Kennwort.
Hinweis
Wenn die verwaltete Identität ungültig ist, wird ein Fehler zurückgegeben: ERROR: Could not validate AAD user <ObjectId> because its name is not found in the tenant. [...].
Wenn ein Fehler wie "Keine Funktionsabgleiche..." angezeigt wird, stellen Sie sicher, dass Sie eine Verbindung mit der postgres Datenbank herstellen, nicht eine andere Datenbank, die Sie ebenfalls erstellt haben.
Abrufen des Zugriffstokens aus dem Azure-Instanzmetadatendienst
Ihre Anwendung kann jetzt ein Zugriffstoken aus dem Azure-Instanzmetadatendienst abrufen und für die Authentifizierung mit der Datenbank verwenden.
Das Abrufen dieses Tokens erfolgt durch Senden einer HTTP-Anforderung an http://169.254.169.254/metadata/identity/oauth2/token, wobei die folgenden Parameter übergeben werden:
api-version=2018-02-01resource=https://ossrdbms-aad.database.windows.net-
client_id=CLIENT_ID(die Sie zuvor abgerufen haben)
Sie erhalten ein JSON-Ergebnis zurück, das ein access_token Feld enthält – dieser lange Textwert ist das Zugriffstoken für verwaltete Identität, das Sie beim Herstellen einer Verbindung mit der Datenbank als Kennwort verwenden sollten.
Zu Testzwecken können Sie die folgenden Befehle in Ihrer Shell ausführen.
Hinweis
Beachten Sie, dass Sie curl, jq und den psql-Client installiert haben.
# 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
Sie sind jetzt mit der Datenbank verbunden, die Sie zuvor konfiguriert haben.
Mit verwalteter Identität verbinden
In diesem Abschnitt wird gezeigt, wie Sie mithilfe der vom Benutzer zugewiesenen verwalteten Identität des virtuellen Computers ein Zugriffstoken abrufen und einen Azure Database for PostgreSQL flexiblen Server aufrufen. Azure Database for PostgreSQL unterstützt nativ die Microsoft Entra-Authentifizierung, sodass sie Zugriffstoken, die mit verwalteten Identitäten für Azure-Ressourcen abgerufen wurden, direkt akzeptieren kann. Beim Erstellen einer Verbindung mit einer Azure-Datenbank für PostgreSQL übergeben Sie das Zugriffstoken im Kennwortfeld.
Verbinden mit verwalteter Identität in Python
Ein Python-Codebeispiel finden Sie in der Schnellstartanleitung: Verwenden von Python zum Verbinden und Abfragen von Daten in Der Azure-Datenbank für PostgreSQL
Verbinden mithilfe von verwalteter Identität in Java
Ein Java-Codebeispiel finden Sie unter Schnellstart: Verwenden von Java und JDBC mit Azure Database for PostgreSQL.
Verbinden mithilfe von verwalteter Identität in C#
Hier ist ein .NET Codebeispiel, das eine Verbindung mit einem Azure Database for PostgreSQL flexiblen Server mithilfe eines Zugriffstokens öffnet. Dieser Code muss auf dem virtuellen Computer ausgeführt werden, um die vom System zugewiesene verwaltete Identität zu verwenden, um ein Zugriffstoken von Microsoft Entra ID abzurufen. Ersetzen Sie die Werte von HOST, USER (durch <identity_name>) und 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}");
}
}
}
Füllen Sie die folgenden Platzhalter aus:
-
HOST: Ersetzen Sieyour-server-name.postgres.database.azure.comdurch den Hostnamen Ihres Servers. -
USER: Ersetzen Sie<identity_name>durch den Namen Ihrer verwalteten Identität. -
DATABASE: Ersetzen Sieyour-database-namedurch den Namen Ihres flexiblen Azure Database for PostgreSQL-Servers. - Microsoft Entra-Authentifizierung: Der Code verwendet die vom System zugewiesene verwaltete Identität der VM, um ein Zugriffstoken von Microsoft Entra ID abzurufen.
Wenn Sie diesen Befehl ausführen, erhalten Sie eine Ausgabe wie folgt:
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