Saat menghosting aplikasi atau layanan mikro di Azure Spring Apps, Anda tidak selalu ingin menerbitkannya langsung ke internet. Anda mungkin ingin mengeksposnya melalui proksi terbalik. Pendekatan ini memungkinkan Anda menempatkan layanan di depan aplikasi Anda. Layanan ini dapat menentukan fungsionalitas lintas-pemotongan seperti kemampuan firewall aplikasi web (WAF) untuk membantu mengamankan aplikasi, penyeimbangan beban, perutean, pemfilteran permintaan, dan pembatasan laju.
Saat Anda menyebarkan layanan proksi terbalik umum seperti Azure Application Gateway atau Azure Front Door di depan Azure Spring Apps, Anda harus memastikan aplikasi Anda hanya dapat dijangkau melalui proksi terbalik. Perlindungan ini membantu mencegah pengguna jahat mencoba melewati WAF atau menghindari batas pembatasan.
Azure DDoS Protection, dikombinasikan dengan praktik terbaik desain aplikasi, menyediakan fitur mitigasi DDoS yang ditingkatkan untuk memberikan lebih banyak pertahanan terhadap serangan DDoS. Anda harus mengaktifkan Azure DDOS Protection di jaringan virtual perimeter apa pun.
Artikel ini menjelaskan cara menerapkan pembatasan akses sehingga aplikasi yang dihosting di Azure Spring Apps hanya dapat diakses melalui layanan proksi terbalik. Cara yang disarankan untuk menerapkan pembatasan ini bergantung pada cara Anda menyebarkan instans Azure Spring Apps dan proksi terbalik yang Anda gunakan. adalah poin yang berbeda untuk dipertimbangkan tergantung pada apakah Anda menyebarkan di dalam atau di luar jaringan virtual. Artikel ini menyediakan informasi tentang empat skenario.
Sebarkan Azure Spring Apps dalam jaringan virtual dan akses aplikasi Anda secara privat dari dalam jaringan.
Anda memiliki kontrol atas jaringan virtual tempat aplikasi Anda berjalan. Gunakan fitur jaringan Azure asli seperti kelompok keamanan jaringan (NSG) untuk mengunci akses agar hanya mengizinkan proksi terbalik Anda.
Anda dapat mengekspos aplikasi Anda secara publik ke internet dengan menggunakan Azure Application Gateway lalu menerapkan pembatasan akses yang sesuai untuk menguncinya. Pendekatan ini dijelaskan dalam Skenario 1 nanti dalam artikel ini.
Anda tidak dapat menggunakan Azure Front Door secara langsung karena tidak dapat menjangkau instans Azure Spring Apps di jaringan virtual privat Anda. Azure Front Door hanya dapat terhubung ke backend melalui alamat IP publik atau melalui layanan yang menggunakan titik akhir privat. Saat Anda memiliki penyebaran Azure Spring Apps multi-wilayah dan memerlukan penyeimbangan beban global, Anda masih dapat mengekspos instans Azure Spring Apps Anda melalui Application Gateway. Untuk mencapai skenario ini, Anda menempatkan Azure Front Door di depan Application Gateway. Pendekatan ini dijelaskan dalam Skenario 2 nanti dalam artikel ini.
Sebarkan Azure Spring Apps di luar jaringan virtual dan terbitkan aplikasi Anda ke internet secara langsung, jika Anda menetapkan titik akhir.
Anda tidak mengontrol jaringan dan tidak dapat menggunakan NSG untuk membatasi akses. Mengizinkan hanya proksi terbalik untuk mengakses aplikasi Anda yang memerlukan pendekatan dalam Azure Spring Apps itu sendiri.
Karena aplikasi Anda dapat dijangkau secara publik, Anda dapat menggunakan Application Gateway atau Azure Front Door sebagai proksi terbalik. Pendekatan Application Gateway dijelaskan dalam Skenario 3 nanti dalam artikel ini. Pendekatan Azure Front Door dijelaskan dalam Skenario 4 nanti dalam artikel ini.
Anda dapat menggunakan kombinasi kedua pendekatan, sesuai kebutuhan. Jika Anda menggunakan Application Gateway dan Azure Front Door, gunakan pembatasan akses yang sama antara dua proksi terbalik yang digunakan dalam Skenario 2.
Catatan
Anda dapat menggunakan layanan proksi terbalik lainnya alih-alih Application Gateway atau Azure Front Door. Untuk layanan regional yang berbasis di jaringan virtual Azure, seperti Azure API Management, panduannya mirip dengan panduan untuk Application Gateway. Jika Anda menggunakan layanan non-Azure, panduannya mirip dengan panduan untuk Azure Front Door.
Perbandingan skenario
Tabel berikut ini menyediakan perbandingan singkat dari empat skenario konfigurasi proksi terbalik untuk Azure Spring Apps. Untuk detail selengkapnya tentang setiap skenario, lihat bagian yang sesuai dari artikel ini.
Skenario | Penyebaran | Layanan | Konfigurasi |
---|---|---|---|
1 | Di dalam jaringan virtual | Application Gateway | - Untuk setiap aplikasi yang ingin Anda ekspos, tetapkan titik akhir dan petakan domain atau domain kustom yang sesuai ke aplikasi tersebut. - Untuk kumpulan back-end di Application Gateway, gunakan titik akhir yang ditetapkan dari setiap aplikasi. - Di subnet runtime layanan, tambahkan NSG untuk mengizinkan lalu lintas hanya dari subnet Application Gateway, subnet aplikasi, dan penyeimbang beban Azure. Blokir semua lalu lintas lainnya. |
2 | Di dalam jaringan virtual | Azure Front Door dan Application Gateway | - Batasi akses antara Application Gateway dan Azure Spring Apps dengan menggunakan pendekatan yang sama yang dijelaskan untuk Skenario 1. - Pada subnet Application Gateway, buat NSG untuk hanya mengizinkan lalu lintas yang memiliki AzureFrontDoor.Backend tag layanan. - Buat aturan WAF kustom di Application Gateway untuk memverifikasi X-Azure-FDID header HTTP berisi ID instans Azure Front Door spesifik Anda. |
3 | Di luar jaringan virtual | Application Gateway dengan Spring Cloud Gateway | - Gunakan Spring Cloud Gateway untuk mengekspos aplikasi back-end Anda. Hanya aplikasi Spring Cloud Gateway yang memerlukan titik akhir yang ditetapkan. Domain kustom dari semua aplikasi back-end harus dipetakan ke aplikasi Spring Cloud Gateway tunggal ini. - Untuk kumpulan back-end di Application Gateway, gunakan titik akhir yang ditetapkan dari aplikasi Spring Cloud Gateway. - Di Spring Cloud Gateway, atur XForwarded Remote Addr predikat rute ke alamat IP publik Application Gateway. - Secara opsional, di aplikasi Spring Framework Anda, atur server.forward-headers-strategy properti aplikasi ke FRAMEWORK . |
4 | Di luar jaringan virtual | Azure Front Door dengan Spring Cloud Gateway | - Gunakan Spring Cloud Gateway untuk mengekspos aplikasi back-end Anda. Hanya aplikasi Spring Cloud Gateway yang memerlukan titik akhir yang ditetapkan. Domain kustom dari semua aplikasi back-end harus dipetakan ke aplikasi Spring Cloud Gateway tunggal ini. - Untuk kumpulan back-end atau asal di Azure Front Door, gunakan titik akhir yang ditetapkan dari aplikasi Spring Cloud Gateway. - Di Spring Cloud Gateway, atur XForwarded Remote Addr predikat rute ke semua rentang IP keluar Azure Front Door, dan jaga pengaturan ini tetap terkini. Atur Header predikat rute untuk memastikan bahwa X-Azure-FDID header HTTP berisi ID Azure Front Door unik Anda. - Secara opsional, di aplikasi Spring Framework Anda, atur server.forward-headers-strategy properti aplikasi ke FRAMEWORK . |
Catatan
Setelah Anda menyiapkan konfigurasi, pertimbangkan untuk menggunakan Azure Policy atau kunci sumber daya untuk mencegah perubahan yang tidak disengaja atau berbahaya yang mungkin memungkinkan proksi terbalik dilewati dan aplikasi diekspos secara langsung. Perlindungan ini hanya berlaku untuk sumber daya Azure (khususnya, NSG) karena konfigurasi dalam Azure Spring Apps tidak terlihat oleh sarana kontrol Azure.
Penyebaran di dalam jaringan virtual Anda
Saat Azure Spring Apps disebarkan dalam jaringan virtual, Azure Spring Apps menggunakan dua subnet:
- Subnet runtime layanan yang berisi sumber daya jaringan yang relevan
- Subnet aplikasi yang menghosting kode Anda
Karena subnet runtime layanan berisi load balancer untuk menyambungkan ke aplikasi, Anda dapat menentukan NSG pada subnet runtime layanan ini untuk mengizinkan lalu lintas dari proksi terbalik Anda saja. Saat Anda memblokir semua lalu lintas lainnya, tidak ada orang di jaringan virtual yang dapat mengakses aplikasi Anda tanpa melalui proksi terbalik.
Penting
Membatasi akses subnet hanya ke proksi terbalik dapat menyebabkan kegagalan dalam fitur yang bergantung pada koneksi langsung dari perangkat klien ke aplikasi, seperti streaming log. Pertimbangkan untuk menambahkan aturan NSG khusus untuk perangkat klien tersebut, dan hanya jika diperlukan akses langsung tertentu.
Setiap aplikasi yang ingin Anda ekspos melalui proksi terbalik Anda harus memiliki titik akhir yang ditetapkan sehingga proksi terbalik dapat menjangkau aplikasi di jaringan virtual. Untuk setiap aplikasi, Anda juga harus memetakan domain kustom yang digunakannya untuk menghindari penggantian header HTTP Host
di proksi terbalik dan menjaga nama host asli tetap utuh. Metode ini menghindari masalah seperti cookie rusak atau URL pengalihan yang tidak berfungsi dengan baik. Untuk informasi selengkapnya, lihat Pelestarian nama host.
Catatan
Atau (atau, untuk pertahanan secara mendalam, mungkin selain NSG) Anda dapat mengikuti panduan saat Azure Spring Apps disebarkan di luar jaringan virtual Anda. Bagian itu menjelaskan bagaimana pembatasan akses biasanya dicapai dengan menggunakan Spring Cloud Gateway, yang juga memengaruhi aplikasi back-end karena mereka tidak lagi memerlukan titik akhir atau domain kustom yang ditetapkan.
Skenario 1: Gunakan Application Gateway sebagai proksi terbalik
Skenario 1 menjelaskan cara mengekspos aplikasi Anda secara publik ke internet dengan menggunakan Application Gateway lalu menerapkan pembatasan akses yang sesuai untuk menguncinya.
Diagram berikut menggambarkan arsitektur untuk Skenario 1:
Unduh file Visio arsitektur ini.
Saat Application Gateway berada di depan instans Azure Spring Apps, Anda menggunakan titik akhir yang ditetapkan dari aplikasi Spring Cloud Gateway sebagai kumpulan back-end. Contoh titik akhir adalah: myspringcloudservice-myapp.private.azuremicroservices.io
. Titik akhir diselesaikan ke alamat IP privat di subnet runtime layanan. Oleh karena itu, untuk membatasi akses, Anda dapat menempatkan NSG pada subnet runtime layanan dengan aturan keamanan masuk berikut (memberikan aturan Tolak prioritas terendah):
Perbuatan | Jenis sumber | Nilai sumber | Protokol | Rentang port tujuan |
---|---|---|---|---|
Izinkan | Alamat IP | Rentang IP privat subnet Application Gateway (misalnya, 10.1.2.0/24 ). |
TCP |
80, 443 (atau port lain yang sesuai) |
Izinkan | Alamat IP | Rentang IP privat subnet aplikasi di Azure Spring Apps (misalnya, 10.1.1.0/24 ). |
TCP |
* |
Izinkan | Tag layanan | AzureLoadBalancer |
Any |
* |
Tolak | Tag layanan | Any |
Any |
* |
Konfigurasi Skenario 1 memastikan subnet runtime layanan hanya mengizinkan lalu lintas dari sumber berikut:
- Subnet Application Gateway khusus
- Subnet aplikasi (Komunikasi dua arah antara dua subnet Azure Spring Apps diperlukan.)
- Penyeimbang muatan Azure (yang merupakan persyaratan platform Azure umum)
Semua lalu lintas lainnya diblokir.
Skenario 2: Gunakan Azure Front Door dan Application Gateway sebagai proksi terbalik
Seperti yang disebutkan sebelumnya, Anda tidak dapat menempatkan Azure Front Door langsung di depan Azure Spring Apps karena tidak dapat menjangkau ke jaringan virtual privat Anda. (Azure Front Door Standard atau Premium dapat terhubung ke titik akhir privat dalam jaringan virtual, tetapi Azure Spring Apps saat ini tidak menawarkan dukungan titik akhir privat.) Jika Anda masih ingin menggunakan Azure Front Door, seperti memerlukan penyeimbangan beban global di beberapa instans Azure Spring Apps di berbagai wilayah Azure, Anda masih dapat mengekspos aplikasi anda melalui Application Gateway. Untuk mencapai skenario ini, Anda menempatkan Azure Front Door di depan Application Gateway.
Diagram berikut menggambarkan arsitektur untuk Skenario 2:
Unduh file Visio arsitektur ini.
Konfigurasi Skenario 2 menerapkan pembatasan akses antara Application Gateway dan Azure Spring Apps dengan cara yang sama seperti Skenario 1. Anda menempatkan NSG pada subnet runtime layanan dengan aturan yang sesuai.
Dalam Skenario 2, Anda juga harus memastikan bahwa Application Gateway menerima lalu lintas yang hanya berasal dari instans Azure Front Door Anda. Dokumentasi Azure Front Door menjelaskan cara mengunci akses ke backend untuk hanya mengizinkan lalu lintas Azure Front Door. Saat back end adalah Application Gateway, Anda dapat menerapkan pembatasan ini sebagai berikut:
- Pada subnet Application Gateway, buat NSG untuk hanya mengizinkan lalu lintas yang memiliki
AzureFrontDoor.Backend
tag layanan (tidak ada kecuali Azure Front Door yang dapat mencapai Application Gateway). Pastikan juga untuk menyertakan tag layanan lain yang diperlukan, seperti yang dijelaskan dalam pembatasan NSG untuk Application Gateway. - Buat aturan WAF kustom di Application Gateway untuk memverifikasi
X-Azure-FDID
header HTTP diatur ke ID instans Azure Front Door spesifik Anda. Metode ini memastikan bahwa tidak ada instans Azure Front Door organisasi lain yang menggunakan rentang IP yang sama yang dapat menjangkau instans Application Gateway Anda.
Penyebaran di luar jaringan virtual Anda
Saat menyebarkan Azure Spring Apps di luar jaringan virtual, Anda tidak dapat menggunakan fitur jaringan Azure asli karena Anda tidak mengontrol jaringan. Sebagai gantinya, Anda harus menerapkan pembatasan akses yang diperlukan pada aplikasi itu sendiri untuk mengizinkan lalu lintas hanya dari proksi terbalik. Jika Anda memiliki banyak aplikasi, pendekatan ini dapat menambahkan kompleksitas, dan ada risiko bahwa tidak setiap aplikasi dapat dikonfigurasi dengan tepat.
Menggunakan Spring Cloud Gateway untuk mengekspos dan membantu mengamankan aplikasi Anda
Untuk menghapus tanggung jawab kontrol akses dari pengembang aplikasi individual, Anda dapat menerapkan pembatasan lintas pemotongan dengan menggunakan Spring Cloud Gateway. Spring Cloud Gateway adalah proyek Spring yang umum digunakan yang dapat Anda sebarkan ke Azure Spring Apps seperti aplikasi lainnya. Dengan menggunakan Spring Cloud Gateway, Anda dapat menjaga aplikasi Anda sendiri tetap privat dalam instans Azure Spring Apps dan memastikan aplikasi tersebut hanya dapat diakses melalui aplikasi Spring Cloud Gateway bersama. Anda kemudian mengonfigurasi aplikasi ini dengan pembatasan akses yang diperlukan dengan menggunakan predikat rute, yang merupakan fitur bawaan Dari Spring Cloud Gateway. Predikat rute dapat menggunakan atribut yang berbeda dari permintaan HTTP masuk untuk menentukan apakah akan merutekan permintaan ke aplikasi back-end atau menolaknya. Predikat dapat menggunakan atribut seperti alamat IP klien, metode atau jalur permintaan, header HTTP, dan sebagainya.
Penting
Saat Anda menempatkan Spring Cloud Gateway di depan aplikasi back-end Anda dengan cara ini, Anda harus memetakan semua domain kustom Anda ke aplikasi Spring Cloud Gateway daripada ke aplikasi back-end. Jika tidak, Azure Spring Apps tidak akan merutekan lalu lintas masuk ke Spring Cloud Gateway Anda terlebih dahulu saat permintaan masuk untuk salah satu domain kustom tersebut.
Pendekatan ini mengasumsikan bahwa proksi terbalik Anda tidak mengambil alih header HTTP Host
dan menjaga nama host asli tetap utuh. Untuk informasi selengkapnya, lihat Pelestarian nama host .
Pola ini umumnya digunakan. Untuk tujuan artikel ini, kami berasumsi bahwa Anda mengekspos aplikasi Anda melalui Spring Cloud Gateway. Kami berharap Anda menggunakan predikat rutenya untuk menyiapkan pembatasan akses yang diperlukan untuk memastikan bahwa hanya permintaan dari proksi terbalik yang diizinkan. Bahkan jika Anda tidak menggunakan Spring Cloud Gateway, prinsip umum yang sama berlaku. Namun, Anda harus membangun kemampuan pemfilteran permintaan Anda sendiri ke dalam aplikasi Anda berdasarkan header HTTP yang sama X-Forwarded-For
yang dibahas nanti di artikel ini.
Catatan
Spring Cloud Gateway sendiri juga merupakan proksi terbalik yang menyediakan layanan seperti perutean, pemfilteran permintaan, dan pembatasan laju. Jika layanan ini menyediakan semua fitur yang Anda butuhkan untuk skenario Anda, Anda mungkin tidak memerlukan proksi terbalik tambahan seperti Application Gateway atau Azure Front Door. Alasan paling umum untuk masih mempertimbangkan untuk menggunakan layanan Azure lainnya adalah untuk fitur WAF yang mereka berikan atau untuk kemampuan penyeimbangan beban global yang ditawarkan Azure Front Door.
Menjelaskan cara kerja Spring Cloud Gateway di luar cakupan artikel ini. Ini adalah layanan yang sangat fleksibel yang dapat Anda sesuaikan melalui kode atau konfigurasi. Untuk mempermudah hal-hal, artikel ini hanya menjelaskan pendekatan murni berbasis konfigurasi yang tidak memerlukan perubahan kode. Anda dapat menerapkan pendekatan ini dengan menyertakan tradisional application.properties
atau application.yml
file di aplikasi Spring Cloud Gateway yang disebarkan. Anda juga dapat menerapkan pendekatan dengan menggunakan Config Server di Azure Spring Apps yang mengekstrak file konfigurasi ke dalam repositori Git. Dalam contoh berikut, kami menerapkan application.yml
pendekatan dengan sintaks YAML, tetapi sintaks yang setara application.properties
juga berfungsi.
Merutekan permintaan ke aplikasi Anda
Secara default, saat aplikasi Anda di Azure Spring Apps tidak memiliki titik akhir yang ditetapkan untuk aplikasi atau domain kustom yang dikonfigurasi untuk aplikasi tersebut, aplikasi tersebut tidak dapat dijangkau dari luar. Saat aplikasi mendaftarkan dirinya dengan Spring Cloud Service Registry, Spring Cloud Gateway dapat menemukan aplikasi sehingga dapat menggunakan aturan perutean untuk meneruskan lalu lintas ke aplikasi tujuan yang tepat.
Akibatnya, satu-satunya aplikasi yang perlu memiliki titik akhir yang ditetapkan untuknya di Azure Spring Apps adalah aplikasi Spring Cloud Gateway Anda. Titik akhir ini membuatnya dapat dijangkau dari luar. Anda tidak boleh menetapkan titik akhir ke aplikasi lain. Jika tidak, aplikasi dapat dijangkau langsung daripada melalui Spring Cloud Gateway, yang pada gilirannya memungkinkan proksi terbalik dilewati.
Cara mudah untuk mengekspos semua aplikasi terdaftar melalui Spring Cloud Gateway adalah dengan menggunakan pencari definisi rute DiscoveryClient sebagai berikut:
spring:
cloud:
gateway:
discovery:
locator:
enabled: true
predicates:
- Path="/"+serviceId+"/**" # Include the Path predicate to retain default behavior
- (...)
Atau, Anda dapat mengekspos aplikasi tertentu secara selektif melalui Spring Cloud Gateway dengan menentukan rute khusus aplikasi:
spring:
cloud:
gateway:
routes:
- id: my_app1_route
uri: lb://MY-APP1
filters:
- RewritePath=/myapp1(?<segment>/?.*), $\{segment}
predicates:
- (...)
Dengan pendekatan pencari lokasi penemuan dan definisi rute eksplisit, Anda dapat menggunakan predikat rute untuk menolak permintaan yang tidak valid. Dalam hal ini, kami menggunakan fungsionalitas tersebut untuk memblokir permintaan yang tidak berasal dari proksi terbalik yang diharapkan yang berada di depan Azure Spring Apps.
Membatasi akses dengan header HTTP X-Forwarded-For
Saat Anda menyebarkan aplikasi ke Azure Spring Apps, klien HTTP atau proksi terbalik tidak terhubung langsung ke aplikasi. Lalu lintas jaringan melewati pengontrol ingress internal terlebih dahulu.
Catatan
Pendekatan ini berarti Anda memiliki tiga atau bahkan empat proksi terbalik dalam alur permintaan sebelum mencapai aplikasi Anda dalam skenario berikut. Ini adalah kemungkinan proksi terbalik: Azure Front Door dan/atau Application Gateway, pengontrol ingress, dan aplikasi Spring Cloud Gateway Anda.
Karena layanan tambahan, alamat IP klien jaringan langsung selalu merupakan komponen Azure Spring Apps internal. Alamat IP tidak pernah menjadi klien logis seperti proksi terbalik yang Anda harapkan untuk memanggil aplikasi Anda. Anda tidak dapat menggunakan alamat IP klien untuk pembatasan akses. Anda juga tidak dapat menggunakan predikat rute bawaan RemoteAddr
Spring Cloud Gateway untuk pemfilteran permintaan karena menggunakan alamat IP klien secara default.
Untungnya, Azure Spring Apps selalu menambahkan alamat IP klien logis ke X-Forwarded-For
header HTTP pada permintaan ke aplikasi Anda. Nilai header terakhir (paling kanan) X-Forwarded-For
selalu berisi alamat IP klien logis.
Untuk memfilter permintaan berdasarkan X-Forwarded-For
header, Anda dapat menggunakan predikat rute bawaanXForwarded Remote Addr
. Predikat ini memungkinkan Anda mengonfigurasi daftar alamat IP atau rentang IP proksi terbalik Anda yang diizinkan sebagai nilai paling tepat.
Catatan
XForwarded Remote Addr
Predikat rute memerlukan Spring Cloud Gateway versi 3.1.1 atau yang lebih baru. Jika Anda tidak dapat menggunakan buat beberapa perubahan kode pada aplikasi Spring Cloud Gateway Anda untuk memodifikasi cara RemoteAddr
predikat rute menentukan alamat IP klien. Anda dapat mencapai hasil yang sama seperti yang Anda lakukan dengan XForwarded Remote Addr
predikat rute. Konfigurasikan RemoteAddr
predikat rute untuk menggunakan XForwardedRemoteAddressResolver
dan mengonfigurasi yang terakhir dengan maxTrustedIndex
nilai 1
. Pendekatan ini mengonfigurasi aplikasi Spring Cloud Gateway Anda untuk menggunakan nilai X-Forwarded-For
header paling tepat sebagai alamat IP klien logis.
Konfigurasikan aplikasi Anda untuk melihat nama host dan URL permintaan yang benar
Saat Anda menggunakan Spring Cloud Gateway, ada faktor penting yang perlu dipertimbangkan. Spring Cloud Gateway mengatur header HTTP Host
pada permintaan keluar ke alamat IP internal instans aplikasi Anda, seperti Host: 10.2.1.15:1025
. Nama host permintaan yang dilihat kode aplikasi Anda bukan lagi nama host asli permintaan yang dikirim browser, seperti contoso.com
. Dalam beberapa kasus, hasil ini dapat menyebabkan masalah seperti cookie rusak atau URL pengalihan tidak berfungsi dengan baik. Untuk informasi selengkapnya tentang jenis masalah ini dan cara mengonfigurasi layanan proksi terbalik seperti Application Gateway atau Azure Front Door untuk menghindarinya, lihat Pelestarian nama host.
Spring Cloud Gateway memang menyediakan nama host asli di Forwarded
header. Ini juga mengatur header lain seperti X-Forwarded-Port
, X-Forwarded-Proto
, dan X-Forwarded-Prefix
sehingga aplikasi Anda dapat menggunakannya untuk membangun ulang URL permintaan asli. Di aplikasi Spring Framework, Anda dapat mencapai konfigurasi ini secara otomatis dengan mengatur server.forward-headers-strategy
pengaturan ke FRAMEWORK
di properti aplikasi Anda. (Jangan atur nilai ini ke NATIVE
. Jika tidak, header lain digunakan yang tidak memperhitungkan header yang diperlukan X-Forwarded-Prefix
.) Untuk informasi selengkapnya, lihat Berjalan di belakang server proksi front-end. Dengan konfigurasi ini, metode HttpServletRequest.getRequestURL memperhitungkan semua header ini dan mengembalikan URL permintaan yang tepat seperti yang dikirim oleh browser.
Catatan
Anda mungkin tergoda untuk menggunakan PreserveHostHeader
filter di Spring Cloud Gateway, yang mempertahankan nama host asli pada permintaan keluar. Namun, pendekatan ini tidak berfungsi karena nama host tersebut sudah dipetakan sebagai domain kustom di aplikasi Spring Cloud Gateway. Ini tidak dapat dipetakan untuk kedua kalinya pada aplikasi back-end akhir. Konfigurasi ini menyebabkan kesalahan HTTP 404
karena aplikasi back-end menolak permintaan masuk. Ini tidak mengenali nama host.
Skenario 3: Menggunakan Application Gateway dengan Spring Cloud Gateway
Skenario 3 menjelaskan cara menggunakan Application Gateway sebagai proksi terbalik untuk aplikasi yang dapat dijangkau secara publik melalui titik akhir Spring Cloud Gateway.
Diagram berikut menggambarkan arsitektur untuk Skenario 3:
Unduh file Visio arsitektur ini.
Saat Application Gateway berada di depan instans Azure Spring Apps, Anda menggunakan titik akhir yang ditetapkan dari aplikasi Spring Cloud Gateway sebagai kumpulan back-end. Contoh titik akhir adalah: myspringcloudservice-mygateway.azuremicroservices.io
. Karena Azure Spring Apps disebarkan di luar jaringan virtual, URL ini diselesaikan ke alamat IP publik. Ketika kumpulan back-end adalah titik akhir publik, Application Gateway menggunakan alamat IP publik front-end-nya untuk menjangkau layanan back-end.
Untuk mengizinkan hanya permintaan dari instans Application Gateway Anda untuk mencapai Spring Cloud Gateway, Anda dapat mengonfigurasi XForwarded Remote Addr
predikat rute. Konfigurasikan predikat untuk hanya mengizinkan permintaan dari alamat IP publik khusus Application Gateway Anda seperti yang ditunjukkan dalam contoh berikut:
(...)
predicates:
- XForwardedRemoteAddr="20.103.252.85"
Skenario 4: Menggunakan Azure Front Door dengan Spring Cloud Gateway
Skenario 4 menjelaskan cara menggunakan Azure Front Door sebagai proksi terbalik untuk aplikasi yang dapat dijangkau secara publik melalui titik akhir Spring Cloud Gateway.
Diagram berikut menggambarkan arsitektur untuk Skenario 4:
Unduh file Visio arsitektur ini.
Mirip dengan Skenario 3, konfigurasi ini menggunakan URL publik aplikasi Spring Cloud Gateway sebagai kumpulan back-end atau asal di Azure Front Door. Contoh titik akhir adalah: https://myspringcloudservice-mygateway.azuremicroservices.io
.
Karena Azure Front Door adalah layanan global dengan banyak lokasi tepi, Azure Front Door menggunakan banyak alamat IP untuk berkomunikasi dengan kumpulan back-end-nya. Dokumentasi Azure Front Door menjelaskan cara mengunci akses ke backend untuk hanya mengizinkan lalu lintas Azure Front Door. Namun, dalam skenario ini, Anda tidak mengontrol jaringan Azure tempat aplikasi Anda disebarkan. Sayangnya, Anda tidak dapat menggunakan AzureFrontDoor.Backend
tag layanan untuk mendapatkan daftar lengkap alamat IP Azure Front Door keluar yang dijamin saat ini. Sebagai gantinya, Anda harus mengunduh rentang IP Azure dan tag layanan, menemukan AzureFrontDoor.Backend
bagian , dan menyalin semua rentang IP dari addressPrefixes
array ke dalam XForwarded Remote Addr
konfigurasi predikat rute.
Penting
Rentang IP yang digunakan oleh Azure Front Door dapat berubah. Rentang IP Azure otoritatif dan file tag layanan diterbitkan setiap minggu dan merekam perubahan apa pun pada rentang IP. Untuk memastikan konfigurasi Anda tetap terkini, verifikasi rentang IP setiap minggu dan perbarui konfigurasi Anda sesuai kebutuhan (idealnya, dengan cara otomatis). Untuk menghindari overhead pemeliharaan pendekatan ini, Anda dapat menyebarkan Azure Spring Apps di jaringan virtual dengan skenario lain yang dijelaskan dengan menggunakan NSG dengan AzureFrontDoor.Backend
tag layanan.
Karena rentang IP Azure Front Door dibagikan dengan organisasi lain, Anda juga harus memastikan Anda mengunci akses hanya ke instans Azure Front Door spesifik Anda, berdasarkan X-Azure-FDID
header HTTP yang berisi unik Front Door ID
Anda . Anda dapat membatasi akses dengan menggunakan Header
predikat rute, yang menolak permintaan kecuali header HTTP tertentu memiliki nilai tertentu.
Dalam skenario ini, konfigurasi predikat rute Spring Cloud Gateway Anda mungkin terlihat seperti contoh berikut:
(...)
predicates:
- XForwardedRemoteAddr="13.73.248.16/29","20.21.37.40/29","20.36.120.104/29","20.37.64.104/29", ...(and many more)...
- Header="X-Azure-FDID", "00112233-4455-6677-8899-aabbccddeeff"
Kontributor
Microsoft mempertahankan konten ini. Kontributor berikut mengembangkan konten asli.
Penulis utama:
- Jelle Druyts | Insinyur Pelanggan Utama
Untuk melihat profil LinkedIn nonpublik, masuk ke LinkedIn.
Langkah berikutnya
- Arsitektur referensi Azure Spring Apps
- Tanggung jawab pelanggan untuk menjalankan Azure Spring Apps di Azure Virtual Networks