Configurare la limitazione di frequenza

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 divieto in base alla frequenza. Prima di configurare limitazione di frequenza, assicurati di conoscere bene le informazioni riportate nella panoramica del limite di frequenza.

Prima di iniziare

Le sezioni seguenti spiegano tutti i ruoli e le autorizzazioni di Identity and Access Management (IAM) necessari per configurare i criteri di sicurezza di Google Cloud Armor. Per i casi d'uso descritti in questo documento, è sufficiente l'autorizzazione compute.securityPolicies.create.

Configura le autorizzazioni IAM per i criteri di sicurezza di Google Cloud Armor

Le seguenti operazioni richiedono il ruolo Amministratore sicurezza per l'elaborazione (roles/compute.securityAdmin) di Identity and Access Management (IAM):

  • Configurazione, modifica, aggiornamento ed eliminazione di un criterio di sicurezza di Google Cloud Armor
  • Utilizzando i seguenti metodi API:
    • SecurityPolicies insert
    • SecurityPolicies delete
    • SecurityPolicies patch
    • SecurityPolicies addRule
    • SecurityPolicies patchRule
    • SecurityPolicies removeRule

Un utente con il ruolo Amministratore rete Compute (roles/compute.networkAdmin) può eseguire le seguenti operazioni:

  • Impostazione di un criterio di sicurezza di Google Cloud Armor per un servizio di backend
  • Utilizzando i seguenti metodi API:
    • BackendServices setSecurityPolicy
    • BackendServices list (solo gcloud)

Gli utenti con il ruolo Amministratore sicurezza (roles/iam.securityAdmin) e il ruolo Amministratore rete di Compute possono visualizzare i criteri di sicurezza di Google Cloud Armor utilizzando i metodi SecurityPolicies API get, list e getRule.

Configurare le autorizzazioni IAM per i ruoli personalizzati

La tabella seguente elenca le autorizzazioni di base dei ruoli IAM e i relativi metodi API associati.

Autorizzazioni IAM Metodi 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

Regole per la limitazione in base alla frequenza

Le regole per la limitazione in base alla frequenza hanno il seguente formato nellGoogle 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 in 1.2.3.0/24. Le richieste che superano il limite di throttling restaurano un codice di errore 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

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 per tutte le richieste provenienti da indirizzi IP in 1.2.3.0/24. Le richieste che superano il limite di throttling restituiscono un codice di errore 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'

Infine, puoi emettere ban basati sulla frequenza per gli utenti che dispongono di 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 dispongono di un cookie di esenzione reCAPTCHA valido. Le richieste che superano il limite di throttling vengono reindirizzate per test reCAPTCHA. Per maggiori informazioni sui cookie di esenzione e test reCAPTCHA, consulta la panoramica della gestione dei 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"

Limitazione di frequenza in base alle impronte JA3

Puoi utilizzare le impronte JA3 come chiave 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 corrisponde alle richieste con il percorso /login, in base alla impronta JA3 del client. Le richieste che superano il limite di throttling 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-ja3-fingerprint

Limitazione della frequenza in base all'indirizzo IP dell'utente

Quando ricevi richieste tramite un proxy a monte, 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 corrisponde alle richieste con il percorso /login in base all'indirizzo IP del client di origine. Le richieste che superano il limite di throttling 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 ulteriori informazioni sul supporto degli indirizzi IP degli utenti, consulta il riferimento al linguaggio delle regole.

Limitazione della frequenza in base a più chiavi

Puoi anche limitare il traffico in base a più chiavi di limitazione di frequenza utilizzando il enforce-on-key-configs flag. 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 di coppie KEY=NAME separate da virgole; tuttavia, non è necessario fornire un nome per alcune chiavi.

L'esempio seguente crea una regola throttle per il criterio POLICY_NAME con priorità 105 con 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 in 1.2.3.0/24. Le richieste che superano il limite di throttling restituiscono un codice di errore 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"

Regole per le esclusioni basate sulle tariffe

Le regole per i ban basati sulla frequenza hanno il seguente formato nellgcloud 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 divieto basata sulla frequenza con priorità 100 per ogni indirizzo IP le cui richieste corrispondono a un fish di intestazione con valore tuna e lo vieta per 300 secondi quando la sua frequenza supera un limite di 50 richieste ogni 120 secondi. Le richieste vietate restituiscono un codice di errore 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

Ad esempio, il seguente comando gcloud CLI crea una regola di divieto basata sulla frequenza con priorità 101 per limitare a 10 richieste ogni 60 secondi tutte le richieste il cui codice regione corrisponde a US. La regola vieta inoltre le richieste dalla regione US per 300 secondi quando la loro frequenza supera un limite di 1000 richieste ogni 600 secondi. Le richieste vietate restituiscono un codice di errore 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

Ad esempio, il seguente comando gcloud CLI crea una regola di divieto basata 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. La regola vieta inoltre le richieste 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 vietate restituiscono un codice di errore 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

Modificare una regola di limitazione in una regola di esclusione basata sulla frequenza

Puoi utilizzare il seguente comando per modificare l'azione di una regola esistente da un'azione di limitazione a un'azione di divieto basata 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'esclusione basata sulla frequenza a un'azione di limitazione.

Passaggi successivi