Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
È possibile usare identità gestite assegnate dal sistema e assegnate dall'utente per eseguire l'autenticazione in un server flessibile Database di Azure per PostgreSQL. Questo articolo illustra come usare un'identità gestita assegnata dal sistema per una macchina virtuale (VM) Azure per accedere a un server flessibile Database di Azure per PostgreSQL. Azure gestisce automaticamente le identità gestite e consente di eseguire l'autenticazione ai servizi che supportano l'autenticazione Microsoft Entra senza dover inserire le credenziali nel codice.
Scopri come:
- Concedere alla macchina virtuale l'accesso a un server flessibile Database di Azure per PostgreSQL.
- Creare un utente nel database che rappresenta l'identità assegnata dal sistema della macchina virtuale.
- Ottenere un token di accesso usando l'identità della macchina virtuale e usarlo per eseguire query su un server flessibile Database di Azure per PostgreSQL.
- Implementare il recupero dei token in un'applicazione C# di esempio.
Prerequisiti
- Se non si ha familiarità con la funzionalità delle identità gestite per le risorse di Azure, vedere questa panoramica. Se non si ha un account Azure, registrarsi per ottenere un account gratuito prima di continuare.
- Per eseguire le attività richieste di creazione delle risorse e gestione dei ruoli, l'account deve avere le autorizzazioni "Proprietario" nell'ambito appropriato (sottoscrizione o gruppo di risorse). Se è necessaria assistenza con un'assegnazione dei ruoli, vedere Assegnare i ruoli di Azure per gestire l'accesso alle risorse della sottoscrizione di Azure.
- È necessaria una macchina virtuale Azure (ad esempio, che esegue Ubuntu Linux) che si vuole usare per accedere al database usando l'identità gestita.
- È necessario un server flessibile Database di Azure per PostgreSQL con autenticazione di Microsoft Entra configurata.
- Per seguire l'esempio C#, completare prima di tutto la guida su come connettersi con C#.
Creare un'identità gestita assegnata dal sistema per la macchina virtuale
Usare az vm identity assign con il identity assign comando per aggiungere l'identità assegnata dal sistema a una macchina virtuale esistente:
az vm identity assign -g myResourceGroup -n myVm
Recuperare l'ID applicazione per l'identità gestita assegnata dal sistema, necessaria nei passaggi successivi:
# Get the client ID (application ID) of the system-assigned managed identity
az ad sp list --display-name vm-name --query [*].appId --out tsv
Crea un utente di Database di Azure per PostgreSQL per la tua identità gestita
Connettersi ora come utente amministratore di Microsoft Entra al database del server flessibile Database di Azure per PostgreSQL ed eseguire le istruzioni SQL seguenti. Sostituire <identity_name> con il nome delle risorse per cui è stata creata un'identità gestita assegnata dal sistema.
Nota pgaadauth_create_principal deve essere eseguito nel database Postgres.
select * from pgaadauth_create_principal('<identity_name>', false, false);
L'esito positivo è simile al seguente:
pgaadauth_create_principal
-----------------------------------
Created role for "<identity_name>"
(1 row)
Per altre informazioni sulla gestione dei ruoli di database abilitati per Microsoft Entra ID, vedere Gestire i ruoli di Microsoft Entra in Database di Azure per PostgreSQL.
L'identità gestita ha ora accesso quando si esegue l'autenticazione con il nome dell'identità come nome del ruolo e il token Microsoft Entra come password.
Annotazioni
Se l'identità gestita non è valida, viene restituito un errore: ERROR: Could not validate AAD user <ObjectId> because its name is not found in the tenant. [...].
Se viene visualizzato un errore simile a "Nessuna corrispondenza di funzione...", assicurarsi di connettersi al database postgres, non a un database diverso creato.
Recuperare il token di accesso dal servizio metadati dell'istanza di Azure
L'applicazione può ora recuperare un token di accesso dal servizio metadati dell'istanza di Azure e usarlo per l'autenticazione con il database.
Questo recupero del token viene eseguito effettuando una richiesta da HTTP a http://169.254.169.254/metadata/identity/oauth2/token e passando i parametri seguenti:
api-version=2018-02-01resource=https://ossrdbms-aad.database.windows.net-
client_id=CLIENT_ID(recuperato in precedenza)
Si ottiene un risultato JSON contenente un campo access_token: questo valore di testo lungo è il token di accesso dell'identità gestita, da usare come password per connettersi al database.
A scopo di test, è possibile eseguire i comandi seguenti nella shell.
Annotazioni
Si noti che è necessario che siano installati curl, jq e il client 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
A questo punto si è connessi al database configurato in precedenza.
Connettersi usando l'identità gestita
Questa sezione illustra come ottenere un token di accesso usando l'identità gestita assegnata dall'utente della macchina virtuale e usarla per chiamare un server flessibile Database di Azure per PostgreSQL. Database di Azure per PostgreSQL supporta in modo nativo l'autenticazione di Microsoft Entra, in modo che possa accettare direttamente i token di accesso ottenuti usando le identità gestite per le risorse di Azure. Quando si crea una connessione a un database di Azure per PostgreSQL, si passa il token di accesso nel campo password.
Connettersi usando l'identità gestita in Python
Per un esempio di codice Python, vedere Avvio rapido: Usare Python per connettersi ed eseguire query sui dati in Database di Azure per PostgreSQL
Connettersi usando l'identità gestita in Java
Per un esempio di codice Java, vedere Avvio rapido: Usare Java e JDBC con Database di Azure per PostgreSQL.
Connettersi usando l'identità gestita in C#
Ecco un esempio di codice .NET che apre una connessione a un server flessibile Database di Azure per PostgreSQL usando un token di accesso. Questo codice deve essere eseguito nella macchina virtuale per usare l'identità gestita assegnata dal sistema per ottenere un token di accesso da Microsoft Entra ID. Sostituire i valori di HOST, USER (con <identity_name>) e 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}");
}
}
}
Compilare i segnaposto seguenti:
-
HOST: sostituireyour-server-name.postgres.database.azure.comcon il nome host del server. -
USER: sostituire<identity_name>con il nome dell'identità gestita. -
DATABASE: sostituireyour-database-namecon il nome del server flessibile Database di Azure per PostgreSQL. - Autenticazione di Microsoft Entra: il codice usa l'identità gestita assegnata dal sistema della macchina virtuale per recuperare un token di accesso dall'ID Microsoft Entra.
Quando si esegue questo comando, si ottiene un output simile al seguente:
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