Bagikan melalui


Mengonfigurasi keamanan untuk aplikasi Tomcat, JBoss, atau Java SE di Azure App Service

Artikel ini menunjukkan cara mengonfigurasi pengaturan keamanan khusus Java di App Service. Aplikasi Java yang berjalan di App Service memiliki serangkaian praktik terbaik keamanan yang sama dengan aplikasi lain.

Azure App Service menjalankan aplikasi web Java pada layanan yang dikelola sepenuhnya dalam tiga varian:

  • Java Standard Edition (SE): Dapat menjalankan aplikasi yang disebarkan sebagai paket Java Archive (JAR) yang berisi server yang disematkan (seperti Spring Boot, Quarkus, Dropwizard, atau aplikasi dengan server Tomcat atau Jetty yang disematkan).
  • Tomcat: Server Tomcat bawaan dapat menjalankan aplikasi yang disebarkan sebagai paket arsip aplikasi web (WAR).
  • JBoss Enterprise Application Platform (EAP): Server JBoss EAP bawaan dapat menjalankan aplikasi yang disebarkan sebagai paket WAR atau arsip perusahaan (EAR). Didukung untuk aplikasi Linux dalam serangkaian tingkat harga yang mencakup Gratis, Premium v3, dan Terisolasi v2.gti

Mengautentikasi pengguna (Autentikasi Mudah)

Siapkan autentikasi aplikasi di portal Microsoft Azure dengan opsi Autentikasi dan Otorisasi . Dari sana, Anda dapat mengaktifkan autentikasi menggunakan Microsoft Entra ID atau login sosial seperti Facebook, Google, atau GitHub. Konfigurasi portal Microsoft Azure hanya berfungsi saat mengonfigurasi penyedia autentikasi tunggal. Untuk informasi selengkapnya, lihat Mengonfigurasi aplikasi App Service Anda untuk menggunakan masuk Microsoft Entra dan artikel terkait untuk penyedia identitas lainnya. Jika Anda perlu mengaktifkan beberapa penyedia login, ikuti petunjuk di Menyesuaikan login dan logout.

Pengembang Spring Boot dapat menggunakan pemula Microsoft Entra Spring Boot untuk mengamankan aplikasi menggunakan anotasi dan API Spring Security yang sudah dikenal. Pastikan untuk meningkatkan ukuran maksimum header di file application.properties Anda. Kami menyarankan nilai 16384.

Aplikasi Tomcat Anda dapat mengakses klaim pengguna langsung dari servlet dengan mengubah objek Principal menjadi objek Map. Objek Map memetakan setiap jenis klaim ke koleksi klaim untuk jenis tersebut. Dalam contoh kode berikut, request adalah instansi dari HttpServletRequest.

Map<String, Collection<String>> map = (Map<String, Collection<String>>) request.getUserPrincipal();

Sekarang Anda dapat memeriksa Map objek untuk klaim tertentu. Misalnya, cuplikan kode berikut mengulangi semua jenis klaim dan mencetak konten setiap koleksi.

for (Object key : map.keySet()) {
        Object value = map.get(key);
        if (value != null && value instanceof Collection {
            Collection claims = (Collection) value;
            for (Object claim : claims) {
                System.out.println(claims);
            }
        }
    }

Untuk keluar dari pengguna, gunakan jalur /.auth/ext/logout. Untuk melakukan tindakan lainnya, lihat dokumentasi tentang Menyesuaikan masuk dan keluar. Ada juga dokumentasi resmi tentang antarmuka HttpServletRequest Tomcat dan metodenya. Metode servlet berikut juga terhidrasi berdasarkan konfigurasi Layanan Aplikasi Anda.

public boolean isSecure()
public String getRemoteAddr()
public String getRemoteHost()
public String getScheme()
public int getServerPort()

Untuk menonaktifkan fitur ini, buat Pengaturan Aplikasi dengan nama WEBSITE_AUTH_SKIP_PRINCIPAL dan dari nilai 1. Untuk menonaktifkan semua filter servlet yang ditambahkan oleh App Service, buat pengaturan dengan nama WEBSITE_SKIP_FILTERS dan nilai 1.

Untuk JBoss EAP, lihat tab Tomcat.

Konfigurasi TLS/SSL

Untuk mengunggah sertifikat TLS/SSL yang ada dan menghubungkannya ke nama domain aplikasi Anda, ikuti petunjuk di Amankan nama DNS kustom dengan binding TLS/SSL dalam Azure App Service. Anda juga dapat mengonfigurasi aplikasi untuk menerapkan TLS/SSL.

Gunakan Referensi KeyVault

Azure KeyVault menyediakan manajemen rahasia yang terpusat dengan kebijakan akses dan riwayat audit. Anda dapat menyimpan rahasia (seperti kata sandi atau string koneksi) di KeyVault dan mengakses rahasia ini dalam aplikasi Anda melalui variabel lingkungan.

Pertama, ikuti petunjuk untuk memberi aplikasi Anda akses ke key vault dan membuat referensi KeyVault ke rahasia Anda dalam Pengaturan Aplikasi. Anda dapat memvalidasi bahwa referensi diselesaikan ke rahasia dengan mencetak variabel lingkungan saat mengakses terminal App Service dari jarak jauh.

Untuk file konfigurasi Spring, lihat dokumentasi ini tentang konfigurasi eksternal.

Untuk menyuntikkan rahasia-rahasia ini ke dalam file konfigurasi Spring Anda, gunakan sintaks penyuntikan variabel lingkungan (${MY_ENV_VAR}).

Untuk menyuntikkan rahasia-rahasia ini ke dalam file konfigurasi Tomcat Anda, gunakan sintaks injeksi variabel lingkungan (${MY_ENV_VAR}).

Gunakan penyimpanan kunci Java di Linux

Secara default, sertifikat publik atau privat apa pun yang diunggah ke App Service Linux dimuat ke dalam Java key stores yang sesuai saat kontainer mulai berjalan. Setelah mengunggah sertifikat Anda, Anda perlu memulai ulang Layanan Aplikasi Anda agar sertifikat tersebut dimuat ke dalam Java key store. Sertifikat publik dimuat ke dalam key store di $JRE_HOME/lib/security/cacerts, dan sertifikat privat disimpan di $JRE_HOME/lib/security/client.jks.

Mungkin diperlukan konfigurasi tambahan untuk mengenkripsi koneksi JDBC Anda dengan sertifikat di dalam Java key store. Merujuklah ke dokumentasi untuk pengandar JDBC yang Anda pilih.

Inisialisasi penyimpanan kunci Java di Linux

Untuk menginisialisasi objek import java.security.KeyStore, muat file keystore dengan kata sandi. Kata sandi default untuk kedua penyimpanan kunci adalah changeit.

KeyStore keyStore = KeyStore.getInstance("jks");
keyStore.load(
    new FileInputStream(System.getenv("JRE_HOME")+"/lib/security/cacerts"),
    "changeit".toCharArray());

KeyStore keyStore = KeyStore.getInstance("pkcs12");
keyStore.load(
    new FileInputStream(System.getenv("JRE_HOME")+"/lib/security/client.jks"),
    "changeit".toCharArray());

Muat key store secara manual di Linux

Anda dapat memuat sertifikat secara manual ke dalam penyimpanan kunci. Buat pengaturan aplikasi, SKIP_JAVA_KEYSTORE_LOAD, dengan nilai 1 untuk menonaktifkan layanan App agar tidak memuat sertifikat ke dalam penyimpanan kunci secara otomatis. Semua sertifikat publik yang diunggah ke App Service melalui portal Microsoft Azure disimpan di bawah /var/ssl/certs/. Sertifikat pribadi disimpan di bawah /var/ssl/private/.

Anda dapat berinteraksi atau debug Java Key Tool dengan membuka koneksi SSH ke App Service Anda dan menjalankan perintah keytool. Lihat dokumentasi Key Tool untuk daftar perintah. Untuk informasi lebih lanjut tentang API KeyStore, lihat dokumentasi resmi.

Langkah selanjutnya

Kunjungi pusat Azure for Java Developers untuk menemukan panduan cepat Azure, tutorial, dan dokumentasi referensi Java.