Anda dapat menambahkan header respons HTTP ke aplikasi web untuk meningkatkan keamanannya. Topik ini menjelaskan cara menggunakan filter Envoy untuk menambahkan header respons HTTP dalam Service Mesh (ASM).
Prasyarat
Sebuah instance Service Mesh (ASM) telah dibuat dan klaster ACK telah ditambahkan ke instance tersebut. Untuk informasi lebih lanjut, lihat Buat Instance ASM dan Tambahkan Klaster ke Instance ASM.
Anda telah terhubung ke instance ASM menggunakan kubectl. Untuk informasi lebih lanjut, lihat Gunakan kubectl pada Bidang Kontrol untuk Mengakses Sumber Daya Istio.
Sebuah aplikasi telah diterapkan di instance ASM. Untuk informasi lebih lanjut, lihat Terapkan Aplikasi di Instance ASM.
Sumber daya Istio yang diperlukan telah didefinisikan. Untuk informasi lebih lanjut, lihat Gunakan Sumber Daya Istio untuk Merutekan Lalu Lintas ke Versi Layanan yang Berbeda.
Informasi Latar Belakang
Open Web Application Security Project (OWASP) menyediakan praktik terbaik dan kerangka pengkodean untuk menjelaskan cara menggunakan header respons HTTP guna meningkatkan keamanan aplikasi. Tabel berikut menjelaskan header respons HTTP dasar.
Header respons HTTP | Nilai default | Deskripsi |
Content-Security-Policy | frame-ancestors none; | Mencegah serangan clickjacking dari situs web lain. |
X-XSS-Protection | 1;mode=block | Mengaktifkan filter skrip lintas situs (XSS) (jika tersedia) pada browser sehingga browser dapat menghentikan rendering saat serangan XSS terdeteksi. |
X-Content-Type-Options | Nosniff | Menonaktifkan sniffing konten pada browser. |
Referrer-Policy | no-referrer | Menentukan untuk tidak mengirimkan informasi referrer bersama permintaan. |
X-Download-Options | noopen | Mencegah versi lama Internet Explorer dari mengizinkan unduhan dieksekusi secara otomatis. |
X-DNS-Prefetch-Control | off | Menonaktifkan prefetch DNS untuk tautan eksternal di halaman web. |
Server | envoy | Server yang menghasilkan respons. Header respons HTTP ini secara otomatis disetel oleh gateway ingress Istio. |
X-Powered-by | Tidak tersedia | Berisi informasi tentang lingkungan hosting atau framework lainnya. Jangan setel header respons HTTP ini jika Anda ingin menyembunyikan nama dan informasi versi server aplikasi yang rentan. |
Feature-Policy | camera 'none'; microphone 'none'; geolocation 'none'; encrypted-media 'none'; payment 'none'; speaker 'none'; usb 'none'; | Menentukan fitur dan operasi API yang tersedia bagi browser. |
Dalam contoh ini, aplikasi Bookinfo digunakan. Untuk informasi lebih lanjut, lihat Terapkan Aplikasi di Instance ASM. Anda dapat menjalankan perintah curl berikut untuk memeriksa header respons HTTP aplikasi:
curl -I http://{alamat IP gateway ingress}/productpage
# Contoh keluaran
HTTP/1.1 200 OK
content-type: text/html; charset=utf-8
content-length: 5183
server: istio-envoy
date: Tue, 28 Jan 2020 08:15:21 GMT
x-envoy-upstream-service-time: 28Keluaran perintah menunjukkan bahwa aplikasi tidak mengandung salah satu header respons HTTP yang dijelaskan dalam tabel sebelumnya. Anda dapat membuat filter Envoy untuk menambahkan header respons HTTP guna meningkatkan keamanan aplikasi.
Prosedur
Terapkan filter Envoy berdasarkan versi instance ASM Anda.
Untuk instance ASM dengan versi 1.12.4.0 atau lebih baru
Anda dapat menerapkan filter Envoy melalui halaman Market Place di Konsol ASM.
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi kiri, pilih .
Di halaman Market Place, klik Add HTTP response headers. Di halaman Plugin Detail, klik Create Plug-in Instance.
Di bagian Plugin Effective scope, pilih Gateway Scope dan klik Add ASM Gateway to effective scope.
Di kotak dialog Add ASM Gateway to effective scope, pilih ingressgateway di bagian Select ASM Gateway, klik ikon
untuk menambahkan ingressgateway ke bagian selected, lalu klik OK.Catataningressgateway adalah nama gateway ingress default. Anda juga dapat memilih gateway lain tempat header respons HTTP yang ditambahkan akan berlaku.
Di bagian Plugin Config, hapus semua konten dari editor kode YAML, aktifkan Plugin Switch, dan tunggu hingga plugin diaktifkan.
Setelah plugin diaktifkan, ASM secara otomatis membuat filter Envoy.
Untuk instance ASM dengan versi lebih lama dari 1.12.4.0
Anda dapat menjalankan perintah berikut untuk menerapkan filter Envoy:
proxyVersion: Menentukan versi Istio tempat filter Envoy berlaku. Atur nilainya sesuai dengan versi Istio Anda. Beberapa bidang dalam filter Envoy mungkin tidak kompatibel dengan versi Istio. Anda mungkin perlu memodifikasi bidang dalam filter Envoy berdasarkan versi Istio Anda:Jika versi Istio Anda adalah 1.8 atau lebih lama, atur parameter
proxyVersionke versi Istio Anda dan gantienvoy.filters.network.http_connection_managerdenganenvoy.http_connection_manager,envoy.filters.http.routerdenganenvoy.router, dantype.googleapis.com/envoy.extensions.filters.http.lua.v3.Luadengantype.googleapis.com/envoy.config.filter.http.lua.v2.Lua.Jika versi Istio Anda adalah 1.9 atau lebih baru, atur parameter
proxyVersionke versi Istio Anda.
Jalankan perintah berikut untuk memeriksa apakah header respons HTTP berhasil ditambahkan:
Ganti
{alamat IP gateway ingress}dengan alamat IP aktual gateway ingress Anda. Untuk informasi lebih lanjut tentang cara mendapatkan alamat IP gateway ingress, lihat "Dapatkan Alamat IP Gateway Ingress" dalam topik Gunakan Sumber Daya Istio untuk Merutekan Lalu Lintas ke Versi Layanan yang Berbeda.curl -I http://{alamat IP gateway ingress}/productpageKeluaran yang Diharapkan:
HTTP/1.1 200 OK content-type: text/html; charset=utf-8 content-length: 4183 server: istio-envoy date: Tue, 28 Jan 2020 09:07:01 GMT x-envoy-upstream-service-time: 17 content-security-policy: frame-ancestors none; x-frame-options: deny x-xss-protection: 1; mode=block x-content-type-options: nosniff referrer-policy: no-referrer x-download-options: noopen x-dns-prefetch-control: off feature-policy: camera 'none';microphone 'none';geolocation 'none';encrypted-media 'none';payment 'none';speaker 'none';usb 'none';Keluaran perintah menunjukkan bahwa aplikasi mengandung header respons HTTP dasar yang dijelaskan dalam tabel sebelumnya.
FAQ
Mengapa saya tidak dapat mengakses aplikasi menggunakan URL dengan karakter spesial?
Format pengodean karakter spesial mungkin tidak sesuai dengan aturan pengodean URL. Misalnya, pengodean Unicode digunakan alih-alih pengodean ASCII untuk karakter spesial Á. Untuk informasi lebih lanjut, lihat Envoy tidak dapat mem-parsing karakter non-alfanumerik jika tidak di-urlencode.