Halaman ini berisi informasi tentang cara mengonfigurasi aturan Google Cloud Armor untuk menerapkan batas kapasitas per klien dengan mengonfigurasi tindakan throttle atau pemblokiran berbasis kapasitas. Sebelum mengonfigurasi pembatasan kapasitas, pastikan Anda memahami informasi di ringkasan pembatasan kapasitas.
Sebelum memulai
Bagian berikut menjelaskan semua peran dan izin Identity and Access Management (IAM) yang diperlukan untuk mengonfigurasi kebijakan keamanan Cloud Armor. Untuk kasus penggunaan di dokumen ini, Anda hanya memerlukan izin compute.securityPolicies.create.
Menyiapkan izin IAM untuk kebijakan keamanan Cloud Armor
Operasi berikut memerlukan peran Compute Security Admin Identity and Access Management (IAM) (roles/compute.securityAdmin):
- Mengonfigurasi, mengubah, memperbarui, dan menghapus kebijakan keamanan Cloud Armor
- Dengan menggunakan metode API berikut:
SecurityPolicies insertSecurityPolicies deleteSecurityPolicies patchSecurityPolicies addRuleSecurityPolicies patchRuleSecurityPolicies removeRule
Pengguna dengan
peran Compute Network Admin
(roles/compute.networkAdmin) dapat melakukan operasi berikut:
- Menetapkan kebijakan keamanan Cloud Armor untuk layanan backend
- Dengan menggunakan metode API berikut:
BackendServices setSecurityPolicyBackendServices list(gcloudsaja)
Pengguna dengan peran Security Admin
(roles/iam.securityAdmin) dan peran Compute Network Admin
(roles/compute.networkAdmin) dapat melihat kebijakan keamanan Cloud Armor
menggunakan metode API SecurityPolicies get, list, dan
getRule.
Menyiapkan izin IAM untuk peran khusus
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 getSecurityPolicies getRule |
compute.securityPolicies.list |
SecurityPolicies list |
compute.securityPolicies.use |
BackendServices setSecurityPolicy |
compute.securityPolicies.update |
SecurityPolicies patchSecurityPolicies addRuleSecurityPolicies patchRuleSecurityPolicies removeRule |
compute.backendServices.setSecurityPolicy |
BackendServices setSecurityPolicy |
Aturan untuk throttling berbasis kapasitas
Aturan untuk throttling berbasis kapasitas 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 kapasitas 100 permintaan setiap 60 detik untuk
setiap alamat IP di 1.2.3.0/24. Permintaan yang melebihi batas throttling
akan menampilkan kode status 429 Too Many Requests.
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 kapasitas 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 status 429 Too Many Requests.
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 pemblokiran berbasis kapasitas untuk pengguna yang memiliki cookie pengecualian reCAPTCHA yang valid. Misalnya, perintah gcloud CLI berikut
membuat aturan throttle pada prioritas 115 dengan batas kapasitas 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 throttling akan dialihkan untuk penilaian reCAPTCHA. Untuk
mengetahui informasi selengkapnya tentang cookie pengecualian dan penilaian
reCAPTCHA, lihat
Ringkasan pengelolaan bot Cloud Armor.
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 kapasitas. Contoh berikut membuat aturan throttle pada prioritas 1000 dengan batas kapasitas 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 kapasitas berdasarkan alamat IP pengguna
Saat menerima permintaan yang datang melalui proxy upstream, Anda dapat menerapkan pembatasan kapasitas berdasarkan alamat IP klien asal. Contoh berikut membuat aturan throttle pada prioritas 1000 dengan batas kapasitas 20 permintaan per 5 menit yang cocok dengan permintaan dengan jalur /login, berdasarkan alamat IP klien asal. 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 user-ip
Untuk mengetahui informasi selengkapnya tentang dukungan alamat IP pengguna, lihat referensi bahasa aturan.
Pembatasan kapasitas berdasarkan beberapa kunci
Anda juga dapat melakukan throttle traffic berdasarkan beberapa kunci pembatasan kapasitas 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, Anda tidak perlu memberikan nama untuk beberapa kunci.
Contoh berikut membuat aturan throttle untuk kebijakan
POLICY_NAME pada prioritas 105 dengan pembatasan kapasitas
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 throttling akan menampilkan kode status 429 Too Many Requests.
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 kapasitas
Aturan untuk pemblokiran berbasis kapasitas 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 pemblokiran berbasis kapasitas
dengan prioritas 100 untuk setiap alamat IP yang permintaannya cocok dengan header
fish dengan nilai tuna dan memblokirnya selama 300 detik jika kecepatannya melebihi
batas 50 permintaan untuk setiap 120 detik. Permintaan yang diblokir akan menampilkan kode status
404 Not Found.
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 pemblokiran berbasis kapasitas
pada prioritas 101 untuk membatasi semua permintaan yang kode regionnya cocok dengan US
hingga 10 permintaan per 60 detik. Aturan ini juga memblokir permintaan dari region US selama 300 detik jika kapasitas permintaan melebihi batas 1.000 permintaan per 600 detik.
Permintaan yang diblokir akan menampilkan kode status 403 Forbidden.
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 pemblokiran berbasis kapasitas
pada prioritas 102 untuk membatasi semua permintaan dari rentang alamat IP sumber
ke 20 permintaan per 60 detik. Aturan ini juga memblokir permintaan dari rentang alamat IP sumber mana pun selama 600 detik jika kapasitas permintaan melampaui batas 500 permintaan per 400 detik. Permintaan yang diblokir akan menampilkan kode status
429 Too Many Requests.
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 throttle menjadi aturan pemblokiran berbasis kapasitas
Anda dapat menggunakan perintah berikut untuk mengubah tindakan aturan yang ada dari tindakan throttle ke tindakan pemblokiran berbasis kapasitas.
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 pemblokiran berbasis kapasitas menjadi tindakan throttle.
Langkah berikutnya
- Lihat ringkasan pembatasan kapasitas.
- Pelajari pengelolaan bot lebih lanjut.