Memigrasikan aplikasi Java untuk menggunakan koneksi tanpa kata sandi dengan Azure SQL Database
Artikel ini menjelaskan cara bermigrasi dari metode autentikasi tradisional ke koneksi tanpa kata sandi yang lebih aman dengan Azure SQL Database.
Permintaan aplikasi ke Azure SQL Database harus diautentikasi. Azure SQL Database menyediakan beberapa cara berbeda agar aplikasi terhubung dengan aman. Salah satu caranya adalah dengan menggunakan kata sandi. Namun, Anda harus memprioritaskan koneksi tanpa kata sandi di aplikasi jika memungkinkan.
Membandingkan opsi autentikasi
Saat aplikasi mengautentikasi dengan Azure SQL Database, aplikasi menyediakan pasangan nama pengguna dan kata sandi untuk menyambungkan ke database. Bergantung pada tempat identitas disimpan, ada dua jenis autentikasi: Autentikasi Microsoft Entra dan autentikasi Azure SQL Database.
Autentikasi Microsoft Entra
Autentikasi Microsoft Entra adalah mekanisme untuk menyambungkan ke Azure SQL Database menggunakan identitas yang ditentukan dalam ID Microsoft Entra. Dengan autentikasi Microsoft Entra, Anda dapat mengelola identitas pengguna database dan layanan Microsoft lain 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 Azure SQL untuk mengautentikasi identitas di tingkat database.
- Dukungan autentikasi berbasis token untuk aplikasi yang terhubung ke Azure SQL Database.
Autentikasi Azure SQL Database
Anda dapat membuat akun di Azure SQL Database. Jika Anda memilih untuk menggunakan kata sandi sebagai kredensial untuk akun, kredensial ini akan disimpan dalam sys.database_principals
tabel. Karena kata sandi ini disimpan di Azure SQL Database, Anda perlu mengelola rotasi kata sandi sendiri.
Meskipun dimungkinkan untuk terhubung ke Azure SQL Database 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 jahat 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 otomatis menentukan metode autentikasi yang harus digunakan saat runtime bahasa umum. Pendekatan ini memungkinkan aplikasi Anda menggunakan metode autentikasi yang berbeda di lingkungan yang berbeda (pengembangan lokal dibandingkan dengan 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 otomatis beralih 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.
Catatan
Identitas terkelola menyediakan identitas keamanan untuk mewakili aplikasi atau layanan. Identitas dikelola oleh platform Azure dan tidak mengharuskan Anda memprovisikan atau memutar rahasia. Anda dapat membaca selengkapnya tentang identitas terkelola dalam dokumentasi gambaran umum.
Catatan
Karena driver JDBC untuk Azure SQL Database belum mendukung koneksi tanpa kata sandi dari lingkungan lokal, artikel ini hanya akan berfokus pada aplikasi yang disebarkan ke lingkungan hosting Azure dan cara memigrasikannya untuk menggunakan koneksi tanpa kata sandi.
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 CURRENT_USERNAME=$(az ad signed-in-user show --query userPrincipalName --output tsv)
export CURRENT_USER_OBJECTID=$(az ad signed-in-user show --query id --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 Azure SQL Database Anda. Nama ini harus bersifat unik di seluruh Azure.
1) Mengonfigurasi Azure SQL Database
1.1) Aktifkan autentikasi berbasis ID Microsoft Entra
Untuk menggunakan akses ID Microsoft Entra dengan Azure SQL Database, 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.
Jika Anda menggunakan Azure CLI, jalankan perintah berikut untuk memastikannya memiliki izin yang memadai:
az login --scope https://graph.microsoft.com/.default
Kemudian, jalankan perintah berikut untuk mengatur admin Microsoft Entra:
az sql server ad-admin create \
--resource-group $AZ_RESOURCE_GROUP \
--server $AZ_DATABASE_SERVER_NAME \
--display-name $CURRENT_USERNAME \
--object-id $CURRENT_USER_OBJECTID
Perintah ini akan mengatur admin Microsoft Entra ke pengguna yang masuk saat ini.
Catatan
Anda hanya dapat membuat satu admin Microsoft Entra per server Azure SQL Database. Pilihan yang lain akan menimpa admin Microsoft Entra yang ada yang dikonfigurasi untuk server.
2) Memigrasikan kode aplikasi untuk menggunakan koneksi tanpa kata sandi
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
paket. Pustaka ini berisi semua entitas yang diperlukan untuk menerapkan koneksi tanpa kata sandi.<dependency> <groupId>com.azure</groupId> <artifactId>azure-identity</artifactId> <version>1.5.4</version> </dependency>
Aktifkan autentikasi identitas terkelola Microsoft Entra di URL JDBC.v Identifikasi lokasi dalam kode Anda yang saat ini membuat
java.sql.Connection
untuk menyambungkan ke Azure SQL Database. Perbarui kode berikut agar sesuai dengan contoh berikut:String url = "jdbc:sqlserver://$AZ_DATABASE_SERVER_NAME.database.windows.net:1433;databaseName=$AZ_DATABASE_NAME;authentication=ActiveDirectoryMSI;" Connection con = DriverManager.getConnection(url);
Ganti dua
$AZ_DATABASE_SERVER_NAME
variabel dan satu$AZ_DATABASE_NAME
variabel dengan nilai yang Anda konfigurasi di awal artikel ini.user
Hapus danpassword
dari URL JDBC.
3) Mengonfigurasi lingkungan hosting Azure
Setelah aplikasi Anda dikonfigurasi untuk menggunakan koneksi tanpa kata sandi, 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.
Catatan
Azure juga menyediakan Service Koneksi or, yang dapat membantu Anda menghubungkan layanan hosting Anda dengan server SQL. Dengan Service Koneksi or untuk mengonfigurasi lingkungan hosting Anda, Anda dapat menghilangkan langkah menetapkan peran ke identitas terkelola Anda karena Service Koneksi or akan melakukannya untuk Anda. Bagian berikut menjelaskan cara mengonfigurasi lingkungan hosting Azure Anda dengan dua cara: satu melalui service Koneksi or dan yang lainnya dengan mengonfigurasi setiap lingkungan hosting secara langsung.
Penting
Perintah service Koneksi or memerlukan Azure CLI 2.41.0 atau yang lebih tinggi.
Menetapkan identitas terkelola menggunakan portal 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.
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 menggunakan Azure CLI.
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 buat untuk mengakses database SQL Anda.
Jika Anda menyambungkan layanan menggunakan Service Koneksi or, perintah langkah sebelumnya sudah menetapkan peran, sehingga Anda dapat melewati langkah ini.
Menguji aplikasi
Setelah membuat perubahan kode ini, Anda dapat membangun dan menyebarkan ulang aplikasi. Kemudian, telusuri ke aplikasi yang dihosting di browser. Aplikasi Anda harus berhasil tersambung ke database Azure SQL. Perlu diingat bahwa mungkin perlu waktu beberapa menit agar penetapan peran disebarkan melalui lingkungan Azure Anda. Aplikasi Anda kini dikonfigurasikan untuk berjalan baik secara lokal maupun di lingkungan produksi tanpa pengembang harus mengelola rahasia dalam aplikasi itu sendiri.
Langkah berikutnya
Dalam tutorial ini, Anda belajar 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:
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk