Megosztás a következőn keresztül:


Csatlakozás felügyelt identitással az Azure Database for PostgreSQL-hez

A rendszer által hozzárendelt és a felhasználó által hozzárendelt felügyelt identitásokkal is hitelesítheti magát egy rugalmas Azure Database for PostgreSQL-kiszolgálópéldányon. Ez a cikk bemutatja, hogyan használhat rendszer által hozzárendelt felügyelt identitást egy Azure-beli virtuális géphez (VM) egy rugalmas Azure Database for PostgreSQL-kiszolgálópéldány eléréséhez. A felügyelt identitásokat az Azure automatikusan felügyeli, és lehetővé teszi a Microsoft Entra-hitelesítést támogató szolgáltatások hitelesítését anélkül, hogy hitelesítő adatokat kellene beszúrnia a kódba.

Megtudhatja, hogyan:

  • Adjon hozzáférést a virtuális gépnek egy rugalmas Azure Database for PostgreSQL-kiszolgálópéldányhoz.
  • Hozzon létre egy felhasználót az adatbázisban, amely a virtuális gép rendszer által hozzárendelt identitását jelöli.
  • Szerezze be a hozzáférési jogkivonatot a virtuálisgép-identitással, és használja egy rugalmas Azure Database for PostgreSQL-kiszolgálópéldány lekérdezéséhez.
  • Implementálja a jogkivonat-lekérést egy C# példaalkalmazásban.

Előfeltételek

Rendszer által hozzárendelt felügyelt identitás létrehozása a virtuális géphez

Az az vm identity assign with the identity assign command lehetővé teszi a rendszer által hozzárendelt identitást egy meglévő virtuális gép számára:

az vm identity assign -g myResourceGroup -n myVm

Kérje le a rendszer által hozzárendelt felügyelt identitás alkalmazásazonosítóját, amelyre a következő néhány lépésben szüksége lesz:

# Get the client ID (application ID) of the system-assigned managed identity

az ad sp list --display-name vm-name --query [*].appId --out tsv

Azure Database for PostgreSQL-felhasználó létrehozása a felügyelt identitáshoz

Most csatlakozzon Microsoft Entra rendszergazdai felhasználóként a rugalmas Azure Database for PostgreSQL-kiszolgálóadatbázishoz, és futtassa a következő SQL-utasításokat azon erőforrások nevére cserélve <identity_name> , amelyekhez rendszer által hozzárendelt felügyelt identitást hozott létre:

Vegye figyelembe , hogy pgaadauth_create_principal a Postgres-adatbázisban kell futnia.

select * from pgaadauth_create_principal('<identity_name>', false, false);

A siker a következőképpen néz ki:

    pgaadauth_create_principal
-----------------------------------
 Created role for "<identity_name>"
(1 row)

A Microsoft Entra ID-kompatibilis adatbázis-szerepkörök kezelésével kapcsolatos további információkért lásd: Microsoft Entra-szerepkörök kezelése az Azure Database for PostgreSQL-ben.

A felügyelt identitás mostantól hozzáféréssel rendelkezik, amikor az identitásnévvel szerepkörnévként, jelszóként pedig a Microsoft Entra-jogkivonattal hitelesíti az identitást.

Megjegyzés:

Ha a felügyelt identitás érvénytelen, a rendszer hibát ad vissza: ERROR: Could not validate AAD user <ObjectId> because its name is not found in the tenant. [...].

Ha a "Nincs függvény egyezés..." hibaüzenet jelenik meg, győződjön meg arról, hogy az postgres adatbázishoz csatlakozik, nem pedig egy másik, szintén létrehozott adatbázishoz.

A hozzáférési jogkivonat lekérése az Azure Instance Metadata szolgáltatásból

Az alkalmazás mostantól lekérhet egy hozzáférési jogkivonatot az Azure Instance Metadata szolgáltatásból, és használhatja az adatbázissal való hitelesítéshez.

Ez a jogkivonat-lekérés a következő paraméterekre HTTP irányuló kéréssel és átadással történikhttp://169.254.169.254/metadata/identity/oauth2/token:

  • api-version = 2018-02-01
  • resource = https://ossrdbms-aad.database.windows.net
  • client_id = CLIENT_ID (amelyet korábban lekért)

Egy mezőt tartalmazó access_token JSON-eredményt kap vissza – ez a hosszú szöveges érték a felügyelt identitás hozzáférési jogkivonata, amelyet jelszóként kell használnia az adatbázishoz való csatlakozáskor.

Tesztelési célokra a következő parancsokat futtathatja a rendszerhéjban.

Megjegyzés:

Vegye figyelembe, hogy a szükséges , curlés az jq ügyfél telepítve vanpsql.

# 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

Most már csatlakozik a korábban konfigurált adatbázishoz.

Csatlakozás felügyelt identitással

Ez a szakasz bemutatja, hogyan szerezhet be hozzáférési tokent egy virtuális gép felhasználó által hozzárendelt felügyelt identitásával, és hogyan használhatja azt egy rugalmas Azure Database for PostgreSQL-kiszolgálópéldány meghívásához. Az Azure Database for PostgreSQL natív módon támogatja a Microsoft Entra-hitelesítést, így közvetlenül elfogadhatja az Azure-erőforrásokhoz tartozó felügyelt identitásokkal beszerzett hozzáférési jogkivonatokat. Amikor kapcsolatot hoz létre egy Azure Database for PostgreSQL-hez, a jelszó mezőben adja át az access tokent.

Csatlakozás felügyelt identitással a Pythonban

Egy Python-kód példájáért tekintse meg a rövid útmutatót: Adatok csatlakoztatása és lekérdezése a Python használatával az Azure Database for PostgreSQL-ben

Csatlakozás felügyelt identitással Java-ban

Egy Java-kód példájáért tekintse meg a rövid útmutatót: Java és JDBC használata az Azure Database for PostgreSQL-lel

Csatlakozás felügyelt identitással a C-ben#

Íme egy .NET-kód példa egy rugalmas Azure Database for PostgreSQL-kiszolgálópéldányhoz való csatlakozás hozzáférési jogkivonat használatával történő megnyitására. Ennek a kódnak a virtuális gépen kell futnia ahhoz, hogy a rendszer által hozzárendelt felügyelt identitással szerezze be a hozzáférési jogkivonatot a Microsoft Entra-azonosítóból. Cserélje le a HOST, a USER (a <identity_name>) és DATABASEa .

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}");
        }
    }
}

A következő helyőrzőket kell kitöltenie:

  • Cserélje le a 'your-server-name.postgres.database.azure.com' részt a példánya hosztnevére.
  • FELHASZNÁLÓ: Cserélje le <a identity_name> a felügyelt identitás nevére.
  • DATABASE: Cserélje le az adatbázis nevét az Azure Database for PostgreSQL-példány nevére.
  • Microsoft Entra-hitelesítés: A kód a virtuális gép rendszer által hozzárendelt felügyelt identitásával kéri le a hozzáférési jogkivonatot a Microsoft Entra-azonosítóból.

Futtatáskor ez a parancs a következőhöz hasonló kimenetet ad:

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