Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini menjelaskan cara bermigrasi dari metode autentikasi tradisional ke koneksi tanpa kata sandi yang lebih aman dengan Azure Database for PostgreSQL.
Permintaan aplikasi ke Azure Database for PostgreSQL harus diautentikasi. Azure Database for PostgreSQL menyediakan beberapa cara berbeda agar aplikasi dapat terhubung dengan aman. Salah satu caranya adalah dengan menggunakan kata sandi. Namun, Anda harus memprioritaskan koneksi tanpa kata sandi di aplikasi Anda jika memungkinkan.
Membandingkan opsi autentikasi
Saat aplikasi mengautentikasi dengan Azure Database for PostgreSQL, aplikasi menyediakan pasangan nama pengguna dan kata sandi untuk menyambungkan database. Bergantung pada tempat identitas disimpan, ada dua jenis autentikasi: Autentikasi Microsoft Entra dan autentikasi PostgreSQL.
Microsoft Entra otentikasi
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.
Menggunakan ID Microsoft Entra untuk autentikasi memberikan manfaat berikut:
- Autentikasi pengguna di seluruh Layanan Azure dengan cara yang seragam.
- Manajemen kebijakan kata sandi dan rotasi kata sandi di satu tempat.
- Beberapa bentuk autentikasi yang didukung oleh ID Microsoft Entra, yang dapat menghilangkan kebutuhan untuk menyimpan kata sandi.
- Pelanggan dapat mengelola izin database menggunakan grup eksternal (MICROSOFT Entra ID).
- Autentikasi Microsoft Entra menggunakan pengguna database PostgreSQL untuk mengautentikasi identitas di tingkat database.
- Dukungan autentikasi berbasis token untuk aplikasi yang terhubung ke Azure Database for PostgreSQL.
Autentikasi PostgreSQL
Anda dapat membuat akun di PostgreSQL. Jika Anda memilih untuk menggunakan kata sandi sebagai kredensial untuk akun, kredensial ini akan disimpan dalam user tabel. Karena kata sandi ini disimpan di PostgreSQL, Anda perlu mengelola rotasi kata sandi sendiri.
Meskipun dimungkinkan untuk terhubung ke Azure Database for PostgreSQL dengan kata sandi, Anda harus menggunakannya dengan hati-hati. Anda harus rajin untuk tidak pernah mengekspos kata sandi di lokasi yang tidak aman. Siapa pun yang mendapatkan akses ke kata sandi dapat mengautentikasi. Misalnya, ada risiko bahwa pengguna berbahaya dapat mengakses aplikasi jika string koneksi secara tidak sengaja diperiksa ke kontrol sumber, dikirim melalui email yang tidak aman, ditempelkan ke obrolan yang salah, atau dilihat oleh seseorang yang seharusnya tidak memiliki izin. Sebagai gantinya, pertimbangkan untuk memperbarui aplikasi Anda untuk menggunakan koneksi tanpa kata sandi.
Memperkenalkan koneksi tanpa kata sandi
Dengan koneksi tanpa kata sandi, Anda dapat terhubung ke layanan Azure tanpa menyimpan kredensial apa pun dalam kode aplikasi, file konfigurasinya, atau dalam variabel lingkungan.
Banyak layanan Azure mendukung koneksi tanpa kata sandi, misalnya melalui Azure Managed Identity. Teknik ini menyediakan fitur keamanan kuat yang dapat Anda terapkan menggunakan DefaultAzureCredential dari pustaka klien Azure Identity. Dalam tutorial ini, Anda akan mempelajari cara memperbarui aplikasi yang ada untuk digunakan DefaultAzureCredential alih-alih alternatif seperti string koneksi.
DefaultAzureCredential mendukung beberapa metode autentikasi dan secara otomatis menentukan mana yang harus digunakan saat runtime. Pendekatan ini memungkinkan aplikasi Anda menggunakan metode autentikasi yang berbeda di lingkungan yang berbeda (pengembangan lokal vs. produksi) tanpa menerapkan kode khusus lingkungan.
Urutan dan lokasi tempat DefaultAzureCredential pencarian kredensial dapat ditemukan di gambaran umum pustaka Azure Identity. Misalnya, saat bekerja secara lokal, DefaultAzureCredential umumnya akan mengautentikasi menggunakan akun yang digunakan pengembang untuk masuk ke Visual Studio. Saat aplikasi disebarkan ke Azure, DefaultAzureCredential akan secara otomatis beralih untuk menggunakan identitas terkelola. Tidak diperlukan perubahan kode untuk transisi ini.
Untuk memastikan bahwa koneksi tanpa kata sandi, Anda harus mempertimbangkan pengembangan lokal dan lingkungan produksi. Jika string koneksi diperlukan di salah satu tempat, aplikasi tidak tanpa kata sandi.
Di lingkungan pengembangan lokal, Anda dapat mengautentikasi dengan plugin Azure CLI, Azure PowerShell, Visual Studio, atau Azure untuk Visual Studio Code atau IntelliJ. Dalam hal ini, Anda dapat menggunakan kredensial tersebut di aplikasi Anda alih-alih mengonfigurasi properti.
Saat Anda menyebarkan aplikasi ke lingkungan hosting Azure, seperti komputer virtual, Anda dapat menetapkan identitas terkelola di lingkungan tersebut. Kemudian, Anda tidak perlu memberikan kredensial untuk menyambungkan ke layanan Azure.
Nota
Identitas terkelola menyediakan identitas keamanan untuk mewakili aplikasi atau layanan. Identitas dikelola oleh platform Azure dan tidak mengharuskan Anda untuk menyediakan atau memutar rahasia apa pun. Anda dapat membaca selengkapnya tentang identitas terkelola dalam dokumentasi gambaran umum .
Memigrasikan aplikasi yang ada untuk menggunakan koneksi tanpa kata sandi
Langkah-langkah berikut menjelaskan cara memigrasikan aplikasi yang ada untuk menggunakan koneksi tanpa kata sandi alih-alih solusi berbasis kata sandi.
0) Menyiapkan lingkungan kerja
Pertama, gunakan perintah berikut untuk menyiapkan beberapa variabel lingkungan.
export AZ_RESOURCE_GROUP=<YOUR_RESOURCE_GROUP>
export AZ_DATABASE_SERVER_NAME=<YOUR_DATABASE_SERVER_NAME>
export AZ_DATABASE_NAME=demo
export AZ_POSTGRESQL_AD_NON_ADMIN_USERNAME=<YOUR_AZURE_AD_NON_ADMIN_USER_DISPLAY_NAME>
export AZ_LOCAL_IP_ADDRESS=<YOUR_LOCAL_IP_ADDRESS>
export CURRENT_USERNAME=$(az ad signed-in-user show --query userPrincipalName --output tsv)
Ganti tempat penampung dengan nilai berikut, yang digunakan di seluruh artikel ini:
-
<YOUR_RESOURCE_GROUP>: Nama grup sumber daya tempat sumber daya Anda berada. -
<YOUR_DATABASE_SERVER_NAME>: Nama server PostgreSQL Anda. Ini harus unik di seluruh Azure. -
<YOUR_AZURE_AD_NON_ADMIN_USER_DISPLAY_NAME>: Nama tampilan pengguna non-admin Microsoft Entra Anda. Pastikan nama tersebut adalah pengguna yang valid di penyewa Microsoft Entra Anda. -
<YOUR_LOCAL_IP_ADDRESS>: Alamat IP komputer lokal Anda, tempat Anda akan menjalankan aplikasi Spring Boot Anda. Salah satu cara mudah untuk menemukannya adalah dengan membuka whatismyip.akamai.com.
1) Mengonfigurasi Azure Database for PostgreSQL
1.1) Aktifkan autentikasi berbasis ID Microsoft Entra
Untuk menggunakan akses ID Microsoft Entra dengan Azure Database for PostgreSQL, Anda harus mengatur pengguna admin Microsoft Entra terlebih dahulu. Hanya pengguna Admin Microsoft Entra yang dapat membuat/mengaktifkan pengguna untuk autentikasi berbasis ID Microsoft Entra.
Untuk menyiapkan administrator Microsoft Entra setelah membuat server, ikuti langkah-langkah dalam Mengelola peran Microsoft Entra di Azure Database for PostgreSQL - Server Fleksibel.
Nota
Server Fleksibel PostgreSQL dapat membuat beberapa administrator Microsoft Entra.
2) Mengonfigurasi Azure Database for PostgreSQL untuk pengembangan lokal
2.1) Mengonfigurasi aturan firewall untuk IP lokal
Instans Azure Database for PostgreSQL diamankan secara default. Mereka memiliki firewall yang tidak mengizinkan koneksi masuk apa pun. Agar dapat menggunakan database, Anda perlu menambahkan aturan firewall yang akan memungkinkan alamat IP lokal mengakses server database.
Karena Anda mengonfigurasi alamat IP lokal di awal artikel ini, Anda dapat membuka firewall server dengan menjalankan perintah berikut:
az postgres flexible-server firewall-rule create \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_DATABASE_SERVER_NAME \
--rule-name $AZ_DATABASE_SERVER_NAME-database-allow-local-ip \
--start-ip-address $AZ_LOCAL_IP_ADDRESS \
--end-ip-address $AZ_LOCAL_IP_ADDRESS \
--output tsv
Jika Anda menyambungkan ke server PostgreSQL dari Subsistem Windows untuk Linux (WSL) di komputer Windows, Anda perlu menambahkan ID host WSL ke firewall Anda.
Dapatkan alamat IP komputer host Anda dengan menjalankan perintah berikut di WSL:
cat /etc/resolv.conf
Salin alamat IP dengan mengikuti istilah nameserver, lalu gunakan perintah berikut untuk mengatur variabel lingkungan untuk Alamat IP WSL:
export AZ_WSL_IP_ADDRESS=<the-copied-IP-address>
Kemudian, gunakan perintah berikut untuk membuka firewall server ke aplikasi berbasis WSL Anda:
az postgres flexible-server firewall-rule create \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_DATABASE_SERVER_NAME \
--rule-name $AZ_DATABASE_SERVER_NAME-database-allow-local-ip \
--start-ip-address $AZ_WSL_IP_ADDRESS \
--end-ip-address $AZ_WSL_IP_ADDRESS \
--output tsv
2.2) Membuat pengguna non-admin PostgreSQL dan memberikan izin
Selanjutnya, buat pengguna Microsoft Entra non-admin dan berikan semua izin pada database ke $AZ_DATABASE_NAME dalamnya. Anda dapat mengubah nama $AZ_DATABASE_NAME database agar sesuai dengan kebutuhan Anda.
Buat skrip SQL yang disebut create_ad_user_local.sql untuk membuat pengguna non-admin. Tambahkan konten berikut dan simpan secara lokal:
cat << EOF > create_ad_user_local.sql
select * from pgaadauth_create_principal('$AZ_POSTGRESQL_AD_NON_ADMIN_USERNAME', false, false);
EOF
Kemudian, 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 dbname=postgres port=5432 password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken) sslmode=require" < create_ad_user_local.sql
Sekarang gunakan perintah berikut untuk menghapus file skrip SQL sementara:
rm create_ad_user_local.sql
Nota
Anda dapat membaca informasi selengkapnya tentang membuat pengguna PostgreSQL di Membuat pengguna di Azure Database for PostgreSQL.
3) Masuk dan migrasikan kode aplikasi untuk menggunakan koneksi tanpa kata sandi
Untuk pengembangan lokal, pastikan Anda diautentikasi dengan akun Microsoft Entra yang sama dengan yang Anda tetapkan perannya di PostgreSQL Anda. Anda dapat mengautentikasi melalui Azure CLI, Visual Studio, Azure PowerShell, atau alat lain seperti IntelliJ.
Masuk ke Azure melalui Azure CLI dengan menggunakan perintah berikut:
az login
Selanjutnya, gunakan langkah-langkah berikut untuk memperbarui kode Anda untuk menggunakan koneksi tanpa kata sandi. Meskipun secara konseptual mirip, setiap bahasa menggunakan detail implementasi yang berbeda.
Di dalam proyek Anda, tambahkan referensi berikut ke
azure-identity-extensionspaket. Pustaka ini berisi semua entitas yang diperlukan untuk menerapkan koneksi tanpa kata sandi.<dependency> <groupId>com.azure</groupId> <artifactId>azure-identity-extensions</artifactId> <version>1.0.0</version> </dependency>Aktifkan plugin autentikasi Azure PostgreSQL di URL JDBC. Identifikasi lokasi dalam kode Anda yang saat ini membuat
java.sql.Connectionuntuk menyambungkan ke Azure Database for PostgreSQL. Perbaruiurldanuserdi file application.properties Anda agar sesuai dengan nilai berikut:url=jdbc:postgresql://$AZ_DATABASE_SERVER_NAME.postgres.database.azure.com:5432/$AZ_DATABASE_NAME?sslmode=require&authenticationPluginClassName=com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin user=$AZ_POSTGRESQL_AD_NON_ADMIN_USERNAME$AZ_POSTGRESQL_AD_NON_ADMIN_USERNAMEGanti dan dua$AZ_DATABASE_SERVER_NAMEvariabel dengan nilai yang Anda konfigurasi di awal artikel ini.
Menjalankan aplikasi secara lokal
Setelah membuat perubahan kode ini, jalankan aplikasi Anda secara lokal. Konfigurasi baru harus mengambil kredensial lokal Anda jika Anda masuk ke IDE atau alat baris perintah yang kompatibel, seperti Azure CLI, Visual Studio, atau IntelliJ. Peran yang Anda tetapkan untuk pengguna dev lokal Anda di Azure akan memungkinkan aplikasi Anda terhubung ke layanan Azure secara lokal.
4) Mengonfigurasi lingkungan hosting Azure
Setelah aplikasi Anda dikonfigurasi untuk menggunakan koneksi tanpa kata sandi dan berjalan secara lokal, kode yang sama dapat mengautentikasi ke layanan Azure setelah disebarkan ke Azure. Misalnya, aplikasi yang disebarkan ke instans Azure App Service yang memiliki identitas terkelola yang ditetapkan dapat tersambung ke Azure Storage.
Di bagian ini, Anda akan menjalankan dua langkah untuk memungkinkan aplikasi Anda berjalan di lingkungan hosting Azure dengan cara tanpa kata sandi:
- Tetapkan identitas terkelola untuk lingkungan hosting Azure Anda.
- Tetapkan peran ke identitas terkelola.
Nota
Azure juga menyediakan Konektor Layanan, yang dapat membantu Anda menghubungkan layanan hosting Anda dengan PostgreSQL. Dengan Konektor Layanan untuk mengonfigurasi lingkungan hosting Anda, Anda dapat menghilangkan langkah menetapkan peran ke identitas terkelola Anda karena Konektor Layanan akan melakukannya untuk Anda. Bagian berikut menjelaskan cara mengonfigurasi lingkungan hosting Azure Anda dengan dua cara: satu melalui Konektor Layanan dan yang lainnya dengan mengonfigurasi setiap lingkungan hosting secara langsung.
Penting
Perintah Konektor Layanan memerlukan Azure CLI 2.41.0 atau yang lebih tinggi.
Menetapkan identitas terkelola menggunakan portal Microsoft Azure
Langkah-langkah berikut menunjukkan kepada Anda cara menetapkan identitas terkelola yang ditetapkan sistem untuk berbagai layanan hosting web. Identitas terkelola dapat terhubung dengan aman ke Layanan Azure lainnya menggunakan konfigurasi aplikasi yang Anda siapkan sebelumnya.
- Layanan Aplikasi
- Konektor Layanan
- Aplikasi Kontainer
- Azure Spring Apps
- Mesin Virtual
- AKS
Pada halaman gambaran umum utama instans Azure App Service Anda, pilih Identitas dari panel navigasi.
Pada tab Sistem yang ditetapkan , pastikan untuk mengatur bidang Status ke aktif. Identitas yang ditetapkan sistem dikelola oleh Azure secara internal dan menangani tugas administratif untuk Anda. Detail dan ID identitas tidak pernah terekspos dalam kode Anda.
Anda juga dapat menetapkan identitas terkelola di lingkungan hosting Azure dengan menggunakan Azure CLI.
- Layanan Aplikasi
- Konektor Layanan
- Aplikasi Kontainer
- Azure Spring Apps
- Mesin Virtual
- AKS
Anda dapat menetapkan identitas terkelola ke instans Azure App Service dengan perintah az webapp identity assign , seperti yang ditunjukkan dalam contoh berikut:
export AZ_MI_OBJECT_ID=$(az webapp identity assign \
--resource-group $AZ_RESOURCE_GROUP \
--name <service-instance-name> \
--query principalId \
--output tsv)
Menetapkan peran ke identitas terkelola
Selanjutnya, berikan izin ke identitas terkelola yang Anda tetapkan untuk mengakses instans PostgreSQL Anda.
Jika Anda menyambungkan layanan menggunakan Konektor Layanan, perintah langkah sebelumnya sudah menetapkan peran, sehingga Anda dapat melewati langkah ini.
Menguji aplikasi
Sebelum menyebarkan aplikasi ke lingkungan hosting, Anda perlu membuat satu perubahan lagi pada kode karena aplikasi akan terhubung ke PostgreSQL menggunakan pengguna yang dibuat untuk identitas terkelola.
Perbarui kode Anda untuk menggunakan pengguna yang dibuat untuk identitas terkelola:
Nota
Jika Anda menggunakan perintah Konektor Layanan, lewati langkah ini.
properties.put("user", "$AZ_POSTGRESQL_AD_MI_USERNAME");
Setelah membuat perubahan kode ini, Anda dapat membangun dan menyebarkan ulang aplikasi. Kemudian, telusuri ke aplikasi yang dihosting di browser. Aplikasi Anda harus berhasil terhubung ke database PostgreSQL. Perlu diingat bahwa mungkin perlu waktu beberapa menit agar penetapan peran disebarluaskan melalui lingkungan Azure Anda. Aplikasi Anda sekarang dikonfigurasi untuk berjalan baik secara lokal maupun di lingkungan produksi tanpa pengembang harus mengelola rahasia dalam aplikasi itu sendiri.
Langkah selanjutnya
Dalam tutorial ini, Anda mempelajari cara memigrasikan aplikasi ke koneksi tanpa kata sandi.
Anda dapat membaca sumber daya berikut untuk menjelajahi konsep yang dibahas dalam artikel ini secara lebih mendalam: