Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Do uwierzytelniania w wystąpieniu elastycznego serwera usług Azure Database for PostgreSQL można używać zarówno tożsamości zarządzanych przypisywanych przez system, jak i przypisywanych przez użytkownika. W tym artykule pokazano, jak używać przypisanej przez system zarządzanej tożsamości dla maszyny wirtualnej platformy Azure w celu uzyskania dostępu do elastycznej instancji serwera bazodanowego Azure Database for PostgreSQL. Tożsamości zarządzane (Managed Identities) są automatycznie obsługiwane przez platformę Azure i umożliwiają uwierzytelnianie się w usługach obsługujących Microsoft Entra, bez konieczności wstawiania poświadczeń w kod.
Uczysz się, jak:
- Udziel maszynie wirtualnej dostępu do elastycznego serwera w usłudze Azure Database for PostgreSQL.
- Utwórz użytkownika w bazie danych, który reprezentuje tożsamość przypisaną przez system maszyny wirtualnej.
- Uzyskaj token dostępu z użyciem tożsamości maszyny wirtualnej i użyj go, aby wykonać zapytanie do wystąpienia elastycznego serwera bazy danych Azure Database for PostgreSQL.
- Zaimplementuj pobieranie tokenu w przykładowej aplikacji w języku C#.
Wymagania wstępne
- Jeśli nie znasz funkcji tożsamości zarządzanych dla zasobów platformy Azure, zapoznaj się z tym omówieniem. Jeśli nie masz konta platformy Azure, utwórz bezpłatne konto przed kontynuowaniem.
- Aby wykonać wymagane tworzenie zasobów i zarządzanie rolami, twoje konto musi mieć uprawnienia "Właściciel" w odpowiednim zakresie (subskrypcja lub grupa zasobów). Jeśli potrzebujesz pomocy dotyczącej przypisania roli, zobacz Przypisywanie ról platformy Azure do zarządzania dostępem do zasobów subskrypcji platformy Azure.
- Potrzebna jest maszyna wirtualna platformy Azure (na przykład z systemem Ubuntu Linux), której chcesz użyć do uzyskiwania dostępu do bazy danych przy użyciu tożsamości zarządzanej
- Potrzebujesz elastycznego wystąpienia serwera usługi Azure Database for PostgreSQL, które ma skonfigurowane uwierzytelnianie firmy Microsoft Entra
- Aby postępować zgodnie z przykładem języka C#, najpierw ukończ przewodnik dotyczący nawiązywania połączenia z językiem C#
Tworzenie tożsamości zarządzanej przypisanej przez system dla maszyny wirtualnej
Użyj polecenia az vm identity assign razem z poleceniem identity assign, aby przypisać tożsamość nadaną przez system do istniejącej maszyny wirtualnej.
az vm identity assign -g myResourceGroup -n myVm
Pobierz identyfikator aplikacji dla tożsamości zarządzanej przypisanej przez system, która jest potrzebna w kilku następnych krokach:
# Get the client ID (application ID) of the system-assigned managed identity
az ad sp list --display-name vm-name --query [*].appId --out tsv
Utwórz użytkownika Azure Database for PostgreSQL dla Twojej tożsamości zarządzanej
Teraz, jako użytkownik administratora usługi Microsoft Entra, połącz się z bazą danych elastycznego serwera Azure Database for PostgreSQL i uruchom następujące instrukcje SQL, zastępując <identity_name> nazwą zasobów, dla których utworzono tożsamość zarządzaną przypisaną przez system.
Uwaga pgaadauth_create_principal należy uruchomić w bazie danych Postgres.
select * from pgaadauth_create_principal('<identity_name>', false, false);
Powodzenie wygląda następująco:
pgaadauth_create_principal
-----------------------------------
Created role for "<identity_name>"
(1 row)
Aby uzyskać więcej informacji na temat zarządzania rolami bazy danych z włączoną obsługą identyfikatora Entra firmy Microsoft, zobacz Zarządzanie rolami firmy Microsoft w usłudze Azure Database for PostgreSQL.
Tożsamość zarządzana ma teraz dostęp po uwierzytelnieniu przy użyciu nazwy tożsamości jako nazwy roli oraz tokenu Microsoft Entra jako hasła.
Uwaga / Notatka
Jeśli tożsamość zarządzana jest nieprawidłowa, zwracany jest błąd: ERROR: Could not validate AAD user <ObjectId> because its name is not found in the tenant. [...].
Jeśli zostanie wyświetlony błąd taki jak "Żadna funkcja nie pasuje...", upewnij się, że łączysz się z postgres bazą danych, a nie z inną utworzoną bazą danych.
Pobieranie tokenu dostępu z usługi Azure Instance Metadata
Aplikacja może teraz pobrać token dostępu z usługi Azure Instance Metadata i używać go do uwierzytelniania w bazie danych.
To pobieranie tokenu odbywa się przez wysyłanie HTTP żądania do http://169.254.169.254/metadata/identity/oauth2/token i przekazywanie następujących parametrów:
api-version=2018-02-01resource=https://ossrdbms-aad.database.windows.net-
client_id=CLIENT_ID(które pobrano wcześniej)
Otrzymasz wynik JSON zawierający access_token pole — ta długa wartość tekstowa jest tokenem dostępu tożsamości zarządzanej, którego należy użyć jako hasła podczas nawiązywania połączenia z bazą danych.
Na potrzeby testowania możesz uruchomić następujące polecenia w wierszu poleceń.
Uwaga / Notatka
Należy pamiętać, że konieczne jest zainstalowanie curl, jq oraz klienta psql.
# 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
Teraz masz połączenie ze skonfigurowaną wcześniej bazą danych.
Nawiązywanie połączenia przy użyciu tożsamości zarządzanej
W tej sekcji przedstawiono sposób uzyskiwania tokenu dostępu przy użyciu przypisanej przez użytkownika tożsamości zarządzanej maszyny wirtualnej i używania go do wywoływania wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL. Usługa Azure Database for PostgreSQL natywnie obsługuje uwierzytelnianie firmy Microsoft Entra, dzięki czemu może bezpośrednio akceptować tokeny dostępu uzyskane przy użyciu tożsamości zarządzanych dla zasobów platformy Azure. Podczas tworzenia połączenia z usługą Azure Database for PostgreSQL przekazujesz token dostępu w polu hasła.
Nawiązywanie połączenia przy użyciu tożsamości zarządzanej w języku Python
Aby zapoznać się z przykładem kodu w języku Python, zapoznaj się z przewodnikiem Szybki start: nawiązywanie połączeń z danymi i wykonywanie zapytań względem nich w usłudze Azure Database for PostgreSQL przy użyciu języka Python
Nawiązywanie połączenia przy użyciu tożsamości zarządzanej w języku Java
Aby zapoznać się z przykładem kodu Java, zapoznaj się z przewodnikiem Szybki start: używanie języka Java i JDBC z usługą Azure Database for PostgreSQL
Nawiązywanie połączenia przy użyciu tożsamości zarządzanej w języku C#
Oto przykładowy kod platformy .NET do otwarcia połączenia z elastyczną instancją serwera usługi Azure Database for PostgreSQL przy użyciu tokenu dostępu. Ten kod musi zostać uruchomiony na maszynie wirtualnej, aby użyć przypisanej przez system tożsamości zarządzanej w celu uzyskania tokenu dostępu z identyfikatora Entra firmy Microsoft. Zastąp wartości HOST, USER (z <identity_name>), i 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}");
}
}
}
Należy wypełnić następujące pola zastępcze:
- HOST: zastąp your-server-name.postgres.database.azure.com nazwą hosta wystąpienia.
- UŻYTKOWNIK: zastąp <identity_name> nazwą tożsamości zarządzanej.
-
DATABASE: Zastąp your-database-name nazwą wystąpienia bazy danych Azure Database for PostgreSQL. - Microsoft Entra Authentication: kod używa przypisanej przez system tożsamości zarządzanej maszyny wirtualnej do pobierania tokenu dostępu z identyfikatora Entra firmy Microsoft.
Po uruchomieniu to polecenie daje dane wyjściowe w następujący sposób:
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