Cloud Armor dan Load Balancer Proxy TCP/SSL - Codelab untuk pembatasan kapasitas dan daftar Penolakan IP

1. Pengantar

Load balancing Google Cloud di-deploy di edge jaringan Google pada titik kehadiran (POP) Google di seluruh dunia. Traffic pengguna yang diarahkan ke load balancer Proxy TCP masuk ke POP terdekat dari 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 Proxy TCP 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.

Load balancer proxy TCP/SSL Google Cloud memungkinkan Anda melakukan proxy traffic jenis TCP/ SSL di antara layanan backend.

Dalam codelab ini, Anda akan membuat load balancer proxy TCP/SSL dengan layanan backend dan menggunakan Cloud Armor untuk membatasi akses ke load balancer hanya kepada sekumpulan klien pengguna tertentu.

be33dadf836374bb.png

Yang akan Anda pelajari

  • Cara membuat load balancer proxy TCP/SSL
  • Cara membuat kebijakan keamanan Cloud Armor
  • Cara membuat aturan daftar tolak IP untuk load balancer proxy TCP/SSL di Cloud Armor
  • Cara membuat aturan pembatasan kapasitas untuk load balancer proxy TCP di Cloud Armor
  • Cara menambahkan kebijakan keamanan ke layanan backend load balancing TCP/SSL

Yang Anda butuhkan

  • Pengetahuan dasar tentang Google Compute Engine ( codelab)
  • Pengetahuan dasar mengenai networking dan TCP/IP
  • Pengetahuan dasar mengenai command line Unix/Linux
  • Sangat membantu jika Anda telah menyelesaikan tur jaringan di GCP dengan Jaringan di Google Cloud

2. Persyaratan

Penyiapan lingkungan mandiri

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

Catatan: Anda dapat mengakses Cloud Console dengan mudah dengan mengingat URL-nya, yaitu console.cloud.google.com.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

Ingat project ID, nama unik di semua project Google Cloud (maaf, nama di atas telah digunakan dan tidak akan berfungsi untuk Anda!) Project_ID selanjutnya akan dirujuk di codelab ini sebagai PROJECT_ID.

Catatan: Jika menggunakan akun Gmail, Anda dapat menetapkan lokasi default ke Tidak ada organisasi. Jika Anda menggunakan akun Google Workspace, pilih lokasi yang sesuai untuk organisasi Anda.

  1. Selanjutnya, Anda harus mengaktifkan penagihan di Cloud Console untuk menggunakan resource Google Cloud.

Menjalankan operasi dalam codelab ini seharusnya tidak memerlukan banyak biaya, bahkan mungkin tidak sama sekali. Pastikan untuk mengikuti petunjuk yang ada di bagian "Membersihkan" yang memberi tahu Anda cara menonaktifkan resource sehingga tidak menimbulkan penagihan di luar tutorial ini. 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

Mengaktifkan 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. Membuat layanan backend

Buat 2 instance sebagai berikut - Buat instance1-b1 di zona us-central1-b

gcloud compute instances create vm-1-b1 \
    --image-family debian-9 \
    --image-project debian-cloud \
    --tags tcp-lb \
    --zone us-central1-b \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install apache2 -y
      sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
      sudo service apache2 restart
      echo '<!doctype html><html><body><h1>This is VM1-b1 in central1-b</h1></body></html>' | tee /var/www/html/index.html
      EOF"

Membuat instance 1-b2 di zona us-central1-b

gcloud compute instances create vm-1-b2 \
    --image-family debian-9 \
    --image-project debian-cloud \
    --tags tcp-lb \
    --zone us-central1-b \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install apache2 -y
      sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
      sudo service apache2 restart
      echo '<!doctype html><html><body><h1>This is VM1-b2 in central1-b</h1></body></html>' | tee /var/www/html/index.html
      EOF"

Membuat grup instance vm-ig1

gcloud compute instance-groups unmanaged create vm-ig1  --zone us-central1-b

Buat port bernama untuk grup instance. Untuk lab ini, kita akan menggunakan port 110

    gcloud compute instance-groups set-named-ports vm-ig1 \
--named-ports tcp 110:110 --zone us-central1-b

Menambahkan instance ke grup instance

gcloud compute instance-groups unmanaged add-instances vm-ig1 \
   --instances vm-1-b1,vm-1-b2 --zone us-central1-b

4. Mengonfigurasi load balancer

Selanjutnya, kita akan membuat health check.

gcloud compute health-checks create tcp my-tcp-health-check --port 110

Buat layanan backend

gcloud compute backend-services create my-tcp-lb  --global-health-checks --global \
--protocol TCP --health-checks my-tcp-health-check --timeout 5m --port-name tcp110

Menambahkan grup instance ke layanan backend

gcloud compute backend-services add-backend my-tcp-lb --global --instance-group \ vm-ig1 --instance-group-zone us-central1-b --balancing-mode UTILIZATION \ --max-utilization 0.8

Mengonfigurasi proxy TCP target

gcloud compute target-tcp-proxies create my-tcp-lb-target-proxy --backend-service \ my-tcp-lb --proxy-header NONE

Mencadangkan alamat IPv4 statis global

Anda akan menggunakan alamat IP ini untuk menjangkau layanan load balanced.

gcloud compute addresses create tcp-lb-static-ipv4  --ip-version=IPV4   --global

Konfigurasi aturan penerusan global untuk alamat IP LB.

gcloud compute forwarding-rules create my-tcp-lb-ipv4-forwarding-rule \
    --global --target-tcp-proxy my-tcp-lb-target-proxy --address LB_STATIC_IPV4 \ --ports 110

5. Membuat aturan firewall untuk load balancer proxy TCP

gcloud compute firewall-rules create allow-tcplb-and-health \
   --source-ranges 130.211.0.0/22,35.191.0.0/16 \
   --target-tags tcp-lb \
   --allow tcp:110

Setelah load balancer dibuat, ujilah dengan perintah berikut

Curl LB_IP:110

Selanjutnya buat VM untuk Validasi akses penolakan ke LB

Anda harus membuat 2 instance, masing-masing dengan alamat IP publik dan bernama test-server1 dan test-server2

6. Membuat Kebijakan Keamanan di Cloud Armor

Di bagian ini, Anda akan membuat kebijakan keamanan backend dan 2 aturan dalam kebijakan di Cloud Armor.

Aturan pertama akan menolak kumpulan IP terbatas agar tidak mengakses Load Balancer TCP dengan menetapkan kebijakan keamanan untuk menolak IP tertentu dan aturan kedua akan melakukan pembatasan kapasitas.

  1. Di Cloud Shell(lihat "Memulai Cloud Shell" di bagian "Penyiapan dan Persyaratan" untuk mengetahui petunjuk cara menggunakan Cloud Shell), buat kebijakan keamanan layanan backend yang disebut rate-limit-and-deny-tcp sebagai berikut
gcloud compute security-policies create rate-limit-and-deny-tcp \
    --description "policy for tcp proxy rate limiting and IP deny"

Menambahkan Aturan ke Kebijakan Keamanan

Selanjutnya, tambahkan aturan daftar tolak ke kebijakan Cloud Armor "rate-limit-and-deny-tcp".

gcloud compute security-policies rules create 1000 --action deny --security-policy \ rate-limit-and-deny-tcp --description "deny test-server1" --src-ip-ranges \ "enter-test-server-1ip-here"

Menambahkan aturan pembatasan kapasitas ke kebijakan keamanan Cloud Armor "rate-limit-and-deny-tcp"

gcloud compute security-policies rules create 3000   \ --security-policy=rate-limit-and-deny-tcp  \       
--expression="true"  --action=rate-based-ban  --rate-limit-threshold-count=5  \          
--rate-limit-threshold-interval-sec=60  --ban-duration-sec=300      \         
--conform-action=allow  --exceed-action=deny-404  --enforce-on-key=IP

Lampirkan kebijakan ke layanan backend Proxy TCP:

Jalankan perintah berikut untuk memastikan bahwa kebijakan keamanan terpasang ke layanan backend Proxy TCP.

gcloud compute backend-services update my-tcp-lb --security-policy \ rate-limit-and-deny-tcp

Mengaktifkan logging di Load Balancer Proxy TCP

gcloud beta compute backend-services update my-tcp-lb \ 
--enable-logging --logging-sample-rate=1

7. Validasi aturan daftar tolak

Validasi aturan daftar tolak dengan login ke server pengujian yang IP-nya ditentukan dalam aturan daftar tolak dan jalankan perintah berikut

Curl LB_IP:110

Permintaan langsung dapat memberikan respons dari LB, tetapi tunggu hingga permintaan curl ditolak atau dihapus, lalu lihat log di Cloud Logging untuk memverifikasi entri log terkait aturan penolakan IP yang dipicu.

Buka Cloud Logging, lalu di bagian resource, pilih jenis resource sebagai "tcp_ssl_proxy_rule" dan tetapkan target backend sebagai "my-tcp-lb".

Dengan resource yang ditentukan untuk pemfilteran, kita dapat memvalidasi bahwa aturan penolakan IP berlaku dari nilai PRIORITY 1000 dalam entri log dan tindakan yang dikonfigurasi "DENY" berlaku karena keduanya diinstruksikan dari aturan penolakan dan IP ditolak seperti yang ditunjukkan di bawah

db9b835e0360dcaf.png

8. Memvalidasi aturan pembatasan kapasitas

Validasikan bahwa aturan batas kapasitas diterapkan dengan mengirim banyak permintaan dalam jangka waktu singkat yang melebihi batas yang ditentukan (5 permintaan per menit).

Setelah selesai, klik lihat log di layanan Cloud Armor. Tindakan ini akan mengarahkan Anda ke logging cloud tempat Anda dapat memfilter log berdasarkan load balancer untuk melihat log Cloud Armor saat masuk.

Entri pembatasan kapasitas akan terlihat seperti screenshot di bawah. Kita dapat memvalidasi aturan batas kapasitas dari nilai PRIORITY sebesar 3000 dalam entri log dan dari tindakan yang dikonfigurasi, tindakan "RATE BASED BAN" berlaku sesuai petunjuk dari aturan pembatasan kapasitas.

37c76e5d7532623.png

9. Pembersihan Lingkungan

Pastikan untuk membersihkan infrastruktur yang dibuat untuk menghindari biaya operasional infrastruktur yang tidak digunakan.

Cara tercepat adalah menghapus seluruh Project di GCP untuk memastikan tidak ada resource nonaktif yang terlewatkan.Namun, hapus resource satu per satu dengan perintah berikut

Load balancer Proxy TCP

gcloud compute target-tcp-proxies delete my-tcp-lb

Grup instance

gcloud compute instance-groups unmanaged delete vm-ig1

Kedua instance VM pengujian yang dibuat

gcloud compute instances delete Instance_name --zone=instance_zone

Layanan backend

gcloud compute backend-services delete BACKEND_SERVICE_NAME

Aturan Cloud Armor dalam kebijakan

gcloud compute security-policies rules delete 1000  \ --security-policy=rate-limit-and-deny-tcp && 
gcloud compute security-policies rules delete 3000  \ --security-policy=rate-limit-and-deny-tcp

Kebijakan keamanan Cloud Armor

gcloud compute security-policies delete rate-limit-and-deny-tcp