Mengonfigurasi pembatasan kapasitas

Halaman ini berisi informasi tentang cara mengonfigurasi aturan Google Cloud Armor untuk menerapkan batas frekuensi per klien dengan mengonfigurasi tindakan pembatasan atau pelarangan berbasis frekuensi. Sebelum mengonfigurasi pembatasan kecepatan, pastikan Anda memahami informasi dalam ringkasan pembatasan kecepatan.

Sebelum memulai

Bagian berikut menjelaskan semua peran dan izin Identity and Access Management (IAM) yang diperlukan untuk mengonfigurasi kebijakan keamanan Google Cloud Armor. Untuk kasus penggunaan dalam dokumen ini, Anda hanya memerlukan izin compute.securityPolicies.create.

Menyiapkan izin IAM untuk kebijakan keamanan Google Cloud Armor

Operasi berikut memerlukan peran Compute Security Admin (roles/compute.securityAdmin) Identity and Access Management (IAM):

  • Mengonfigurasi, mengubah, memperbarui, dan menghapus kebijakan keamanan Google Cloud Armor
  • Menggunakan metode API berikut:
    • SecurityPolicies insert
    • SecurityPolicies delete
    • SecurityPolicies patch
    • SecurityPolicies addRule
    • SecurityPolicies patchRule
    • SecurityPolicies removeRule

Pengguna dengan peran Admin Jaringan Compute (roles/compute.networkAdmin) dapat melakukan operasi berikut:

  • Menetapkan kebijakan keamanan Google Cloud Armor untuk layanan backend
  • Menggunakan metode API berikut:
    • BackendServices setSecurityPolicy
    • BackendServices list (gcloud saja)

Pengguna dengan peran Admin Keamanan (roles/iam.securityAdmin) dan peran Admin Jaringan Compute dapat melihat kebijakan keamanan Google Cloud Armor menggunakan metode API SecurityPolicies get, list, dan getRule.

Menyiapkan izin IAM untuk peran kustom

Tabel berikut mencantumkan izin dasar peran IAM dan metode API terkaitnya.

Izin IAM Metode API
compute.securityPolicies.create SecurityPolicies insert
compute.securityPolicies.delete SecurityPolicies delete
compute.securityPolicies.get SecurityPolicies get
SecurityPolicies getRule
compute.securityPolicies.list SecurityPolicies list
compute.securityPolicies.use BackendServices setSecurityPolicy
compute.securityPolicies.update SecurityPolicies patch
SecurityPolicies addRule
SecurityPolicies patchRule
SecurityPolicies removeRule
compute.backendServices.setSecurityPolicy BackendServices setSecurityPolicy

Aturan untuk throttling berbasis tarif

Aturan untuk pembatasan berbasis rasio memiliki format berikut di Google Cloud CLI:

gcloud compute security-policies rules create PRIORITY \
    --security-policy=SECURITY_POLICY \
    {--expression=EXPRESSION | --src-ip-ranges=SRC_IP_RANGE} \
    --action "throttle" \
    --rate-limit-threshold-count=RATE_LIMIT_THRESHOLD_COUNT \
    --rate-limit-threshold-interval-sec=RATE_LIMIT_THRESHOLD_INTERVAL_SEC \
    --conform-action=[allow] \
    --exceed-action=[deny-403|deny-404|deny-429|deny-502|redirect] \
    --exceed-redirect-type=[google-recaptcha|external-302] \
    --exceed-redirect-target=REDIRECT_URL \
    --enforce-on-key=[IP | ALL | HTTP-HEADER | XFF-IP | HTTP-COOKIE | HTTP-PATH | SNI | REGION-CODE] \
    --enforce-on-key-name=[HTTP_HEADER_NAME|HTTP_COOKIE_NAME]

Pembatasan kapasitas pada kunci tunggal

Misalnya, perintah gcloud CLI berikut membuat aturan throttle pada prioritas 105 dengan batas kecepatan 100 permintaan setiap 60 detik untuk setiap alamat IP di 1.2.3.0/24. Permintaan yang melebihi batas throttling akan menampilkan kode error 429.

gcloud compute security-policies rules create 105 \
    --security-policy SECURITY_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

Misalnya, perintah gcloud CLI berikut membuat aturan throttle pada prioritas 110 dengan batas kecepatan 10 permintaan setiap 60 detik untuk setiap nilai unik header HTTP User-Agent di semua permintaan yang berasal dari alamat IP di 1.2.3.0/24. Permintaan yang melebihi batas throttling akan menampilkan kode error 429.

gcloud compute security-policies rules create 110 \
    --security-policy SECURITY_POLICY \
    --src-ip-ranges="1.2.3.0/24" \
    --action=throttle \
    --rate-limit-threshold-count=10 \
    --rate-limit-threshold-interval-sec=60 \
    --conform-action=allow \
    --exceed-action=deny-429 \
    --enforce-on-key=HTTP-HEADER \
    --enforce-on-key-name='User-Agent'

Terakhir, Anda dapat mengeluarkan larangan berbasis rasio untuk pengguna yang memiliki cookie pengecualian reCAPTCHA yang valid. Misalnya, perintah gcloud CLI berikut membuat aturan throttle pada prioritas 115 dengan batas kecepatan 20 permintaan per 5 menit untuk setiap cookie pengecualian reCAPTCHA unik di semua permintaan yang memiliki cookie pengecualian reCAPTCHA yang valid. Permintaan yang melebihi batas pembatasan akan dialihkan untuk penilaian reCAPTCHA. Untuk informasi selengkapnya tentang cookie pengecualian dan penilaian reCAPTCHA, lihat ringkasan pengelolaan bot.

gcloud compute security-policies rules create 115 \
    --security-policy SECURITY_POLICY \
    --expression="token.recaptcha_exemption.valid" \
    --action=throttle \
    --rate-limit-threshold-count=20 \
    --rate-limit-threshold-interval-sec=300 \
    --conform-action=allow \
    --exceed-action=redirect \
    --exceed-redirect-type=google-recaptcha \
    --enforce-on-key=HTTP-COOKIE \
    --enforce-on-key-name="recaptcha-ca-e"

Pembatasan kapasitas berdasarkan sidik jari JA4 dan JA3

Anda dapat menggunakan sidik jari JA4 dan JA3 sebagai kunci pembatasan kecepatan. Contoh berikut membuat aturan throttle pada prioritas 1000 dengan batas kecepatan 20 permintaan per 5 menit yang cocok dengan permintaan dengan jalur /login, berdasarkan sidik jari JA4 klien. Permintaan yang melebihi batas throttling akan ditolak.

gcloud compute security-policies rules create 1000 \
    --security-policy SECURITY_POLICY \
    --expression "request.path.matches('/login')" \
    --action throttle \
    --rate-limit-threshold-count 20 \
    --rate-limit-threshold-interval-sec 300 \
    --conform-action allow \
    --exceed-action deny-429 \
    --enforce-on-key-configs tls-ja4-fingerprint

Pembatasan frekuensi berdasarkan alamat IP pengguna

Saat menerima permintaan yang datang melalui proxy upstream, Anda dapat menerapkan pembatasan frekuensi berdasarkan alamat IP klien asal. Contoh berikut membuat aturan throttle pada prioritas 1000 dengan batas laju 20 permintaan per 5 menit yang cocok dengan permintaan dengan jalur /login, berdasarkan alamat IP klien asal. Permintaan yang melebihi batas pembatasan akan ditolak.

gcloud compute security-policies rules create 1000 \
    --security-policy SECURITY_POLICY
    --expression "request.path.matches('/login')"
    --action throttle
    --rate-limit-threshold-count 20
    --rate-limit-threshold-interval-sec 300
    --conform-action allow
    --exceed-action deny-429
    --enforce-on-key-configs user-ip

Untuk mengetahui informasi selengkapnya tentang dukungan alamat IP pengguna, lihat referensi bahasa aturan.

Pembatasan kapasitas berdasarkan beberapa kunci

Anda juga dapat membatasi traffic berdasarkan beberapa kunci pembatasan kecepatan menggunakan flag enforce-on-key-configs. Flag ini menggantikan flag enforce-on-key dan flag enforce-on-key-name. Flag enforce-on-key-configs memerlukan daftar pasangan KEY=NAME yang dipisahkan koma; meskipun demikian, Anda tidak perlu memberikan nama untuk beberapa kunci.

Contoh berikut membuat aturan throttle untuk kebijakan POLICY_NAME dengan prioritas 105 dan batas frekuensi 100 permintaan setiap 60 detik untuk setiap kombinasi HTTP-PATH dan site_id di semua permintaan yang berasal dari alamat IP di 1.2.3.0/24. Permintaan yang melebihi batas pembatasan akan menampilkan kode error 429.

gcloud compute security-policies rules create 105 \
    --security-policy=POLICY_NAME \
    --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-configs="HTTP-PATH,HTTP-COOKIE=site_id"

Aturan untuk pemblokiran berbasis tingkat

Aturan untuk pemblokiran berbasis rasio memiliki format berikut di gcloud CLI:

gcloud compute security-policies rules create PRIORITY \
    --security-policy=SECURITY_POLICY \
    {--expression=EXPRESSION | --src-ip-ranges=SRC_IP_RANGE} \
    --action "rate-based-ban" \
    --rate-limit-threshold-count=RATE_LIMIT_THRESHOLD_COUNT \
    --rate-limit-threshold-interval-sec=RATE_LIMIT_THRESHOLD_INTERVAL_SEC \
    --ban-duration-sec=BAN_DURATION_SEC \
    --ban-threshold-count=BAN_THRESHOLD_COUNT \
    --ban-threshold-interval-sec=BAN_THRESHOLD_INTERVAL_SEC \
    --conform-action=[allow] \
    --exceed-action=[deny-403|deny-404|deny-429|deny-502|redirect] \
    --exceed-redirect-type=[google-recaptcha|external-302] \
    --exceed-redirect-target=REDIRECT_URL \
    --enforce-on-key=[IP | ALL | HTTP-HEADER | XFF-IP | HTTP-COOKIE | HTTP-PATH | SNI | REGION-CODE] \
    --enforce-on-key-name=[HTTP_HEADER_NAME|HTTP_COOKIE_NAME]

Misalnya, perintah gcloud CLI berikut membuat aturan pelarangan berbasis kecepatan dengan prioritas 100 untuk setiap alamat IP yang permintaannya cocok dengan header fish dengan nilai tuna dan melarangnya selama 300 detik jika kecepatannya melebihi batas 50 permintaan untuk setiap 120 detik. Permintaan yang dilarang menampilkan kode error 404.

gcloud compute security-policies rules create 100 \
    --security-policy=sec-policy \
    --expression="request.headers['fish'] == 'tuna'" \
    --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

Misalnya, perintah gcloud CLI berikut membuat aturan pelarangan berbasis laju pada prioritas 101 untuk membatasi semua permintaan yang kode regionnya cocok dengan US hingga 10 permintaan per 60 detik. Aturan ini juga melarang permintaan dari region US selama 300 detik jika rasio permintaan melebihi batas 1.000 permintaan per 600 detik. Permintaan yang dilarang menampilkan kode error 403.

gcloud 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 ALL

Misalnya, perintah gcloud CLI berikut membuat aturan pelarangan berbasis kecepatan pada prioritas 102 untuk membatasi semua permintaan dari rentang alamat IP sumber ke 20 permintaan per 60 detik. Aturan ini juga melarang permintaan dari rentang alamat IP sumber mana pun selama 600 detik jika rasio permintaan melampaui batas 500 permintaan per 400 detik. Permintaan yang dilarang menampilkan kode error 429.

gcloud compute security-policies rules create 102 \
    --security-policy sec-policy \
    --src-ip-ranges="*" \
    --action rate-based-ban \
    --rate-limit-threshold-count 20 \
    --rate-limit-threshold-interval-sec 60 \
    --ban-duration-sec 600 \
    --ban-threshold-count 500 \
    --ban-threshold-interval-sec 400 \
    --conform-action allow \
    --exceed-action deny-429 \
    --enforce-on-key ALL

Mengubah aturan pembatasan menjadi aturan pelarangan berbasis kecepatan

Anda dapat menggunakan perintah berikut untuk mengubah tindakan aturan yang ada dari tindakan pembatasan ke tindakan pelarangan berbasis tarif.

gcloud compute security-policies rules update 105 \
--action=rate-based-ban \
--security-policy=sec-policy \
--ban-duration-sec=600

Anda tidak dapat mengubah tindakan aturan yang ada dari tindakan pelarangan berbasis tarif menjadi tindakan pembatasan.

Langkah berikutnya