Spring Cloud Azure PostgreSQL desteği

PostgreSQL için Azure Veritabanı, açık kaynak Postgres veritabanı altyapısını temel alan ilişkisel bir veritabanı hizmetidir. Görev açısından kritik iş yüklerini tahmin edilebilir performans, güvenlik, yüksek kullanılabilirlik ve dinamik ölçeklenebilirlikle işleyebilen, tam olarak yönetilen bir hizmet olarak veritabanıdır.

4.5.0sürümünden Spring Cloud Azure, PostgreSQL için Azure Veritabanı Esnek Sunucusu'nda kimlik doğrulaması için çeşitli kimlik bilgileri türlerini destekler.

Desteklenen PostgreSQL sürümü

Desteklenen sürümler için bkz. PostgreSQL için Azure Veritabanı - Esnek Sunucu'nde Desteklenen PostgreSQL ana sürümleri.

Temel özellikler

Parolasız bağlantı

Parolasız bağlantı, uygulamada, yapılandırma dosyalarında veya ortam değişkenlerinde hiçbir kimlik bilgisi depolamadan Azure hizmetlerine bağlanmak için Microsoft Entra kimlik doğrulamasını kullanır. Microsoft Entra kimlik doğrulaması, Microsoft Entra Kimliği'nde tanımlanan kimlikleri kullanarak PostgreSQL için Azure Veritabanı'na bağlanmaya yönelik bir mekanizmadır. Microsoft Entra kimlik doğrulaması ile veritabanı kullanıcı kimliklerini ve diğer Microsoft hizmetlerini merkezi bir konumda yönetebilirsiniz ve bu da izin yönetimini basitleştirir.

Nasıl çalışır?

Spring Cloud Azure, uygulama kimlik doğrulaması yapılandırmasına bağlı olarak ilk olarak aşağıdaki kimlik bilgileri türlerinden birini oluşturur:

  • ClientSecretCredential
  • ClientCertificateCredential
  • UsernamePasswordCredential
  • ManagedIdentityCredential
  • DefaultAzureCredential

Bu tür kimlik bilgilerinin hiçbiri bulunmazsa, DefaultAzureCredential kimlik bilgileri uygulama özelliklerinden, ortam değişkenlerinden, yönetilen kimliklerden veya IDE'den alınır. Daha fazla bilgi için bkz. Spring Cloud Azure kimlik doğrulaması.

Aşağıdaki üst düzey diyagramda, PostgreSQL için Azure Veritabanı ile OAuth kimlik bilgisi kimlik doğrulaması kullanılarak kimlik doğrulamasının nasıl çalıştığı özetlemektedir. Oklar iletişim yollarını gösterir.

PostgreSQL için Microsoft Entra kimlik doğrulamasını gösteren Diyagramı.

Konfigürasyon

PostgreSQL için Spring Cloud Azure aşağıdaki iki yapılandırma seçeneğini destekler:

  1. credentialön ekleriyle profile ve spring.cloud.azure genel kimlik doğrulama yapılandırma seçenekleri.

  2. PostgreSQL için Spring Cloud Azure yaygın yapılandırma seçenekleri.

Aşağıdaki tabloda PostgreSQL için Spring Cloud Azure ortak yapılandırma seçenekleri gösterilmektedir:

Ad Açıklama
spring.datasource.azure.passwordless-enabled OAuth2 Microsoft Entra belirteci kimlik bilgilerini kullanarak Azure veritabanlarına parolasız bağlantıların etkinleştirilip etkinleştirilmeyileceği.
spring.datasource.azure.credential.client-certificate-password Sertifika dosyasının parolası.
spring.datasource.azure.credential.client-certificate-path Azure ile hizmet sorumlusu kimlik doğrulaması gerçekleştirirken kullanılacak PEM sertifika dosyasının yolu.
spring.datasource.azure.credential.client-id Azure ile hizmet sorumlusu kimlik doğrulaması gerçekleştirirken kullanılacak istemci kimliği. Bu eski bir özelliktir.
spring.datasource.azure.credential.client-secret Azure ile hizmet sorumlusu kimlik doğrulaması gerçekleştirirken kullanılacak istemci gizli dizisi. Bu eski bir özelliktir.
spring.datasource.azure.credential.managed-identity-enabled Yönetilen kimliğin Azure ile kimlik doğrulaması yapmasının etkinleştirilip etkinleştirilmeyileceği. true ve client-id ayarlanırsa, kullanıcı tarafından atanan yönetilen kimlik istemci kimliği olarak istemci kimliğini kullanır. Varsayılan değer false.
spring.datasource.azure.credential.password Azure ile kullanıcı adı/parola kimlik doğrulaması gerçekleştirirken kullanılacak parola.
spring.datasource.azure.credential.username Azure ile kullanıcı adı/parola kimlik doğrulaması gerçekleştirirken kullanılacak kullanıcı adı.
spring.datasource.azure.profile.cloud-type Bağlanacak Azure bulutunun adı.
spring.datasource.azure.profile.environment.active-directory-endpoint Bağlanacak Microsoft Entra uç noktası.
spring.datasource.azure.profile.tenant-id Azure kaynakları için kiracı kimliği. tenant-id için izin verilen değerler şunlardır: common, organizations, consumersveya kiracı kimliği.

Bağımlılık kurulumu

Projenize aşağıdaki bağımlılığı ekleyin. Bu, projenizdeki spring-boot-starter bağımlılığını geçişli olarak otomatik olarak içerir.

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter-jdbc-postgresql</artifactId>
</dependency>

Not

4.5.0sürümünden bu yana parolasız bağlantılar desteklenmektedir.

Ürün reçetesi spring-cloud-azure-dependencies yukarıdaki bağımlılıkla birlikte eklemeyi unutmayın. Daha fazla bilgi için Spring Cloud Azure geliştirici kılavuzuBaşlarken bölümüne bakın.

Temel kullanım

Aşağıdaki bölümlerde klasik Spring Boot uygulaması kullanım senaryoları gösterilmektedir.

Önemli

Parolasız bağlantı Microsoft Entra kimlik doğrulamasını kullanır. Microsoft Entra kimlik doğrulamasını kullanmak için önce Microsoft Entra yönetici kullanıcısını ayarlamanız gerekir. Yalnızca bir Microsoft Entra yönetici kullanıcısı, Microsoft Entra Id tabanlı kimlik doğrulaması için kullanıcı oluşturabilir ve etkinleştirebilir. Daha fazla bilgi için bkz. Spring Data JDBC'yi PostgreSQL için Azure Veritabanı ile kullanma.

Azure PostgreSQL'e parola olmadan yerel olarak bağlanma

  1. Kullanıcı oluşturmak ve izin vermek için, PostgreSQL için Azure Veritabanı ile Spring Data JDBC kullanmaPostgreSQL yönetici olmayan kullanıcı oluşturma ve izin verme bölümüne bakın.

  2. application.yml dosyanızda aşağıdaki özellikleri yapılandırın:

    spring:
      datasource:
        url: jdbc:postgresql://${AZ_DATABASE_SERVER_NAME}.postgres.database.azure.com:5432/${AZ_DATABASE_NAME}?sslmode=require
        username: ${AZ_POSTGRESQL_AD_NON_ADMIN_USERNAME}
        azure:
          passwordless-enabled: true
    

Hizmet sorumlusu kullanarak Azure PostgreSQL'e bağlanma

  1. Hizmet sorumlusuna rol atayın:

    1. Yönetici olmayan kullanıcı oluşturmak için create_ad_user_sp.sql adlı bir SQL betiği oluşturun. Aşağıdaki içeriği ekleyin ve yerel olarak kaydedin:

      Önemli

      Microsoft Entra kiracınızda <service-principal-name> olduğundan emin olun; aksi halde yönetici olmayan kullanıcıyı oluşturamazsınız.

      cat << EOF > create_ad_user_sp.sql
      select * from pgaadauth_create_principal('<service-principal-name>', false, false);
      EOF
      
    2. Microsoft Entra yönetici olmayan kullanıcıyı oluşturmak üzere SQL betiğini çalıştırmak için aşağıdaki komutu kullanın:

      psql "host=$AZ_DATABASE_SERVER_NAME.postgres.database.azure.com user=$CURRENT_USERNAME@$AZ_DATABASE_SERVER_NAME dbname=postgres port=5432 password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken) sslmode=require" < create_ad_user_sp.sql
      
    3. Şimdi geçici SQL betik dosyasını kaldırmak için aşağıdaki komutu kullanın:

      rm create_ad_user_sp.sql
      
  2. application.yml dosyanızda aşağıdaki özellikleri yapılandırın:

    spring:
      cloud:
        azure:
          credential:
            client-id: ${AZURE_CLIENT_ID}
            client-secret: ${AZURE_CLIENT_SECRET}
          profile:
            tenant-id: <tenant>
      datasource:
        url: jdbc:postgresql://${AZ_DATABASE_SERVER_NAME}.postgres.database.azure.com:5432/${AZ_DATABASE_NAME}?sslmode=require
        username: ${AZ_POSTGRESQL_AD_SP_USERNAME}
        azure:
          passwordless-enabled: true
    

Not

tenant-id için izin verilen değerler şunlardır: common, organizations, consumersveya kiracı kimliği. Bu değerler hakkında daha fazla bilgi için, Hata AADSTS50020 - Kimlik sağlayıcısından kullanıcı hesabı kiracımevcut değil bölümünün Yanlış uç nokta (kişisel ve kuruluş hesapları) kullanıldı bölümüne bakın. Tek kiracılı uygulamanızı dönüştürme hakkında bilgi için bkz. Tek kiracılı uygulamayı Microsoft Entra IDüzerinde çok kiracılıya dönüştürme.

Azure Spring Apps'te Yönetilen Kimlik ile Azure PostgreSQL'e bağlanma

  1. Yönetilen kimliği etkinleştirmek için, PostgreSQL için Azure Veritabanıile parolasız bağlantılar kullanmak üzere uygulama geçirme Azure portalını kullanarak yönetilen kimliği atama bölümüne bakın.

  2. İzinler vermek için, PostgreSQL için Azure Veritabanı ile parolasız bağlantılar kullanmak üzere uygulama geçirme yönetilen kimliğe rol atama bölümüne bakın.

  3. application.yml dosyanızda aşağıdaki özellikleri yapılandırın:

    spring:
      cloud:
        azure:
          credential:
            managed-identity-enabled: true
            client-id: ${AZURE_CLIENT_ID}
      datasource:
        url: jdbc:postgresql://${AZ_DATABASE_SERVER_NAME}.postgres.database.azure.com:5432/${AZ_DATABASE_NAME}?sslmode=require
        username: ${AZ_POSTGRESQL_AD_MI_USERNAME}
        azure:
          passwordless-enabled: true
    

Örnekleri

GitHub'daki azure-spring-boot-samples depoya bakın.