Bagikan melalui


Menghubungkan dengan identitas terkelola ke Azure Database for PostgreSQL

Anda dapat menggunakan identitas terkelola yang ditetapkan sistem dan ditetapkan pengguna untuk mengautentikasi ke instans server fleksibel Azure Database for PostgreSQL. Artikel ini memperlihatkan kepada Anda cara menggunakan identitas terkelola yang ditetapkan sistem untuk Azure Virtual Machine (VM) untuk mengakses instans server fleksibel Azure Database for PostgreSQL. Identitas Terkelola dikelola secara otomatis oleh Azure dan memungkinkan Anda mengautentikasi ke layanan yang mendukung autentikasi Microsoft Entra tanpa perlu menyisipkan kredensial ke dalam kode Anda.

Anda akan mempelajari cara untuk:

  • Berikan akses VM Anda ke instans server fleksibel Azure Database for PostgreSQL.
  • Buat pengguna dalam database yang mewakili identitas yang ditetapkan sistem VM.
  • Dapatkan token akses menggunakan identitas VM dan gunakan untuk mengkueri instans server fleksibel Azure Database for PostgreSQL.
  • Terapkan pengambilan token dalam aplikasi contoh C#.

Prasyarat

  • Jika Anda tidak terbiasa dengan fitur identitas terkelola untuk sumber daya Azure, lihat gambaran umum ini. Jika Anda tidak memiliki akun Azure, daftar untuk akun gratis sebelum melanjutkan.
  • Untuk melakukan pembuatan sumber daya dan manajemen peran yang diperlukan, akun Anda memerlukan izin "Pemilik" pada cakupan yang sesuai (grup langganan atau sumber daya Anda). Jika Anda memerlukan bantuan terkait penetapan peran, lihat Menetapkan peran Azure untuk mengelola akses ke sumber daya langganan Azure Anda.
  • Anda memerlukan Azure VM (misalnya, menjalankan Ubuntu Linux) yang ingin Anda gunakan untuk mengakses database Anda menggunakan Identitas Terkelola
  • Anda memerlukan instans server fleksibel Azure Database for PostgreSQL yang memiliki autentikasi Microsoft Entra yang dikonfigurasi
  • Untuk mengikuti contoh C#, pertama, selesaikan panduan tentang cara Terhubung dengan C#

Membuat identitas terkelola yang ditetapkan sistem untuk VM Anda

Gunakan az vm identity assign dengan identity assign perintah memungkinkan identitas yang ditetapkan sistem ke VM yang ada:

az vm identity assign -g myResourceGroup -n myVm

Ambil ID aplikasi untuk identitas terkelola yang ditetapkan sistem, yang Anda butuhkan dalam beberapa langkah berikutnya:

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

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

Buat pengguna di Azure Database for PostgreSQL untuk Identitas Terkelola Anda

Sekarang, sambungkan sebagai pengguna administrator Microsoft Entra ke database server fleksibel Azure Database for PostgreSQL Anda, dan jalankan pernyataan SQL berikut, mengganti <identity_name> dengan nama sumber daya tempat Anda membuat identitas terkelola yang ditetapkan sistem:

Perhatikan pgaadauth_create_principal harus dijalankan pada database Postgres.

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

Keberhasilan terlihat seperti:

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

Untuk informasi selengkapnya tentang mengelola peran database yang diaktifkan ID Microsoft Entra, lihat Mengelola peran Microsoft Entra di Azure Database for PostgreSQL.

Identitas terkelola sekarang memiliki akses saat mengautentikasi dengan nama identitas sebagai nama peran dan token Microsoft Entra sebagai kata sandi.

Nota

Jika identitas terkelola tidak valid, kesalahan dikembalikan: ERROR: Could not validate AAD user <ObjectId> because its name is not found in the tenant. [...].

Jika Anda melihat kesalahan seperti "Tidak ada fungsi yang cocok...", pastikan Anda menyambungkan ke postgres database, bukan database lain yang juga Anda buat.

Mengambil token akses dari layanan Metadata Instans Azure

Aplikasi Anda sekarang dapat mengambil token akses dari layanan Metadata Instans Azure dan menggunakannya untuk mengautentikasi dengan database.

Pengambilan token ini dilakukan dengan membuat HTTP permintaan ke http://169.254.169.254/metadata/identity/oauth2/token dan meneruskan parameter berikut:

  • api-version = 2018-02-01
  • resource = https://ossrdbms-aad.database.windows.net
  • client_id = CLIENT_ID (yang Anda ambil sebelumnya)

Anda mendapatkan kembali hasil JSON yang access_token berisi bidang - nilai teks panjang ini adalah token akses Identitas Terkelola yang harus Anda gunakan sebagai kata sandi saat menyambungkan ke database.

Untuk tujuan pengujian, Anda dapat menjalankan perintah berikut di shell Anda.

Nota

Perhatikan bahwa Anda memerlukan curl, jq, dan klien terinstal 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

Anda sekarang tersambung ke database yang Anda konfigurasi sebelumnya.

Menyambungkan menggunakan Identitas Terkelola

Bagian ini menunjukkan cara mendapatkan token akses menggunakan identitas terkelola yang ditetapkan pengguna VM dan menggunakannya untuk memanggil instans server fleksibel Azure Database for PostgreSQL. Azure Database for PostgreSQL secara asli mendukung autentikasi Microsoft Entra, sehingga dapat langsung menerima token akses yang diperoleh menggunakan identitas terkelola untuk sumber daya Azure. Saat membuat koneksi ke Azure Database for PostgreSQL, Anda meneruskan token akses di bidang kata sandi.

Menyambungkan menggunakan Identitas Terkelola di Python

Untuk contoh kode Python, lihat Mulai Cepat: Menggunakan Python untuk menyambungkan dan mengkueri data di Azure Database for PostgreSQL

Menyambungkan menggunakan Identitas Terkelola di Java

Untuk contoh kode Java, lihat Mulai Cepat: Menggunakan Java dan JDBC dengan Azure Database for PostgreSQL

Menyambungkan menggunakan Identitas Terkelola di C#

Berikut adalah contoh kode .NET untuk membuka koneksi ke instans server fleksibel Azure Database for PostgreSQL menggunakan token akses. Kode ini harus berjalan pada VM untuk menggunakan identitas terkelola yang ditetapkan sistem untuk mendapatkan token akses dari ID Microsoft Entra. Ganti nilai HOST, USER (dengan <identity_name>), dan 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}");
        }
    }
}

Anda harus mengisi tempat penampung berikut:

  • HOST: Ganti your-server-name.postgres.database.azure.com dengan nama host instans Anda.
  • PENGGUNA: Ganti <identity_name> dengan nama identitas terkelola Anda.
  • DATABASE: Ganti nama database-Anda dengan nama instans Azure Database for PostgreSQL Anda.
  • Autentikasi Microsoft Entra: Kode menggunakan identitas terkelola yang ditetapkan sistem dari VM untuk mengambil token akses dari ID Microsoft Entra.

Saat dijalankan, perintah ini memberikan output seperti ini:

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