Questa pagina contiene informazioni sulla configurazione delle regole di Google Cloud Armor per applicare limiti di frequenza per client configurando un'azione di limitazione o di blocco basato sulla frequenza. Prima di configurare la limitazione di frequenza, assicurati di conoscere le informazioni contenute nella panoramica della limitazione di frequenza.
Prima di iniziare
Le sezioni seguenti descrivono tutti i ruoli e le autorizzazioni di Identity and Access Management (IAM) necessari per configurare le policy di sicurezza di Cloud Armor. Per i casi d'uso descritti in questo documento, ti serve solo l'autorizzazione compute.securityPolicies.create.
Configura le autorizzazioni IAM per le policy di sicurezza di Cloud Armor
Le seguenti operazioni richiedono il ruolo Identity and Access Management (IAM) Compute Security Admin (roles/compute.securityAdmin):
- Configurare, modificare, aggiornare ed eliminare una policy di sicurezza Cloud Armor
- Utilizzare i seguenti metodi API:
SecurityPolicies insertSecurityPolicies deleteSecurityPolicies patchSecurityPolicies addRuleSecurityPolicies patchRuleSecurityPolicies removeRule
Un utente con il ruolo Compute Network Admin (roles/compute.networkAdmin) può eseguire le seguenti operazioni:
- Impostare una policy di sicurezza di Cloud Armor per un servizio di backend
- Utilizzare i seguenti metodi API:
BackendServices setSecurityPolicyBackendServices list(sologcloud)
Gli utenti con il ruolo Security Admin (roles/iam.securityAdmin) e il ruolo Compute Network Admin (roles/compute.networkAdmin) possono visualizzare le policy di sicurezza di Cloud Armor utilizzando i metodi dell'API SecurityPolicies get, list e getRule.
Configura le autorizzazioni IAM per i ruoli personalizzati
La tabella seguente elenca le autorizzazioni di base dei ruoli IAM e i metodi dell'API associati.
| Autorizzazione IAM | Metodi dell'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 |
Regole per la limitazione basata sulla frequenza
Le regole per la limitazione basata sulla frequenza hanno il seguente formato in 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]
Limitazione di frequenza per singole chiavi
Ad esempio, il seguente comando gcloud CLI crea una regola throttle
con priorità 105 e un limite di frequenza di 100 richieste ogni 60 secondi per ogni indirizzo IP nell'intervallo 1.2.3.0/24. Le richieste che superano questo limite restituiscono un codice di stato 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
Ad esempio, il seguente comando gcloud CLI crea una regola throttle
con priorità 110 e un limite di frequenza di 10 richieste ogni 60 secondi per ogni valore univoco dell'intestazione HTTP User-Agent in tutte le richieste provenienti da indirizzi IP nell'intervallo 1.2.3.0/24. Le richieste che superano questo limite restituiscono un codice di stato 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'
Infine, puoi applicare blocchi basati sulla frequenza agli utenti che hanno un cookie di esenzione reCAPTCHA valido. Ad esempio, il seguente comando gcloud CLI crea una regola throttle con priorità 115 e un limite di frequenza di 20 richieste ogni 5 minuti per ogni cookie di esenzione reCAPTCHA univoco in tutte le richieste che hanno un cookie di esenzione reCAPTCHA valido. Le richieste che superano questo limite vengono reindirizzate per il test reCAPTCHA. Per saperne di più sui cookie di esenzione e sul test reCAPTCHA, consulta la panoramica della gestione dei bot di 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"
Limitazione di frequenza in base a fingerprint JA4 e JA3
Puoi utilizzare le fingerprint JA4 e JA3 come chiavi di limitazione di frequenza. L'esempio seguente crea una regola throttle con priorità 1000 e un limite di frequenza di 20 richieste ogni 5 minuti che viene applicata alle richieste con il percorso /login, in base alla fingerprint JA4 del client. Le richieste che superano questo limite vengono rifiutate.
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
Limitazione di frequenza in base all'indirizzo IP dell'utente
Quando ricevi richieste che passano attraverso un proxy upstream, puoi applicare la limitazione di frequenza in base all'indirizzo IP del client di origine. L'esempio seguente crea una regola throttle con priorità 1000 e un limite di frequenza di 20 richieste ogni 5 minuti che viene applicata alle richieste con il percorso /login, in base all'indirizzo IP del client di origine. Le richieste che superano questo limite vengono rifiutate.
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
Per saperne di più sul supporto degli indirizzi IP utente, consulta il riferimento per il linguaggio delle regole.
Limitazione di frequenza in base a più chiavi
Puoi anche limitare il traffico in base a più chiavi di limitazione di frequenza utilizzando il flag enforce-on-key-configs. Questo flag sostituisce sia il flag enforce-on-key sia il flag enforce-on-key-name. Il flag enforce-on-key-configs richiede un elenco separato da virgole di coppie KEY=NAME, anche se non è necessario fornire un nome per alcune chiavi.
L'esempio seguente crea una regola throttle per la policy POLICY_NAME con priorità 105 e un limite di frequenza di 100 richieste ogni 60 secondi per ogni combinazione di HTTP-PATH e site_id in tutte le richieste provenienti da indirizzi IP nell'intervallo 1.2.3.0/24. Le richieste che superano questo limite restituiscono un codice di stato 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"
Regole per i blocchi basati sulla frequenza
Le regole per i blocchi basati sulla frequenza hanno il seguente formato in 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]
Ad esempio, il seguente comando gcloud CLI crea una regola di blocco basato sulla frequenza con priorità 100 per ogni indirizzo IP le cui richieste corrispondono a un'intestazione fish con valore tuna che blocca l'indirizzo per 300 secondi quando la sua frequenza supera un limite di 50 richieste ogni 120 secondi. Le richieste bloccate restituiscono un codice di stato 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
Ad esempio, il seguente comando gcloud CLI crea una regola di blocco basato sulla frequenza con priorità 101 per limitare tutte le richieste il cui codice regione corrisponde a US a 10 richieste ogni 60 secondi. Inoltre, la regola blocca le richieste provenienti dalla regione US per 300 secondi quando la loro frequenza supera un limite di 1000 richieste ogni 600 secondi.
Le richieste bloccate restituiscono un codice di stato 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
Ad esempio, il seguente comando gcloud CLI crea una regola di blocco basato sulla frequenza con priorità 102 per limitare tutte le richieste provenienti da qualsiasi intervallo di indirizzi IP di origine a 20 richieste ogni 60 secondi. Inoltre, la regola blocca le richieste provenienti da qualsiasi intervallo di indirizzi IP di origine per 600 secondi quando la frequenza delle richieste supera un limite di 500 richieste ogni 400 secondi. Le richieste bloccate restituiscono un codice di stato 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
Modifica una regola di limitazione in una regola di blocco basato sulla frequenza
Puoi utilizzare il seguente comando per modificare l'azione di una regola esistente da un'azione di limitazione a un'azione di blocco basato sulla frequenza.
gcloud compute security-policies rules update 105 \
--action=rate-based-ban \
--security-policy=sec-policy \
--ban-duration-sec=600
Non puoi modificare l'azione di una regola esistente da un'azione di blocco basato sulla frequenza a un'azione di limitazione.
Passaggi successivi
- Consulta la panoramica della limitazione di frequenza.
- Scopri di più sulla gestione dei bot.