Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Tożsamości zarządzane przypisane przez system i przypisane przez użytkownika umożliwiają uwierzytelnianie na serwerze elastycznym Azure Database for PostgreSQL. W tym artykule pokazano, jak używać przypisanej przez system tożsamości zarządzanej dla maszyny wirtualnej Azure w celu uzyskania dostępu do serwera elastycznego Azure Database for PostgreSQL. Azure automatycznie zarządza tożsamościami zarządzanymi i umożliwia uwierzytelnianie się w usługach obsługujących uwierzytelnianie Microsoft Entra bez konieczności umieszczania poświadczeń w kodzie.
Uczysz się, jak:
- Udziel maszynie wirtualnej dostępu do serwera elastycznego Azure Database for PostgreSQL.
- Utwórz użytkownika w bazie danych, który reprezentuje tożsamość przypisaną przez system maszyny wirtualnej.
- Uzyskiwanie tokenu dostępu przy użyciu tożsamości maszyny wirtualnej i używanie go do wykonywania zapytań dotyczących serwera elastycznego 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.
- Potrzebujesz maszyny wirtualnej Azure (na przykład z systemem Ubuntu Linux), której chcesz użyć do uzyskania dostępu do bazy danych przy użyciu tożsamości zarządzanej.
- Potrzebujesz serwera elastycznego Azure Database for PostgreSQL, na którym skonfigurowano uwierzytelnianie 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 wraz z poleceniem identity assign, aby dodać tożsamość przypisaną 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 tożsamości zarządzanej
Teraz połącz się jako użytkownik administratora Microsoft Entra z bazą danych serwera elastycznego Azure Database for PostgreSQL i uruchom następujące instrukcje SQL. Zastąp <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 serwera elastycznego 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 Java
Aby zapoznać się z przykładem kodu Java, zobacz Szybki start: używanie Java i JDBC z Azure Database for PostgreSQL.
Nawiązywanie połączenia przy użyciu tożsamości zarządzanej w języku C#
Oto przykład kodu .NET, który otwiera połączenie z serwerem elastycznym Azure Database for PostgreSQL przy użyciu tokenu dostępu. Ten kod musi zostać uruchomiony na maszynie wirtualnej, aby uzyskać token dostępu z Microsoft Entra ID przy użyciu przypisanej przez system tożsamości zarządzanej. Zastąp wartości HOST, USER (ciągiem <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}");
}
}
}
Wypełnij następujące pola zastępcze:
-
HOST: Zastąpyour-server-name.postgres.database.azure.comnazwą hosta Twojego serwera. -
USER: Zastąp<identity_name>nazwą zarządzanej tożsamości. -
DATABASE: Zastąpyour-database-namenazwą swojego serwera elastycznego 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 tego polecenia uzyskasz dane wyjściowe podobne do następujących:
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