Aracılığıyla paylaş


Yönetilen kimlikle PostgreSQL için Azure Veritabanı'na bağlanma

PostgreSQL için Azure Veritabanı esnek sunucu örneğinde kimlik doğrulaması yapmak için hem sistem tarafından atanan hem de kullanıcı tarafından atanan yönetilen kimlikleri kullanabilirsiniz. Bu makalede, PostgreSQL için Azure Veritabanı esnek sunucu örneğine erişmek üzere Azure Sanal Makinesi (VM) için sistem tarafından atanan yönetilen kimliğin nasıl kullanılacağı gösterilmektedir. Yönetilen Kimlikler Azure tarafından otomatik olarak yönetilir ve kodunuza kimlik bilgileri eklemeye gerek kalmadan Microsoft Entra kimlik doğrulamasını destekleyen hizmetlerde kimlik doğrulaması yapmanıza olanak tanır.

Şunları yapmayı öğreneceksiniz:

  • Vm'nize PostgreSQL için Azure Veritabanı esnek sunucu örneğine erişim izni verin.
  • Veritabanında VM'nin sistem tarafından atanan kimliğini temsil eden bir kullanıcı oluşturun.
  • VM kimliğini kullanarak bir erişim belirteci alın ve bunu kullanarak PostgreSQL için Azure Veritabanı esnek sunucu örneğini sorgulayın.
  • C# örnek uygulamasında belirteç alma işlemini uygulayın.

Önkoşullar

VM'niz için sistem tarafından atanan yönetilen kimlik oluşturma

az vm identity assign komutunu kullanarak identity assign mevcut bir VM'ye sistem tarafından atanan kimliği etkinleştirir:

az vm identity assign -g myResourceGroup -n myVm

Sistem tarafından atanan yönetilen kimliğin uygulama kimliğini alın ve sonraki birkaç adımda ihtiyacınız olacak:

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

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

Yönetilen Kimliğiniz için Azure PostgreSQL Veritabanı Kullanıcısı Oluşturma

Şimdi PostgreSQL için Azure Veritabanı esnek sunucu veritabanınıza Microsoft Entra yönetici kullanıcısı olarak bağlanın ve aşağıdaki SQL deyimlerini çalıştırın ve yerine <identity_name> sistem tarafından atanan yönetilen kimliği oluşturduğunuz kaynakların adını yazın:

Not pgaadauth_create_principal Postgres veritabanında çalıştırılmalıdır.

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

Başarı şöyle görünür:

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

Microsoft Entra ID özellikli veritabanı rollerini yönetme hakkında daha fazla bilgi için bkz. PostgreSQL için Azure Veritabanı'nda Microsoft Entra rollerini yönetme.

Yönetilen kimliğin artık kimlik adı rol adı ve Microsoft Entra belirtecini parola olarak kimlik doğrulaması yaparken erişimi vardır.

Uyarı

Yönetilen kimlik geçerli değilse bir hata döndürülür: ERROR: Could not validate AAD user <ObjectId> because its name is not found in the tenant. [...].

"İşlev eşleşmiyor..." gibi bir hata görürseniz, oluşturduğunuz farklı bir veritabanına değil veritabanına bağlandığınızdan postgres emin olun.

Azure Örnek Meta Verileri hizmetinden erişim belirtecini alma

Uygulamanız artık Azure Instance Metadata hizmetinden bir erişim belirteci alabilir ve veritabanında kimlik doğrulaması için kullanabilir.

Bu belirteç alma işlemi, bir istekte HTTP bulunup http://169.254.169.254/metadata/identity/oauth2/token aşağıdaki parametreleri geçirerek gerçekleştirilir:

  • api-version = 2018-02-01
  • resource = https://ossrdbms-aad.database.windows.net
  • client_id = CLIENT_ID (daha önce aldığınız)

Alan içeren access_token bir JSON sonucu alırsınız. Bu uzun metin değeri, veritabanına bağlanırken parola olarak kullanmanız gereken Yönetilen Kimlik erişim belirtecidir.

Test amacıyla kabuğunuzda aşağıdaki komutları çalıştırabilirsiniz.

Uyarı

, ve curlistemcisinin jq yüklü olması gerektiğini psqlunutmayın.

# 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

Şimdi daha önce yapılandırdığınız veritabanına bağlısınız.

Yönetilen Kimlik kullanarak bağlanma

Bu bölümde, VM'nin kullanıcı tarafından atanan yönetilen kimliğini kullanarak erişim belirtecinin nasıl alındığı ve postgreSQL için Azure Veritabanı esnek sunucu örneğini çağırmak için nasıl kullanılacağı gösterilmektedir. PostgreSQL için Azure Veritabanı, Microsoft Entra kimlik doğrulamasını yerel olarak desteklediği için Azure kaynakları için yönetilen kimlikler kullanılarak elde edilen erişim belirteçlerini doğrudan kabul edebilir. PostgreSQL için Azure Veritabanı'na bağlantı oluştururken, erişim belirtecini parola alanına geçirirsiniz.

Python'da Yönetilen Kimlik kullanarak bağlanma

Python kodu örneği için Hızlı Başlangıç: PostgreSQL için Azure Veritabanı'na bağlanmak ve verileri sorgulamak için Python kullanma bölümüne bakın

Java'da Yönetilen Kimlik kullanarak bağlanma

Java kodu örneği için Hızlı Başlangıç: PostgreSQL için Azure Veritabanı ile Java ve JDBC kullanma bölümüne bakın

C'de Yönetilen Kimlik kullanarak bağlanma#

Aşağıda, bir erişim belirteci kullanarak PostgreSQL için Azure Veritabanı esnek sunucu örneğine bağlantı açmaya yönelik bir .NET kod örneği verilmiştir. Bu kod, Microsoft Entra Kimliği'nden erişim belirteci almak için sistem tarafından atanan yönetilen kimliği kullanmak için VM'de çalıştırılmalıdır. HOST, USER (ile <identity_name>) ve DATABASEdeğerlerini değiştirin.

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şağıdaki yer tutucuları doldurmanız gerekir:

  • HOST: your-server-name.postgres.database.azure.com yerine örneğinizin ana bilgisayar adını yazın.
  • KULLANICI: identity_name< yönetilen kimliğinizin adıyla değiştirin>.
  • DATABASE: veritabanınızın-adını PostgreSQL için Azure Veritabanı örneğinizin adıyla değiştirin.
  • Microsoft Entra Kimlik Doğrulaması: Kod, Microsoft Entra Kimliği'nden erişim belirteci getirmek için VM'nin sistem tarafından atanan yönetilen kimliğini kullanır.

Bu komut çalıştırıldığında şuna benzer bir çıkış verir:

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