Latihan - Membatasi akses ke lingkungan Azure Container Apps
Dalam unit ini, Anda memastikan bahwa database PostgreSQL hanya dapat diakses oleh aplikasi Quarkus, dan bukan oleh klien eksternal lainnya. Saat ini Anda dapat mengakses database dari klien mana pun dengan menggunakan Azure CLI dan menjalankan Quarkus secara lokal. Konfigurasi ini tidak aman. Anda perlu menambahkan aturan firewall untuk hanya mengizinkan alamat IP dalam lingkungan Azure Container Apps untuk mengakses server database.
Mengakses server PostgreSQL dengan menggunakan CLI
Pertama, pastikan Anda dapat mengakses server PostgreSQL dengan menggunakan Azure CLI. Untuk melakukannya, jalankan perintah ini:
az postgres flexible-server execute \
--name "$AZ_POSTGRES_SERVER_NAME" \
--database-name "$AZ_POSTGRES_DB_NAME" \
--admin-user "$AZ_POSTGRES_USERNAME" \
--admin-password "$AZ_POSTGRES_PASSWORD" \
--querytext "select * from Todo" \
--output table
Anda akan dapat melihat konten database. Jika bisa, database dapat diakses di luar lingkungan.
Menghapus aturan firewall permisif
Azure Database for PostgreSQL menyediakan keamanan secara default. Firewall-nya biasanya tidak mengizinkan koneksi masuk. Tetapi ketika Anda membuat server PostgreSQL, Anda menentukan parameter --public-access "All" untuk mengaktifkan akses eksternal, yang mengonfigurasi firewall agar terbuka untuk publik.
Anda dapat mencantumkan aturan firewall yang ada dengan menjalankan perintah ini:
az postgres flexible-server firewall-rule list \
--name "$AZ_POSTGRES_SERVER_NAME" \
--resource-group "$AZ_RESOURCE_GROUP" \
--output table
Anda akan melihat output berikut:
EndIpAddress Name ResourceGroup StartIpAddress
--------------- --------------------------- ---------------------- ----------------
255.255.255.255 AllowAll_2025-2-26_16-57-40 rgazure-deploy-quarkus 0.0.0.0
Perhatikan bahwa rentang alamat IP yang diizinkan 0.0.0.0 melalui 255.255.255.255. Aturan firewall seperti ini memungkinkan klien mana pun mengakses database. Untuk memastikan bahwa hanya aplikasi Quarkus yang dapat mengakses database, Anda perlu memperbarui aturan firewall server PostgreSQL.
Dalam hal ini, itu hanya masalah menghapus aturan publik. Untuk menghapusnya, jalankan perintah berikut:
az postgres flexible-server firewall-rule delete \
--name "$AZ_POSTGRES_SERVER_NAME" \
--resource-group "$AZ_RESOURCE_GROUP" \
--rule-name <name of the AllowAll firewall rule> \
--yes
Sekarang coba kueri database dengan menjalankan pernyataan SQL dari CLI:
az postgres flexible-server execute \
--name "$AZ_POSTGRES_SERVER_NAME" \
--database-name "$AZ_POSTGRES_DB_NAME" \
--admin-user "$AZ_POSTGRES_USERNAME" \
--admin-password "$AZ_POSTGRES_PASSWORD" \
--querytext "select * from Todo" \
--output table
Panggilan akhirnya kehabisan waktu. Anda akan melihat pesan ini:
Unable to connect to flexible server: connection to server failed: Operation timed out
Karena Anda menghapus semua aturan firewall, sekarang bahkan aplikasi Quarkus tidak dapat mengakses database. Jika Anda mencoba mengambil daftar tugas dari database, permintaan tersebut gagal. Jalankan permintaan cURL berikut:
curl https://$AZ_APP_URL/api/todos
Menambahkan aturan firewall baru
Anda perlu mengonfigurasi firewall untuk mengizinkan akses hanya ke aplikasi Quarkus. Anda perlu menambahkan aturan firewall baru. Untuk menambahkan aturan, jalankan perintah ini:
az postgres flexible-server firewall-rule create \
--name "$AZ_POSTGRES_SERVER_NAME" \
--resource-group "$AZ_RESOURCE_GROUP" \
--rule-name "Allow_Azure-internal-IP-addresses" \
--start-ip-address "0.0.0.0" \
--end-ip-address "0.0.0.0"
Mengatur start-ip-address dan end-ip-address ke 0.0.0.0 memungkinkan akses dari semua alamat IP internal Azure tetapi tidak mengizinkan akses dari alamat IP eksternal. Praktik ini membantu mengamankan database dari akses eksternal.
Jika Anda mencoba mengakses database dari CLI dengan menjalankan perintah berikut, upaya akan gagal:
az postgres flexible-server execute \
--name "$AZ_POSTGRES_SERVER_NAME" \
--database-name "$AZ_POSTGRES_DB_NAME" \
--admin-user "$AZ_POSTGRES_USERNAME" \
--admin-password "$AZ_POSTGRES_PASSWORD" \
--querytext "select * from Todo" \
--output table
Tetapi jika Anda mencoba menggunakan perintah berikut untuk mengambil tugas dari database melalui aplikasi Quarkus yang berjalan di Container Apps, upaya berhasil:
curl https://$AZ_APP_URL/api/todos
Perintah ini mengembalikan daftar semua item to-do dari database. Server PostgreSQL dapat diakses dari aplikasi Quarkus yang berjalan pada layanan Azure, tetapi tidak dapat diakses dari luar Azure.