Bagikan melalui


Dukungan Spring Cloud Azure PostgreSQL

Azure Database for PostgreSQL adalah layanan database relasional berdasarkan mesin database Postgres sumber terbuka. Ini adalah database yang dikelola sepenuhnya sebagai layanan yang dapat menangani beban kerja misi-kritis dengan performa yang dapat diprediksi, keamanan, ketersediaan tinggi, dan skalabilitas dinamis.

Dari versi 4.5.0, Spring Cloud Azure mendukung berbagai jenis kredensial untuk autentikasi ke Server Fleksibel Azure Database for PostgreSQL.

Versi PostgreSQL yang didukung

Untuk versi yang didukung, lihat Versi utama PostgreSQL yang Didukung di Azure Database for PostgreSQL - Server Fleksibel.

Fitur inti

Koneksi tanpa kata sandi

Koneksi tanpa kata sandi menggunakan autentikasi Microsoft Entra untuk menyambungkan ke layanan Azure tanpa menyimpan kredensial apa pun dalam aplikasi, file konfigurasinya, atau dalam variabel lingkungan. Autentikasi Microsoft Entra adalah mekanisme untuk menyambungkan ke Azure Database for PostgreSQL menggunakan identitas yang ditentukan dalam ID Microsoft Entra. Dengan autentikasi Microsoft Entra, Anda dapat mengelola identitas pengguna database dan layanan Microsoft lainnya di lokasi pusat, yang menyederhanakan manajemen izin.

Cara kerjanya

Spring Cloud Azure pertama-tama akan membangun salah satu jenis kredensial berikut tergantung pada konfigurasi autentikasi aplikasi:

  • ClientSecretCredential
  • ClientCertificateCredential
  • UsernamePasswordCredential
  • ManagedIdentityCredential
  • DefaultAzureCredential

Jika tidak ada jenis kredensial ini yang ditemukan, kredensial DefaultAzureCredential akan diperoleh dari properti aplikasi, variabel lingkungan, identitas terkelola, atau IDE. Untuk informasi selengkapnya, lihat autentikasi Spring Cloud Azure.

Diagram tingkat tinggi berikut ini meringkas cara kerja autentikasi menggunakan autentikasi kredensial OAuth dengan Azure Database for PostgreSQL. Panah menunjukkan jalur komunikasi.

diagram memperlihatkan autentikasi Microsoft Entra untuk PostgreSQL .

Konfigurasi

Spring Cloud Azure for PostgreSQL mendukung dua tingkat opsi konfigurasi berikut:

  1. Opsi konfigurasi autentikasi global credential dan profile dengan awalan spring.cloud.azure.

  2. Opsi konfigurasi umum Spring Cloud Azure for PostgreSQL.

Tabel berikut ini memperlihatkan opsi konfigurasi umum Spring Cloud Azure for PostgreSQL:

Nama Deskripsi
spring.datasource.azure.passwordless-enabled Apakah akan mengaktifkan koneksi tanpa kata sandi ke database Azure dengan menggunakan kredensial token Microsoft Entra OAuth2.
spring.datasource.azure.credential.client-certificate-password Kata sandi file sertifikat.
spring.datasource.azure.credential.client-certificate-path Jalur file sertifikat PEM yang akan digunakan saat melakukan autentikasi perwakilan layanan dengan Azure.
spring.datasource.azure.credential.client-id ID klien untuk digunakan saat melakukan autentikasi perwakilan layanan dengan Azure. Ini adalah properti warisan.
spring.datasource.azure.credential.client-secret Rahasia klien untuk digunakan saat melakukan autentikasi perwakilan layanan dengan Azure. Ini adalah properti warisan.
spring.datasource.azure.credential.managed-identity-enabled Apakah akan mengaktifkan identitas terkelola untuk mengautentikasi dengan Azure. Jika true dan client-id diatur, akan menggunakan ID klien sebagai ID klien identitas terkelola yang ditetapkan pengguna. Nilai defaultnya adalah false.
spring.datasource.azure.credential.password Kata sandi yang digunakan saat melakukan autentikasi nama pengguna/kata sandi dengan Azure.
spring.datasource.azure.credential.username Nama pengguna yang akan digunakan saat melakukan autentikasi nama pengguna/kata sandi dengan Azure.
spring.datasource.azure.profile.cloud-type Nama cloud Azure untuk disambungkan.
spring.datasource.azure.profile.environment.active-directory-endpoint Titik akhir Microsoft Entra untuk disambungkan.
spring.datasource.azure.profile.tenant-id ID Penyewa untuk sumber daya Azure. Nilai yang diizinkan untuk tenant-id adalah: common, organizations, consumers, atau ID penyewa.

Penyiapan dependensi

Tambahkan dependensi berikut ke proyek Anda. Ini akan secara otomatis menyertakan dependensi spring-boot-starter dalam proyek Anda secara transitif.

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

Nota

Koneksi tanpa kata sandi telah didukung sejak versi 4.5.0.

Ingatlah untuk menambahkan spring-cloud-azure-dependencies BOM bersama dengan dependensi di atas. Untuk informasi selengkapnya, lihat bagian Memulai panduan pengembang Spring Cloud Azure.

Penggunaan dasar

Bagian berikut menunjukkan skenario penggunaan aplikasi Spring Boot klasik.

Penting

Koneksi tanpa kata sandi menggunakan autentikasi Microsoft Entra. Untuk menggunakan autentikasi Microsoft Entra, Anda harus mengatur pengguna admin Microsoft Entra terlebih dahulu. Hanya pengguna admin Microsoft Entra yang dapat membuat dan mengaktifkan pengguna untuk autentikasi berbasis ID Microsoft Entra. Untuk informasi selengkapnya, lihat Menggunakan Spring Data JDBC dengan Azure Database for PostgreSQL.

Menyambungkan ke Azure PostgreSQL secara lokal tanpa kata sandi

  1. Untuk membuat pengguna dan memberikan izin, lihat bagian Membuat pengguna non-admin PostgreSQL dan memberikan izin bagian Menggunakan Spring Data JDBC dengan Azure Database for PostgreSQL.

  2. Konfigurasikan properti berikut dalam file application.yml Anda:

    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
    

Menyambungkan ke Azure PostgreSQL menggunakan perwakilan layanan

  1. Tetapkan peran ke perwakilan layanan:

    1. Buat skrip SQL yang disebut create_ad_user_sp.sql untuk membuat pengguna non-admin. Tambahkan konten berikut dan simpan secara lokal:

      Penting

      Pastikan <service-principal-name> sudah ada di penyewa Microsoft Entra Anda, atau Anda tidak akan dapat membuat pengguna non-admin.

      cat << EOF > create_ad_user_sp.sql
      select * from pgaadauth_create_principal('<service-principal-name>', false, false);
      EOF
      
    2. Gunakan perintah berikut untuk menjalankan skrip SQL untuk membuat pengguna non-admin Microsoft Entra:

      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. Sekarang gunakan perintah berikut untuk menghapus file skrip SQL sementara:

      rm create_ad_user_sp.sql
      
  2. Konfigurasikan properti berikut dalam file application.yml Anda:

    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
    

Nota

Nilai yang diizinkan untuk tenant-id adalah: common, organizations, consumers, atau ID penyewa. Untuk informasi selengkapnya tentang nilai-nilai ini, lihat bagian Menggunakan titik akhir yang salah (akun pribadi dan organisasi)Kesalahan AADSTS50020 - Akun pengguna dari penyedia identitas tidak ada di penyewa. Untuk informasi tentang mengonversi aplikasi penyewa tunggal Anda, lihat Mengonversi aplikasi penyewa tunggal ke multipenyewa di ID Microsoft Entra.

Menyambungkan ke Azure PostgreSQL dengan Identitas Terkelola di Azure Spring Apps

  1. Untuk mengaktifkan identitas terkelola, lihat Tetapkan identitas terkelola menggunakan portal Microsoft Azure bagian Memigrasikan aplikasi untuk menggunakan koneksi tanpa kata sandi dengan Azure Database for PostgreSQL.

  2. Untuk memberikan izin, lihat bagian Tetapkan peran ke identitas terkelolaMemigrasikan aplikasi untuk menggunakan koneksi tanpa kata sandi dengan Azure Database for PostgreSQL.

  3. Konfigurasikan properti berikut dalam file application.yml Anda:

    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
    

Sampel

Lihat repositori azure-spring-boot-samples di GitHub.