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 denial of service terdistribusi dari Google. Cloud Armor dikaitkan secara erat dengan Load Balancer HTTP Google Cloud dan memungkinkan Anda menginterogasi traffic masuk untuk permintaan yang tidak diinginkan. Dengan fitur pembatasan kapasitas di layanan ini, Anda dapat 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 menguji daya tahan Load Balancer dan menambahkan kebijakan pembatasan kapasitas Cloud Armor untuk membatasi traffic yang mencapai resource backend Anda.

2e1b99d22f4f32a.pngS

Yang akan Anda pelajari

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

Yang Anda butuhkan

  • Jaringan 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 GCP Console, 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

Konfigurasikan 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 terhubung dengan backend di rentang IP yang sama.

  1. Di Konsol Cloud, buka Navigation menu ( mainmenu.png) > Jaringan VPC > 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 semua nilai lainnya dalam setelan default:

Properti

Nilai (masukkan nilai atau pilih opsi yang ditentukan)

Name

default-allow-health-check

Network

default

Targets

Specified target tags

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. Di bawah ini 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 Anda gunakan 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 Add 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 semua nilai lainnya dalam setelan default -

Properti

Nilai (masukkan nilai atau pilih opsi yang ditentukan)

Network (Di bagian Network Interfaces)

default

Subnet (Di Bawah Antarmuka Jaringan)

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 Salin dari 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.pngS

  1. Klik Create instance group. Pilih Grup instance terkelola baru (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

Multiple zones

Wilayah

us-east1

Template instance

template-us-east1

Penskalaan otomatis > Kebijakan Penskalaan Otomatis > Klik ikon Pensil > Jenis metrik

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.

Sekarang, ulangi prosedur yang sama guna 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

Multiple zones

Region

europe-west1

Template instance

template-europe-west1

Penskalaan otomatis > Kebijakan Penskalaan Otomatis > Klik ikon Pensil > Jenis metrik

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

Konfigurasikan 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 pada diagram jaringan:

2e1b99d22f4f32a.pngS

Memulai konfigurasi

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

8197d8f041e8eafd.pngS

  1. Pilih From Internet to my VMs, Classic HTTP(S) Load Balancer dan klik Continue.
  2. Setel 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 semua nilai lainnya dalam setelan default:

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.pngS

  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.pngS

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

dab4b15c13917786.png

  1. Klik Create untuk membuat layanan backend.

2db64614f855f239.pngS

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 lainnya. Namun, Anda tidak mengonfigurasi aturan Host dan jalur di lab ini.

  1. Klik Frontend configuration.
  2. Tetapkan nilai berikut dan biarkan semua nilai lainnya dalam setelan default:

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 semua nilai lainnya dalam setelan default:

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 load balancer dibuat.
  3. Klik nama load balancer (http-lb).
  4. Perhatikan alamat IPv4 dan IPv6 dari load balancer untuk tugas berikutnya. Keduanya 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]. Ganti [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]. Ganti [LB_IP_v6] dengan alamat IPv6 load balancer.

812d1fc75d9dfb3c.pngS

Menguji daya tahan Load Balancer HTTP

Buat VM baru untuk menyimulasikan beban pada 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 > Instance VM.
  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 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), 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.

Pada awalnya, 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 secara default, traffic diteruskan ke backend terdekat, tetapi 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 pengepungan.

7. Membuat Kebijakan Pembatasan Kapasitas Cloud Armor

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

  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. Berikutnya, 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. Pasang kebijakan keamanan ke http-backend layanan backend:
gcloud compute backend-services update http-backend \
    --security-policy rate-limit-siege –-global
  1. Di Konsol, buka Navigation menu > Keamanan Jaringan > Cloud Armor.
  2. Pengepungan pembatasan kapasitas klik. Kebijakan Anda akan terlihat seperti berikut:

8be87aa31c2ed74e.pngS

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. Anda akan menerima respons 200.
curl http://$LB_IP
  1. Di terminal SSH siege-vm, jalankan perintah berikut untuk menyimulasikan pemuatan:
siege -c 250 http://$LB_IP

Output-nya 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 > Keamanan Jaringan > Cloud Armor.
  3. Klik kapasitas pembatasan.
  4. Klik Logs.

f8be7c01c3d7c8f5.png

  1. Klik View policy logs.
  2. Di halaman Logging, pastikan untuk 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(pemantauan bahasa kueri), Anda dapat menyalin dan menempel 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 Query results.
  3. Luaskan httpRequest. Permintaan harus berasal dari alamat IP siege-vm. Jika bukan, luaskan entri log lainnya.
  4. Luaskan jsonPayload.
  5. Luaskan formattedSecurityPolicy.

151f575ba7b3bde9.pngS

Perhatikan bahwa ConfigurationAction 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 pengepungan di grafik. Anda juga akan mendapati bahwa traffic dengan kapasitas terbatas tidak mencapai backend dan diblokir oleh kebijakan Cloud Armor.

Selamat! Anda telah menyelesaikan lab ini tentang Pembatasan Tingkat dengan Cloud Armor

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

8. Pembersihan Lab

  1. Buka Keamanan Jaringan >> Cloud Armor >> %POLICY NAME% dan pilih hapus -

eeafa7cafa11c4c7.png

  1. Buka Jaringan >> Layanan jaringan >> 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 > Grup Instance. Pilih grup instance terkelola dan klik "delete" -

5027d56977997f70.pngS

Konfirmasi penghapusan dengan mengetik "delete" ke dalam {i>textbox<i}.

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

  1. Buka Instance templates dari panel sebelah kiri**.** Pilih kedua template instance dan klik delete -

8d88abacd32c11ce.pngS

  1. Buka VM instances dari panel sebelah kiri**.** Pilih elipsis di sebelah instance siege-vm, lalu klik delete.

2b58ab43695836e9.pngS

  1. Buka Navigation menu ( mainmenu.png) > Jaringan VPC > Firewall. Pilih izinkan pemeriksaan kondisi default lalu klik hapus -

561d5e771d36d85.pngS

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 menguji daya tahan Load Balancer dengan VM dan menolak memasukkan alamat IP melalui pembatasan kapasitas 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 kapasitas Cloud Armor.
  • Cara memvalidasi bahwa Kebijakan Pembatasan Kapasitas berfungsi sebagaimana mestinya.

Langkah berikutnya

  • Coba siapkan Kebijakan Pembatasan Kapasitas berdasarkan rentang IP sumber. Contoh perintah di bawah ini -
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 Kapasitas berdasarkan kode wilayah. Contoh perintah di bawah ini -
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