Configura la limitazione di frequenza

Questa pagina contiene informazioni sulla configurazione delle regole di Google Cloud Armor di applicare limiti di frequenza per client configurando una limitazione o un'esclusione basata sulla frequenza un'azione. Prima di configurare la limitazione di frequenza, assicurati di conoscere meglio le informazioni panoramica sulla limitazione di frequenza.

Prima di iniziare

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

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

Le seguenti operazioni richiedono Identity and Access Management (IAM) Ruolo Amministratore sicurezza Compute (roles/compute.securityAdmin):

  • Configurazione, modifica, aggiornamento ed eliminazione di Google Cloud Armor criterio di sicurezza
  • Se utilizzi i seguenti metodi dell'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
  • Se utilizzi i seguenti metodi dell'API:
    • BackendServices setSecurityPolicy
    • BackendServices list (solo gcloud)

Utenti con il ruolo Amministratore sicurezza (roles/iam.securityAdmin) e il ruolo Amministratore rete Compute può visualizzare la sicurezza di Google Cloud Armor i criteri utilizzando i metodi dell'API SecurityPolicies get, list e getRule.

Configura le autorizzazioni IAM per i ruoli personalizzati

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

Autorizzazioni IAM Metodi dell'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 basata sulla frequenza

Le regole per la limitazione basata sulla frequenza hanno il seguente formato: 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 su chiavi singole

Ad esempio, il seguente comando gcloud CLI crea un throttle regola con priorità 105 con un limite di frequenza di 100 richieste ogni 60 secondi per ogni indirizzo IP in 1.2.3.0/24. Richieste che superano il limite di limitazione restituiscono 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 un throttle regola con priorità 110 con un limite di frequenza di 10 richieste ogni 60 secondi per ciascuna valore univoco dell'intestazione HTTP User-Agent in tutte le richieste provenienti dall'IP indirizzi in 1.2.3.0/24. Le richieste che superano il limite di limitazione restituiscono un valore 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 esclusioni basate sulle tariffe per gli utenti che hanno un reCAPTCHA valido. cookie di esenzione. Ad esempio, il seguente comando gcloud CLI crea una regola throttle con priorità 115 con un limite di frequenza di 20 richieste ogni 5 minuti per ogni cookie di esenzione reCAPTCHA univoco in tutte le richieste con un cookie di esenzione reCAPTCHA valido. Richieste che superano le di limitazione del traffico vengono reindirizzati per test reCAPTCHA. Per ulteriori informazioni sui cookie di esenzione e test reCAPTCHA. consulta la panoramica sulla 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 basata sulle impronte JA3

Puoi usare le impronte JA3 come chiave per limitazione di frequenza. Nell'esempio che segue crea una regola throttle con priorità 1000 con un limite di frequenza di 20 richieste per 5 minuti che corrispondono alle richieste con il percorso /login, in base sull'impronta JA3 del client. Le richieste che superano il limite di limitazione vengono negata.

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 di frequenza in base all'indirizzo IP dell'utente

Quando ricevi richieste che arrivano tramite un proxy upstream, puoi applicare limitazione di frequenza basata sull'indirizzo IP del client di origine. Le seguenti esempio crea una regola throttle con priorità 1000 con un limite di frequenza di 20 richieste per 5 minuti che corrispondono alle richieste con il percorso /login, in base all'indirizzo IP del client di origine. Richieste che superano la limitazione sono negati.

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 dell'indirizzo IP dell'utente, vedi riferimento al linguaggio di regole.

Limitazione di frequenza basata su più chiavi

Puoi anche limitare il traffico in base a più chiavi di limitazione di frequenza utilizzando il metodo enforce-on-key-configs flag. Questo flag sostituisce entrambi i flag enforce-on-key e il flag enforce-on-key-name. Il flag enforce-on-key-configs richiede un elenco separato da virgole di KEY=NAME coppie; anche se non è necessario fornire un il nome di 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 ciascuna 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. Richieste che superano la limitazione limit 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 le esclusioni basate 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 un'interfaccia utente regola di esclusione con priorità 100 per ogni indirizzo IP le cui richieste corrispondono a un'intestazione fish con valore tuna ed escludilo per 300 secondi quando la frequenza supera un di 50 richieste ogni 120 secondi. Le richieste escluse restituiscono un codice di errore di 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 un'interfaccia utente regola di esclusione con priorità 101 per limitare tutte le richieste il cui codice regione corrisponde a US a 10 richieste ogni 60 secondi. La regola esclude anche le richieste dalla regione US per 300 secondi quando la frequenza supera il limite di 1000 richieste ogni 600 secondi. Le richieste escluse restituiscono un codice di errore pari a 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 un'interfaccia utente regola di esclusione con priorità 102 per limitare tutte le richieste da qualsiasi indirizzo IP di origine di 20 richieste ogni 60 secondi. La regola esclude anche le richieste da qualsiasi origine Intervallo di indirizzi IP per 600 secondi quando la frequenza delle richieste supera il limite di 500 richieste ogni 400 secondi. Le richieste escluse restituiscono un codice di errore pari a 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 un da un'azione di limitazione a un'azione di esclusione basata sul tasso.

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

Non puoi cambiare l'azione di una regola esistente da un'azione di esclusione basata sulla tariffa a un'azione di limitazione.

Passaggi successivi