Pembatasan Kapasitas dengan Cloud Armor

1. Pengantar

Load balancing HTTP(S) Google Cloud di-deploy di edge jaringan Google pada titik kehadiran (POP) Google di seluruh dunia. Traffic pengguna yang diarahkan ke load balancer HTTP(S) masuk ke POP yang terdekat dengan pengguna dan selanjutnya mengalami load balancing melalui jaringan global Google ke backend terdekat yang memiliki kapasitas memadai.

Cloud Armor adalah sistem deteksi firewall aplikasi web (WAF) dan distributed denial of service Google. Cloud Armor terintegrasi erat dengan Load Balancer HTTP Google Cloud dan memungkinkan Anda memeriksa traffic masuk untuk menemukan permintaan yang tidak diinginkan. Fitur pembatasan frekuensi layanan ini memungkinkan Anda membatasi traffic ke resource backend berdasarkan volume permintaan dan mencegah traffic yang tidak diinginkan menggunakan resource di jaringan Virtual Private Cloud (VPC) Anda.

Dalam lab ini, Anda akan mengonfigurasi Load Balancer HTTP dengan backend global, seperti ditunjukkan pada diagram di bawah. Kemudian, Anda akan menjalankan stress test pada Load Balancer dan menambahkan kebijakan pembatasan frekuensi Cloud Armor untuk membatasi traffic yang mencapai resource backend Anda.

2e1b99d22f4f32a.png

Yang akan Anda pelajari

  • Cara menyiapkan Load Balancer HTTP dengan health check yang sesuai.
  • Cara membuat kebijakan pembatasan frekuensi Cloud Armor.
  • Cara memvalidasi bahwa kebijakan pembatasan kapasitas memblokir traffic saat menjalankan uji tekanan dari VM.

Yang Anda butuhkan

  • Networking Dasar dan pengetahuan tentang HTTP
  • Pengetahuan dasar mengenai command line Unix/Linux

2. Penyiapan dan Persyaratan

Penyiapan lingkungan mandiri

  1. Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API, dan Anda dapat memperbaruinya kapan saja.
  • Project ID harus unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis menghasilkan string unik; biasanya Anda tidak peduli dengan kata-katanya. Pada sebagian besar codelab, Anda harus mereferensikan Project ID (dan biasanya diidentifikasi sebagai PROJECT_ID). Jadi, jika Anda tidak menyukainya, buat ID acak lain, atau, Anda dapat mencoba sendiri dan melihat apakah tersedia. Kemudian file akan "dibekukan" setelah project dibuat.
  • Ada nilai ketiga, Nomor Project yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
  1. Selanjutnya, Anda harus mengaktifkan penagihan di Cloud Console untuk menggunakan API/resource Cloud. Menjalankan operasi dalam codelab ini seharusnya tidak memerlukan banyak biaya, bahkan mungkin tidak sama sekali. Untuk menonaktifkan resource agar tidak menimbulkan penagihan di luar tutorial ini, ikuti petunjuk "pembersihan" yang ada di akhir codelab. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.

Mulai Cloud Shell

Meskipun Google Cloud dapat dioperasikan dari jarak jauh menggunakan laptop Anda, dalam codelab ini, Anda akan menggunakan Google Cloud Shell, lingkungan command line yang berjalan di Cloud.

Dari Konsol GCP, klik ikon Cloud Shell di toolbar kanan atas:

bce75f34b2c53987.png

Hanya perlu waktu beberapa saat untuk penyediaan dan terhubung ke lingkungan. Jika sudah selesai, Anda akan melihat tampilan seperti ini:

f6ef2b5f13479f3a.png

Mesin virtual ini berisi semua alat pengembangan yang Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Semua pekerjaan Anda di lab ini dapat dilakukan hanya dengan browser.

Sebelum memulai

Di dalam Cloud Shell, pastikan project ID Anda sudah disiapkan

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
PROJECT_ID=[YOUR-PROJECT-NAME]
echo $PROJECT_ID

Aktifkan API

Aktifkan semua layanan yang diperlukan

gcloud services enable compute.googleapis.com
gcloud services enable logging.googleapis.com
gcloud services enable monitoring.googleapis.com

3. Mengonfigurasi aturan firewall untuk mengizinkan traffic HTTP ke backend

Konfigurasi aturan firewall untuk mengizinkan traffic HTTP ke backend dari health check Google Cloud dan Load Balancer.

Kita akan menggunakan jaringan VPC default yang dibuat di project Anda. Buat aturan firewall untuk mengizinkan traffic HTTP ke backend. Health check menentukan instance load balancer mana yang dapat menerima koneksi baru. Untuk load balancing HTTP, pemeriksaan health check ke load balanced instance berasal dari alamat dalam rentang 130.211.0.0/22 dan 35.191.0.0/16. Aturan firewall VPC Anda harus mengizinkan koneksi ini. Selain itu, load balancer berkomunikasi dengan backend pada rentang IP yang sama.

  1. Di Konsol Cloud, buka Navigation menu ( mainmenu.png) > VPC network > Firewall.

dbdf491e6d7863f3.png

  1. Perhatikan aturan firewall ICMP, internal, RDP, dan SSH yang ada.Setiap project Google Cloud dimulai dengan jaringan default dan aturan firewall ini.
  2. Klik Create Firewall Rule.
  3. Tetapkan nilai berikut dan biarkan nilai default untuk properti yang lain:

Properti

Nilai (masukkan nilai atau pilih opsi yang ditentukan)

Name

default-allow-health-check

Network

default

Target

Tag target yang ditentukan

Target tags

http-server

Filter sumber

Rentang IP

Rentang IP sumber

130.211.0.0/22, 35.191.0.0/16

Protocols and ports

Specified protocols and ports, lalu centang tcp

  1. Klik Buat.

Atau, jika Anda menggunakan command line gcloud. Berikut adalah perintahnya -

gcloud compute firewall-rules create default-allow-health-check --direction=INGRESS --priority=1000 --network=default --action=ALLOW --rules=tcp --source-ranges=130.211.0.0/22,35.191.0.0/16 --target-tags=http-server

4. Mengonfigurasi template instance dan membuat grup instance terkelola

Grup instance terkelola menggunakan template instance untuk membuat sebuah grup yang berisi instance yang identik. Gunakan ini untuk membuat backend Load Balancer HTTP.

Mengonfigurasi template instance

Template instance adalah resource API yang digunakan untuk membuat instance VM dan grup instance terkelola. Template instance menentukan jenis mesin, boot disk image, subnet, label, dan properti instance lainnya. Buat satu template instance untuk us-east1 dan satu lagi untuk europe-west1.

  1. Di Konsol Cloud, buka Navigation menu ( mainmenu.png) > Compute Engine > Instance templates, lalu klik Create instance template.
  2. Untuk Name, ketik us-east1-template.
  3. Untuk Series, pilih N1.
  4. Klik Networking, Disks, Security, Management , Sole-Tenancy.

b60e2a44c3e4d50e.png

  1. Buka bagian Pengelolaan -

ee57f20ce55298fd.png

  1. Di bagian Metadata, klik Tambahkan Item dan tentukan hal berikut:

Key

Nilai

startup-script-url

gs://cloud-training/gcpnet/httplb/startup.sh

  1. Klik Networking.
  2. Tetapkan nilai berikut dan biarkan nilai default untuk properti yang lain:

Properti

Nilai (masukkan nilai atau pilih opsi yang ditentukan)

Jaringan (Di bagian Network Interfaces)

default

Subnet (Di bagian Network Interfaces)

default (us-east1)

Tag jaringan

http-server

  1. Klik Buat.
  2. Tunggu hingga template instance selesai dibuat.

Sekarang, buat template instance lain untuk subnet-b dengan menyalin us-east1-template:

  1. Klik us-east1-template, lalu klik opsi Copy dari bagian atas.
  2. Untuk Name, ketik europe-west1-template.
  3. Klik Networking, Disks, Security, Management , Sole-Tenancy.
  4. Klik Networking.
  5. Di bagian Network Interfaces, edit antarmuka default. Untuk Subnet, pilih default (europe-west1).
  6. Klik Buat.

Membuat grup instance terkelola

Buat satu grup instance terkelola di us-east1 dan satu lagi di europe-west1.

  1. Masih di Compute Engine, klik Instance groups di menu kiri.

72319de055de3942.png

  1. Klik Create instance group. Pilih New managed instance group (stateless).
  2. Tetapkan nilai berikut dan biarkan semua nilai lainnya dalam setelan default:

Properti

Nilai (masukkan nilai atau pilih opsi yang ditentukan)

Nama

us-east1-mig

Lokasi

Beberapa zona

Wilayah

us-east1

Template instance

us-east1-template

Autoscaling > Autoscaling Policy > Click Pencil icon > Metric type

Pemakaian CPU

Target CPU utilization

80, klik Selesai.

Cool-down period

45

Minimum number of instances

1

Maximum number of instances

5

  1. Klik Buat.

Ulangi prosedur yang sama untuk membuat grup instance kedua untuk europe-west1-mig di europe-west1:

  1. Klik Create Instance group.
  2. Tetapkan nilai berikut dan biarkan semua nilai lainnya dalam setelan default:

Properti

Nilai (masukkan nilai atau pilih opsi yang ditentukan)

Name

europe-west1-mig

Location

Beberapa zona

Region

europe-west1

Template instance

europe-west1-template

Autoscaling > Autoscaling Policy > Click Pencil icon > Metric type

Pemakaian CPU

Target CPU utilization

80, klik Selesai.

Cool-down period

45

Minimum number of instances

1

Maximum number of instances

5

  1. Klik Buat.

5. Mengonfigurasi Load Balancer HTTP

Konfigurasi Load Balancer HTTP untuk menyeimbangkan traffic di antara dua backend (us-east1-mig di us-east1 dan europe-west1-mig di europe-west1), seperti yang diilustrasikan dalam diagram jaringan:

2e1b99d22f4f32a.png

Memulai konfigurasi

  1. Di Konsol Cloud, klik Navigation menu ( mainmenu.png) > klik Network Services > Load balancing, lalu klik Create load balancer.
  2. Di bagian HTTP(S) Load Balancing, klik Start configuration.

8197d8f041e8eafd.png

  1. Pilih From Internet to my VMs, Classic HTTP(S) Load Balancer, lalu klik Continue.
  2. Tetapkan Name ke http-lb.

Mengonfigurasi backend

Layanan backend mengarahkan traffic masuk ke satu atau beberapa backend yang terpasang. Setiap backend terdiri dari grup instance dan metadata kapasitas penyaluran tambahan.

  1. Klik Backend configuration.
  2. Untuk Backend services & backend buckets, klik Create a backend service.
  3. Tetapkan nilai berikut dan biarkan nilai default untuk properti yang lain:

Properti

Nilai (pilih opsi yang ditentukan)

Name

http-backend

Grup instance

us-east1-mig

Port numbers

80

Balancing mode

Rate

Maximum RPS

50 (per instance)

Kapasitas

100

  1. Klik Selesai.
  2. Klik Add backend.
  3. Tetapkan nilai berikut dan biarkan semua nilai lainnya dalam setelan default:

Properti

Nilai (pilih opsi yang ditentukan)

Instance group

europe-west1-mig

Port numbers

80

Balancing mode

Utilization

Maximum backend utilization

80

Capacity

100

  1. Klik Selesai.
  2. Untuk Health Check, pilih Create a health check.

199239806577ceac.png

  1. Tetapkan nilai berikut dan biarkan semua nilai lainnya dalam setelan default:

Properti

Nilai (pilih opsi yang ditentukan)

Name

http-health-check

Protocol

TCP

Port

80

20f7af9fce140475.png

  1. Klik Simpan.
  2. Centang kotak Enable Logging.
  3. Tetapkan Sample Rate ke 1:

dab4b15c13917786.png

  1. Klik Create untuk membuat layanan backend.

2db64614f855f239.png

Mengonfigurasi frontend

Aturan host dan jalur menentukan bagaimana traffic akan diarahkan. Misalnya, Anda dapat mengarahkan traffic video ke satu backend dan traffic statis ke backend lain. Namun, Anda tidak mengonfigurasi aturan Host dan jalur di lab ini.

  1. Klik Frontend configuration.
  2. Tetapkan nilai berikut dan biarkan nilai default untuk properti yang lain:

Properti

Nilai (masukkan nilai atau pilih opsi yang ditentukan)

Protocol

HTTP

IP version

IPv4

IP address

Ephemeral

Port

80

  1. Klik Done.
  2. Klik Add Frontend IP and port.
  3. Tetapkan nilai berikut dan biarkan nilai default untuk properti yang lain:

Properti

Nilai (masukkan nilai atau pilih opsi yang ditentukan)

Protocol

HTTP

IP version

IPv6

IP address

Ephemeral

Port

80

  1. Klik Done.

Meninjau dan membuat Load Balancer HTTP

  1. Klik Review and finalize.

2c88715aa5f22800.png

  1. Tinjau Backend services dan Frontend.

b2fffef90be309f0.png

  1. Klik Create.
  2. Tunggu hingga load balancer selesai dibuat.
  3. Klik nama load balancer (http-lb).
  4. Perhatikan alamat IPv4 dan IPv6 dari load balancer untuk tugas berikutnya. Masing-masing akan disebut sebagai [LB_IP_v4] dan [LB_IP_v6].

6. Menguji Load Balancer HTTP

Anda telah membuat Load Balancer HTTP untuk backend. Sekarang saatnya memverifikasi bahwa traffic diteruskan ke layanan backend.

Mengakses Load Balancer HTTP

Untuk menguji akses IPv4 ke Load Balancer HTTP, buka tab baru di browser dan tuju http://[LB_IP_v4]. Pastikan untuk mengganti [LB_IP_v4] dengan alamat IPv4 load balancer.

Jika Anda memiliki alamat IPv6 lokal, coba alamat IPv6 Load Balancer HTTP dengan membuka http://[LB_IP_v6]. Pastikan untuk mengganti [LB_IP_v6] dengan alamat IPv6 load balancer.

812d1fc75d9dfb3c.png

Menguji daya tahan Load Balancer HTTP

Buat VM baru untuk menyimulasikan beban di Load Balancer HTTP menggunakan siege. Kemudian, tentukan apakah traffic seimbang di kedua backend ketika bebannya tinggi.

  1. Di Konsol, buka Navigation menu ( mainmenu.png) > Compute Engine > VM instances.
  2. Klik Create instance.
  3. Tetapkan nilai berikut dan biarkan semua nilai lainnya dalam setelan default:

Properti

Nilai (masukkan nilai atau pilih opsi yang ditentukan)

Name

siege-vm

Wilayah

us-west1

Zone

us-west1-c

Series

N1

  1. Klik Buat.
  2. Tunggu hingga instance siege-vm selesai dibuat.
  3. Untuk siege-vm, klik SSH untuk meluncurkan terminal, lalu hubungkan.
  4. Jalankan perintah berikut untuk menginstal siege:
sudo apt-get -y install siege
  1. Untuk menyimpan alamat IPv4 Load Balancer HTTP di sebuah variabel lingkungan, jalankan perintah berikut dengan mengganti [LB_IP_v4] dengan alamat IPv4:
export LB_IP=[LB_IP_v4]
  1. Untuk menyimulasikan beban, jalankan perintah berikut:
siege -c 250 http://$LB_IP

Output akan terlihat seperti ini (jangan disalin, ini adalah contoh output):

New configuration template added to /home/student/.siege
Run siege -C to view the current settings in that file
** SIEGE 4.0.4
** Preparing 250 concurrent users for battle.
The server is now under siege...
  1. Di Konsol Cloud, klik Navigation menu ( mainmenu.png), lalu klik Network Services > Load balancing.
  2. Klik http-lb.
  3. Klik tab Monitoring. Pantau traffic antara Amerika Utara dan kedua backend selama 2 hingga 3 menit.

Pertama-tama, traffic hanya diarahkan ke us-east1-mig, tetapi seiring dengan meningkatnya RPS, traffic juga diarahkan ke europe-west1-mig.​​

ead1e6d5c1f4cc4b.png

Hal ini menunjukkan bahwa traffic diteruskan ke backend terdekat secara default. Namun, jika bebannya terlalu tinggi, traffic dapat didistribusikan di seluruh backend.

e5c6a657706c832c.png

  1. Kembali ke terminal SSH untuk siege-vm.
  2. Tekan CTRL+C untuk menghentikan siege.

7. Membuat Kebijakan Pembatasan Kecepatan Cloud Armor

Di bagian ini, Anda akan menggunakan Cloud Armor untuk menolak siege-vm agar tidak mengakses Load Balancer HTTP dengan menetapkan kebijakan pembatasan kecepatan.

  1. Di Cloud Shell(lihat "Mulai Cloud Shell" di bagian "Penyiapan dan Persyaratan" untuk mengetahui petunjuk cara menggunakan Cloud Shell), buat kebijakan keamanan melalui gcloud:
gcloud compute security-policies create rate-limit-siege \
    --description "policy for rate limiting"
  1. Selanjutnya, tambahkan aturan pembatasan kapasitas:
gcloud beta compute security-policies rules create 100 \
    --security-policy=rate-limit-siege     \
    --expression="true" \
    --action=rate-based-ban                   \
    --rate-limit-threshold-count=50           \
    --rate-limit-threshold-interval-sec=120   \
    --ban-duration-sec=300           \
    --conform-action=allow           \
    --exceed-action=deny-404         \
    --enforce-on-key=IP
  1. Lampirkan kebijakan keamanan ke backend http layanan backend:
gcloud compute backend-services update http-backend \
    --security-policy rate-limit-siege –-global
  1. Di Konsol, buka Navigation menu > Network Security > Cloud Armor.
  2. Click rate-limit-siege. Kebijakan Anda akan terlihat seperti berikut:

8be87aa31c2ed74e.png

Memverifikasi Kebijakan Keamanan

  1. Kembali ke terminal SSH siege-vm.
  2. Jalankan curl terhadap IP LB untuk memverifikasi bahwa Anda masih dapat terhubung ke IP tersebut, dan akan menerima respons 200.
curl http://$LB_IP
  1. Di terminal SSH untuk siege-vm, simulasikan beban dengan menjalankan perintah berikut:
siege -c 250 http://$LB_IP

Output akan terlihat seperti ini (jangan disalin; ini adalah contoh output):

** SIEGE 4.0.4
** Preparing 250 concurrent users for battle.
The server is now under siege...
  1. Pelajari log kebijakan keamanan untuk mengetahui apakah traffic ini juga diblokir.
  2. Di Konsol, buka Navigation menu > Network Security > Cloud Armor.
  3. Klik rate-limit-siege.
  4. Klik Logs.

f8be7c01c3d7c8f5.png

  1. Klik View policy logs.
  2. Di halaman Logging, pastikan Anda menghapus semua teks di Pratinjau kueri.
  3. Pilih resource sebagai Cloud HTTP Load Balancer > http-lb-forwarding-rule > http-lb, lalu klik Add. Atau, di bawah ini adalah kueri MQL(bahasa kueri pemantauan), yang dapat Anda salin dan tempel ke editor kueri -
resource.type="http_load_balancer" resource.labels.forwarding_rule_name="http-lb-forwarding-rule" resource.labels.url_map_name="http-lb"
  1. Sekarang klik Run Query.
  2. Luaskan entri log di Hasil kueri.
  3. Luaskan httpRequest. Permintaan ini harus berasal dari alamat IP siege-vm. Jika bukan, luaskan entri log lain.
  4. Luaskan jsonPayload.
  5. Luaskan enforcedSecurityPolicy.

151f575ba7b3bde9.png

Perhatikan bahwa configuredAction ditetapkan ke RATE_BASED_BAN dengan nama rate-limit-siege.

  1. Sebagai pemeriksaan tambahan, buka Navigation menu ( mainmenu.png), klik Network Services > Load balancing. Klik http-lb. Klik tab Monitoring.

ab9a8a66573a5ebd.png

Anda dapat melihat traffic serangan di grafik. Anda juga akan melihat bahwa traffic yang dibatasi lajunya tidak mencapai backend dan diblokir oleh kebijakan Cloud Armor.

Selamat! Anda telah menyelesaikan lab Pembatasan Kapasitas dengan Cloud Armor ini

©2020 Google LLC. Semua hak dilindungi undang-undang. Google dan logo Google adalah merek dagang dari Google LLC. Semua nama perusahaan dan produk lainnya mungkin merupakan merek dagang dari tiap-tiap perusahaan yang bersangkutan.

8. Pembersihan Lab

  1. Buka Network Security >> Cloud Armor >> %POLICY NAME%, lalu pilih hapus -

eeafa7cafa11c4c7.png

  1. Buka Networking >> Network services >> Load Balancing. Pilih load balancer yang Anda buat, lalu klik hapus.

3886458f25cfbd36.png

Pilih layanan backend dan health check sebagai resource tambahan yang akan dihapus -

a0193e91b2f4cb6f.png

  1. Buka Navigation menu ( mainmenu.png) > Compute Engine > Instance Groups. Pilih kedua grup instance terkelola, lalu klik hapus -

5027d56977997f70.png

Konfirmasi penghapusan dengan mengetik "delete" ke dalam kotak teks.

Tunggu hingga grup instance terkelola dihapus. Tindakan ini juga akan menghapus instance dalam grup. Anda dapat menghapus template hanya setelah grup instance dihapus.

  1. Buka Instance templates dari panel sebelah kiri**.** Pilih kedua template instance, lalu klik hapus -

8d88abacd32c11ce.png

  1. Buka VM instances dari panel sisi kiri**.** Pilih elipsis di samping instance siege-vm, lalu klik hapus.

2b58ab43695836e9.png

  1. Buka Navigation menu ( mainmenu.png) > VPC network > Firewall. Pilih default-allow-health-check, lalu klik hapus -

561d5e771d36d85.png

9. Selamat!

Anda berhasil menerapkan pembatasan kapasitas dengan Cloud Armor. Anda telah mengonfigurasi Load Balancer HTTP dengan backend di us-east1 dan europe-west1. Kemudian, Anda akan menguji daya tahan Load Balancer dengan VM dan menolak alamat IP melalui pembatasan kecepatan dengan Cloud Armor. Anda dapat mempelajari log kebijakan keamanan untuk mengidentifikasi alasan traffic diblokir.

Yang telah kita bahas

  • Cara menyiapkan template instance dan membuat grup instance terkelola.
  • Cara menyiapkan Load Balancer HTTP.
  • Cara membuat kebijakan pembatasan frekuensi Cloud Armor.
  • Cara memvalidasi bahwa Kebijakan Pembatasan Kecepatan berfungsi sebagaimana mestinya.

Langkah berikutnya

  • Coba siapkan Kebijakan Pembatasan Kapasitas berdasarkan rentang IP sumber. Contoh perintah di bawah -
gcloud alpha compute security-policies rules create 105 \
    --security-policy sec-policy     \
    --src-ip-ranges "1.2.3.0/24"     \
    --action throttle                \
    --rate-limit-threshold-count 100 \
    --rate-limit-threshold-interval-sec 60 \
    --conform-action allow           \
    --exceed-action deny-429         \
    --enforce-on-key IP
  • Coba siapkan Kebijakan Pembatasan Kecepatan berdasarkan kode wilayah. Contoh perintah di bawah -
gcloud alpha compute security-policies rules create 101 \
    --security-policy sec-policy     \
    --expression "origin.region_code == 'US'" \
    --action rate-based-ban                 \
    --rate-limit-threshold-count 10         \
    --rate-limit-threshold-interval-sec 60  \
    --ban-duration-sec 300           \
    --ban-threshold-count 1000       \
    --ban-threshold-interval-sec 600 \
    --conform-action allow           \
    --exceed-action deny-403         \
    --enforce-on-key IP