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.

  1. 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>
    
  2. 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);
    
  3. Ganti dua $AZ_DATABASE_SERVER_NAME variabel dan satu $AZ_DATABASE_NAME variabel dengan nilai yang Anda konfigurasi di awal artikel ini.

  4. user Hapus dan password 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.

  1. Pada halaman gambaran umum utama instans Azure App Service Anda, pilih Identitas dari panel navigasi.

  2. 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.

    Screenshot of Azure portal Identity page of App Service resource with System assigned tab showing and Status field highlighted.

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: