Google Cloud Armor offre funzionalità per proteggere le tue Google Cloud applicazioni da una serie di attacchi di livello 3 e 7. Le regole basate sulle tariffe consentono di proteggere le applicazioni da un volume elevato di richieste che sovraccaricano le istanze e bloccano l'accesso per gli utenti legittimi.
La limitazione di frequenza può:
- Impedisci a un client specifico di esaurire le risorse dell'applicazione.
- Proteggi le istanze dell'applicazione da picchi irregolari e imprevedibili nella frequenza delle richieste client.
Inoltre, quando una risorsa riceve un volume elevato di traffico da un numero ridotto di client, puoi impedire che gli altri client vengano interessati da picchi elevati di traffico provenienti da quel numero ridotto di client, consentendo alle tue risorse di gestire il maggior numero possibile di richieste.
Google Cloud Armor ha due tipi di regole basate sulla frequenza:
- Limitazione: puoi applicare un limite massimo di richieste per client o per tutti i client limitando i singoli client a una soglia configurata dall'utente.
- Ban basato sulla frequenza: puoi limitare la frequenza delle richieste che corrispondono a una regola in base al client e poi bloccare temporaneamente questi client per un periodo di tempo configurato se superano una soglia configurata dall'utente.
Quando configuri una regola con un'azione di ban basata sulla frequenza, non puoi modificarla in un'azione di limitazione in un secondo momento. Tuttavia, quando configuri una regola con un'azione di limitazione, puoi modificarla in un'azione di esclusione basata sulla frequenza in un secondo momento. Per ulteriori informazioni, vedi Limitazione della frequenza basata su più chiavi.
Google Cloud Armor applica la soglia di limitazione di frequenza a ogni backend associato. Ad esempio, se hai due servizi di backend e configuri una regola di limitazione della frequenza con una soglia di 1000 richieste al minuto, ogni servizio di backend può ricevere 1000 richieste al minuto prima che Google Cloud Armor applichi l'azione della regola.
Puoi visualizzare l'anteprima degli effetti delle regole di limitazione di frequenza in un criterio di sicurezza utilizzando la modalità di anteprima ed esaminando i log delle richieste.
Identificazione dei client per limitazione di frequenza
Google Cloud Armor identifica i singoli client per limitazione di frequenza utilizzando i seguenti tipi di chiavi per aggregare le richieste e applicare i limiti di frequenza:
- ALL: una singola chiave per tutti i client le cui richieste soddisfano la condizione di corrispondenza della regola.
- IP: una chiave univoca per ogni indirizzo IP di origine client le cui richieste soddisfano la condizione di corrispondenza della regola.
- HTTP_HEADER: una chiave univoca per ogni valore univoco dell'intestazione HTTP il cui nome è configurato. Il valore della chiave viene troncato ai primi 128 byte del valore dell'intestazione. Il tipo di chiave è impostato su ALL per impostazione predefinita se non è presente un'intestazione di questo tipo o se tenti di utilizzare questo tipo di chiave con un bilanciatore del carico di rete del proxy esterno.
- XFF_IP: una chiave univoca per ogni indirizzo IP di origine originale del client,
ovvero il primo indirizzo IP nell'elenco degli IP specificati nell'intestazione HTTP
X-Forwarded-For
. Il tipo di chiave viene impostato per impostazione predefinita sull'indirizzo IP se non è presente un'intestazione di questo tipo, se il valore non è un indirizzo IP valido o se tenti di utilizzare questo tipo di chiave con un bilanciatore del carico di rete proxy esterno. - HTTP_COOKIE: una chiave univoca per ogni valore di cookie HTTP il cui nome è configurato. Il valore della chiave viene troncato ai primi 128 byte del valore del cookie. Il tipo di chiave è impostato su ALL per impostazione predefinita se non è presente alcun cookie o se tenti di utilizzare questo tipo di chiave con un bilanciatore del carico di rete proxy esterno.
- HTTP_PATH: il percorso URL della richiesta HTTP. Il valore della chiave viene troncato ai primi 128 byte.
- SNI: l'indicazione del nome del server nella sessione TLS della richiesta HTTPS. Il valore della chiave viene troncato ai primi 128 byte. Il tipo di chiave è impostato per impostazione predefinita su ALL in una sessione HTTP.
- REGION_CODE: il paese o la regione da cui ha origine la richiesta.
- TLS_JA4_FINGERPRINT: impronta TLS/SSL JA4 se il client si connette utilizzando
HTTPS
,HTTP/2
oHTTP/3
. Se non disponibile, il tipo di chiave è impostato su ALL per impostazione predefinita. Per saperne di più su JA4, consulta il riferimento al linguaggio delle regole. - TLS_JA3_FINGERPRINT: impronta TLS/SSL JA3 se il client si connette utilizzando
HTTPS
,HTTP/2
oHTTP/3
. Se non disponibile, il tipo di chiave è impostato su ALL per impostazione predefinita. - USER_IP: l'indirizzo IP del client di origine, incluso nelle intestazioni
configurate in
userIpRequestHeaders
e il cui valore viene compilato da un proxy upstream. Se non è presente alcuna configurazioneuserIpRequestHeaders
o se non è possibile risolvere un indirizzo IP, il tipo di chiave viene impostato per impostazione predefinita su IP. Per ulteriori informazioni, consulta il riferimento al linguaggio delle regole.
Puoi utilizzare le chiavi precedenti singolarmente o applicare limitazione di frequenza
in base a una combinazione di un massimo di tre chiavi. Puoi utilizzare più tasti HTTP-HEADER
o HTTP-COOKIE
e un solo tasto per ogni altro tipo. Per ulteriori
informazioni, vedi
Limitazione della frequenza basata su più chiavi.
Scegliere tra regole di limitazione della frequenza basate sulla frequenza e sulla limitazione della frequenza
Le regole di limitazione di frequenza di Google Cloud Armor rate-based ban
e throttle
differiscono per la modalità di gestione del traffico che supera la soglia configurata.
rate_based_ban
: quando la frequenza delle richieste supera la soglia definita, Cloud Armor blocca tutte le richieste successive provenienti dall'origine o dalla destinazione di queste richieste per un periodo di tempo specificato.throttle
: anziché bloccare tutto il traffico, la limitazione controlla la frequenza delle richieste fino a un massimo definito. In questo modo, una parte del traffico può passare, ma a una velocità controllata che impedisce il sovraccarico.
La regola più appropriata dipende dalle tue esigenze specifiche e dal tipo di traffico che stai gestendo. Ad esempio, se stai subendo un attacco DDoS, un ban basato sulla frequenza potrebbe essere più appropriato per bloccare rapidamente il traffico dannoso. D'altra parte, se si verifica un aumento improvviso del traffico legittimo, la limitazione potrebbe essere un'opzione migliore per mantenere la disponibilità del servizio ed evitare il sovraccarico.
Limitazione del traffico
L'azione throttle
in una regola consente di applicare una soglia di richieste per client per proteggere i servizi di backend. Questa regola applica la soglia per limitare
il traffico da ogni client che soddisfa le condizioni di corrispondenza nella regola. La soglia è configurata come un numero specificato di richieste in un intervallo di tempo specificato.
Ad esempio, puoi impostare la soglia delle richieste su 2000 richieste entro 1200 secondi (20 minuti). Se un client invia 2500 richieste in un periodo di 1200 secondi, circa il 20% del traffico del client viene limitato finché il volume di richieste consentito non raggiunge o non è inferiore alla soglia configurata.
Quando la frequenza del traffico di un client è inferiore o uguale a rate_limit_threshold_count
,
le richieste seguono conform_action
, che è sempre un'azione allow
. La richiesta è
consentita tramite il criterio di sicurezza e può raggiungere la destinazione. Quando
la velocità del traffico di un client supera il valore rate_limit_threshold_count
specificato,
Google Cloud Armor applica exceed_action
, che può essere deny
o
redirect
, per le richieste che superano il limite per il resto dell'intervallo di soglia.
Imposta questi parametri per controllare l'azione:
rate_limit_threshold_count
: il numero di richieste per client consentito in un intervallo di tempo specificato. Il valore minimo è 1 e il valore massimo è 1.000.000.interval_sec
: il numero di secondi nell'intervallo di tempo. Il valore deve essere 10, 30, 60, 120, 180, 240, 300, 600, 900, 1200, 1800, 2700 o 3600 secondi.
exceed_action
: quando una richiesta supera ilrate_limit_threshold_count
, Google Cloud Armor applica ilexceed_action
configurato. I valori possibili perexceed_action
sono i seguenti:deny(status)
: la richiesta viene rifiutata e viene restituito il codice di errore specificato (i valori validi sono403
,404
,429
e502
). Ti consigliamo di utilizzare il codice di risposta429 (Too Many Requests)
.redirect
: la richiesta viene reindirizzata per la valutazione reCAPTCHA o a un URL diverso, in base al parametroexceed_redirect_options
.
exceed_redirect_options
: quandoexceed_action
èredirect
, utilizza questo parametro per specificare l'azione di reindirizzamento:type
: tipo di azione di reindirizzamento,GOOGLE_RECAPTCHA
oEXTERNAL_302
.target
: URL di destinazione per l'azione di reindirizzamento. Applicabile solo quandotype
èEXTERNAL_302
.
conform_action
: questa è l'azione eseguita quando il numero di richieste è inferiore arate_limit_threshold_count
. Questa è sempre un'azioneallow
.
Divieto di accesso per i client in base alle frequenze delle richieste
L'azione rate_based_ban
in una regola consente di applicare una soglia per client
per vietare temporaneamente i client che superano il limite applicando il
exceed_action
configurato per tutte le richieste del client per un periodo di tempo
configurabile. La soglia è configurata come un numero specificato di richieste in un
intervallo di tempo specificato. Puoi vietare temporaneamente il traffico per un periodo di tempo configurato dall'utente ('ban_duration_sec'
), a condizione che il traffico corrisponda alla condizione di corrispondenza specificata e superi la soglia configurata.
Ad esempio, puoi impostare la soglia delle richieste su 2000 richieste entro 1200 secondi (20 minuti). Se un client invia 2500 richieste entro 1200 secondi,
Google Cloud Armor applica exceed_action
al traffico proveniente da quel client
che supera la soglia di 2000 richieste fino al termine dei 1200 secondi
e per un numero aggiuntivo di secondi che imposti come periodo di durata del ban.
Se il periodo di durata del ban è impostato su 3600
, ad esempio, il traffico del
client verrà bloccato per 3600 secondi (un'ora) oltre la fine dell'intervallo
di soglia.
Quando tasso di richieste di un client è inferiore alla soglia del limite di frequenza, la richiesta può procedere immediatamente al servizio di backend. Quando la frequenza del traffico di un client
supera il rate_limit_threshold_count
specificato, Google Cloud Armor applica il
exceed_action
a tutte le richieste in entrata dal client per il resto dell'intervallo
di soglia e per i successivi ban_duration_sec
secondi, indipendentemente dal fatto che
la soglia venga superata o meno.
Con questa configurazione, è possibile vietare accidentalmente i client di benvenuto che
superano solo occasionalmente latasso di richiestee consentita. Per evitare questo problema e bloccare
solo i client che superano frequentemente la tasso di richieste, puoi
facoltativamente monitorare le richieste totali del client rispetto a una configurazione di soglia aggiuntiva, preferibilmente
più lunga, chiamata ban_threshold_count
. In questa modalità,
il client viene bannato per il ban_duration_sec
configurato solo se
la tasso di richiestete supera il ban_threshold_count
configurato. Se la tasso di richieste
non supera ban_threshold_count
, le richieste continuano a essere limitate
a rate_limit_threshold_count
. Ai fini di ban_threshold_count
, vengono conteggiate tutte le richieste in entrata prima della limitazione.
Questi parametri controllano l'azione di una regola rate_based_ban
:
rate_limit_threshold_count
: il numero di richieste per client consentito in un intervallo di tempo specificato. Il valore minimo è 1 richiesta e il valore massimo è 10.000 richieste.interval_sec
: il numero di secondi nell'intervallo di tempo. Il valore deve essere 10, 30, 60, 120, 180, 240, 300, 600, 900, 1200, 1800, 2700 o 3600 secondi.
exceed_action
: quando una richiesta supera ilrate_limit_threshold_count
, Google Cloud Armor applica ilexceed_action
configurato. I valori possibili perexceed_action
sono i seguenti:deny(status)
: La richiesta viene negata e viene restituito il codice di errore specificato. I valori validi per il codice di errore sono403
,404
,429
e502
. Ti consigliamo di utilizzare il codice di risposta429 (Too Many Requests)
.redirect
: la richiesta viene reindirizzata per la valutazione reCAPTCHA o a un URL diverso, in base al parametroexceed_redirect_options
.
exceed_redirect_options
: quandoexceed_action
èredirect
, utilizza questo parametro per specificare l'azione di reindirizzamento:type
: tipo di azione di reindirizzamento,GOOGLE_RECAPTCHA
oEXTERNAL_302
.target
: URL di destinazione per l'azione di reindirizzamento. Applicabile solo quandotype
èEXTERNAL_302
.
conform_action
: questa è l'azione eseguita quando il numero di richieste è inferiore arate_limit_threshold_count
. Questa è sempre un'azioneallow
.ban_threshold_count
: il numero di richieste per client consentite entro un intervallo di tempo specificato, oltre il quale Google Cloud Armor vieta le richieste. Se specificata, la chiave viene vietata per il valoreban_duration_sec
configurato quando il numero di richieste che superano il valorerate_limit_threshold_count
supera anche questo valoreban_threshold_count
.ban_threshold_interval_sec
: il numero di secondi nell'intervallo di tempo per il tuoban_threshold_count
. Il valore deve essere 10, 30, 60, 120, 180, 240, 300, 600, 900, 1200, 1800, 2700 o 3600 secondi.
ban_duration_sec
: il numero aggiuntivo di secondi per cui un client viene bannato dopo la scadenza del periodointerval_sec
. Il valore deve essere 60, 120, 180, 240, 300, 600, 900, 1200, 1800, 2700 o 3600 secondi.
Policy di sicurezza predefinita per limitazione di frequenza
Quando configuri un criterio di sicurezza predefinito durante la creazione del bilanciatore del carico, la soglia predefinita è di 500 richieste durante ogni intervallo di un minuto (un rate_limit_threshold_count
e un interval_sec
di 500
e 60
, rispettivamente). Se vuoi selezionare una soglia diversa, ti consigliamo
di seguire questi passaggi per ottimizzare i parametri:
Attiva Cloud Logging ed esegui query sul numero massimo di richieste arrivate per indirizzo IP e al minuto per un giorno o più nel servizio di backend protetto da Google Cloud Armor.
Ad esempio, supponiamo che tu ritenga che il 99% del traffico di rete che ricevi non debba essere interessato dalla regola di limitazione della frequenza. In questo scenario, ti consigliamo di impostare la soglia del limite di frequenza sul 99° percentile del numero massimo di richieste per indirizzo IP e al minuto della distribuzione generata dai dati di Cloud Logging.
Se noti ancora che le regole di limitazione della frequenza predefinite bloccano il traffico legittimo, valuta la possibilità di eseguire i seguenti passaggi aggiuntivi:
- Abilita la memorizzazione nella cache (Cloud CDN o Media CDN).
- Aumenta l'intervallo di tempo di limitazione (richieste ricevute in diversi minuti anziché ogni 60 secondi).
- Puoi vietare i client per ridurre ulteriormente l'impatto dell'attacco dopo l'ondata iniziale. L'azione
rate_based_ban
di Google Cloud Armor ti consente di farlo vietando tutti i client che superano i limiti troppe volte in un intervallo specificato dall'utente. Ad esempio, i client che superano i limiti 10 volte in un minuto possono essere bannati per 15 minuti.
Applicazione delle soglie
Le soglie configurate per la limitazione e i ban basati sulla frequenza vengono applicate in modo indipendente in ciascuna delle Google Cloud regioni in cui sono implementati i tuoi servizi di backend HTTP(S). Ad esempio, se il tuo servizio viene implementato in due regioni, ciascuna delle due regioni limita la velocità di ogni chiave alla soglia configurata, quindi il tuo servizio di backend potrebbe riscontrare volumi di traffico aggregati tra regioni che sono il doppio della soglia configurata. Se la soglia configurata è impostata su 5000 richieste, il servizio di backend potrebbe ricevere 5000 richieste da una regione e 5000 richieste dalla seconda regione.
Tuttavia, per il tipo di chiave indirizzo IP, è ragionevole presumere che il traffico dallo stesso indirizzo IP client venga indirizzato alla regione più vicina alla regione in cui sono implementati i backend. In questo caso, la limitazione di frequenza può essere considerata applicata a livello di servizio di backend, indipendentemente dalle regioni in cui viene implementata.
È importante notare che i limiti di frequenza applicati sono approssimativi e potrebbero non essere rigorosamente accurati rispetto alle soglie configurate. Inoltre, in rari casi, a causa del comportamento di routing interno, è possibile che la limitazione di frequenza venga applicata in più regioni rispetto a quelle in cui è stato eseguito il deployment, il che influisce sulla precisione. Per questi motivi, ti consigliamo di utilizzare limitazione di frequenza solo per la mitigazione degli abusi o per mantenere la disponibilità di applicazioni e servizi, non per applicare quote rigorose o requisiti di licenza.
Logging
Cloud Logging registra il nome della policy di sicurezza, la priorità della regola di limitazione della frequenza corrispondente, l'ID regola, l'azione associata e altre informazioni nei log delle richieste. Per ulteriori informazioni sulla registrazione, consulta Utilizzare la registrazione delle richieste.
Risposte di errore personalizzate
Puoi applicare risposte di errore personalizzate alla limitazione di frequenza di Google Cloud Armor,
incluso il traffico throttle
e rate_based_ban
. Quando questi limiti vengono
applicati, agli utenti finali vengono inviati messaggi di errore personalizzati. Inoltre, puoi configurare risposte di errore personalizzate per codici di stato HTTP specifici generati da bilanciatori del carico o istanze di backend quando utilizzi un bilanciatore del carico delle applicazioni esterno globale.
Per saperne di più sulle risposte di errore personalizzate, consulta la Panoramica della risposta di errore personalizzata. Per configurare risposte di errore personalizzate, vedi Configurare risposte di errore personalizzate.
Integrazione con reCAPTCHA
Puoi applicare la limitazione di frequenza ad alcune risorse reCAPTCHA per mitigare l'abuso di token e limitarne il riutilizzo. Queste risorse includono token di azione, token di sessione e cookie di esenzione. Per ulteriori informazioni sull'utilizzo limitazione di frequenza con reCAPTCHA, consulta la panoramica della gestione dei bot.