1. Introduzione
Il bilanciamento del carico HTTP(S) di Google Cloud viene implementato sul perimetro della rete Google, nei punti di presenza (POP) Google in tutto il mondo. Il traffico utente indirizzato a un bilanciatore del carico HTTP(S) entra nella rete Google attraverso il POP più vicino all'utente. Quindi, il carico viene bilanciato sulla rete Google globale e indirizzato verso il backend più vicino con capacità disponibile sufficiente.
Cloud Armor è il sistema di rilevamento Distributed Denial of Service e WAF (Web Application Firewall) di Google. Cloud Armor è strettamente accoppiato al bilanciatore del carico HTTP di Google Cloud e ti consente di esaminare il traffico in entrata per individuare richieste indesiderate. La funzionalità di limitazione della frequenza di questo servizio ti consente di ridurre il traffico verso le risorse di backend in base al volume delle richieste e impedisce al traffico indesiderato di utilizzare risorse sulla tua rete Virtual Private Cloud (VPC).
In questo lab configurerai un bilanciatore del carico HTTP con backend globali, come illustrato dal diagramma riportato di seguito. Successivamente, sottoporrai il bilanciatore del carico a uno stress test e aggiungerai una policy di limitazione della frequenza di Cloud Armor per limitare il traffico che raggiunge le risorse di backend.

Cosa imparerai a fare
- Come configurare un bilanciatore del carico HTTP con controlli di integrità appropriati.
- Come creare una policy di limitazione della frequenza di Cloud Armor.
- Come verificare che la policy di limitazione della frequenza blocchi il traffico durante l'esecuzione di un test di stress da una VM.
Che cosa ti serve
- Conoscenza di base del networking e di HTTP
- Conoscenza di base della riga di comando Unix/Linux
2. Configurazione e requisiti
Configurazione dell'ambiente autonomo
- Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.



- Il nome del progetto è il nome visualizzato per i partecipanti a questo progetto. È una stringa di caratteri non utilizzata dalle API di Google e puoi aggiornarla in qualsiasi momento.
- L'ID progetto deve essere univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo essere stato impostato). Cloud Console genera automaticamente una stringa univoca, di solito non ti interessa di cosa si tratta. Nella maggior parte dei codelab, devi fare riferimento all'ID progetto (che in genere è identificato come
PROJECT_ID), quindi, se non ti piace, generane un altro casuale oppure puoi provare il tuo e vedere se è disponibile. Viene "congelato" dopo la creazione del progetto. - Esiste un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
- Successivamente, devi abilitare la fatturazione in Cloud Console per utilizzare le risorse/API Cloud. L'esecuzione di questo codelab non dovrebbe costare molto, se non nulla. Per arrestare le risorse in modo da non incorrere in costi di fatturazione al termine di questo tutorial, segui le istruzioni di "pulizia" riportate alla fine del codelab. I nuovi utenti di Google Cloud possono beneficiare del programma prova senza costi di 300$.
Avvia Cloud Shell
Sebbene Google Cloud possa essere gestito da remoto dal tuo laptop, in questo codelab utilizzerai Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.
Nella console GCP, fai clic sull'icona di Cloud Shell nella barra degli strumenti in alto a destra:

Bastano pochi istanti per eseguire il provisioning e connettersi all'ambiente. Al termine, dovresti vedere un risultato simile a questo:

Questa macchina virtuale è caricata con tutti gli strumenti per sviluppatori di cui avrai bisogno. Offre una home directory permanente da 5 GB e viene eseguita su Google Cloud, migliorando notevolmente le prestazioni e l'autenticazione della rete. Tutto il lavoro di questo lab può essere svolto semplicemente con un browser.
Prima di iniziare
In Cloud Shell, assicurati che l'ID progetto sia configurato.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] PROJECT_ID=[YOUR-PROJECT-NAME] echo $PROJECT_ID
Abilita le API
Attiva tutti i servizi necessari
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com
3. Configura regole firewall per consentire il traffico HTTP verso i backend
Configura regole firewall per consentire il traffico HTTP verso i backend dai controlli di integrità di Google Cloud e dal bilanciatore del carico.
Utilizzeremo la rete VPC predefinita creata nel tuo progetto. Crea una regola firewall per consentire il traffico HTTP verso i backend. I controlli di integrità determinano quali istanze di un bilanciatore del carico possono ricevere nuove connessioni. Per il bilanciamento del carico HTTP, i probe di controllo dell'integrità che verificano le tue istanze con bilanciamento del carico provengono da indirizzi inclusi negli intervalli 130.211.0.0/22 e 35.191.0.0/16. Le regole firewall VPC devono consentire queste connessioni. Inoltre, i bilanciatori del carico comunicano con il backend nello stesso intervallo IP.
- Nella console Cloud, vai a Menu di navigazione (
) > Rete VPC > Firewall.

- Osserva le regole firewall ICMP, internal, RDP ed SSH esistenti.Ogni progetto Google Cloud viene avviato con la rete predefinita e queste regole firewall.
- Fai clic su Crea regola firewall.
- Specifica i valori seguenti e lascia le impostazioni predefinite per gli altri valori:
Proprietà | Valore (digita il valore o seleziona l'opzione come specificato) |
Nome | default-allow-health-check |
Rete | predefinita |
Destinazioni | Tag di destinazione specificati |
Tag di destinazione | http-server |
Filtro di origine | Intervalli IP |
Intervalli IP di origine | 130.211.0.0/22, 35.191.0.0/16 |
Protocolli e porte | Protocolli e porte specificati, quindi seleziona tcp |
- Fai clic su Crea.
In alternativa, se utilizzi la riga di comando gcloud. Di seguito è riportato il comando:
gcloud compute firewall-rules create default-allow-health-check --direction=INGRESS --priority=1000 --network=default --action=ALLOW --rules=tcp --source-ranges=130.211.0.0/22,35.191.0.0/16 --target-tags=http-server
4. configura i modelli di istanza e crea i gruppi di istanze gestite
Un gruppo di istanze gestite utilizza un modello di istanza per creare un gruppo di istanze identiche, che puoi utilizzare per creare i backend del bilanciatore del carico HTTP.
Configura i modelli di istanza
Un template di istanza è una risorsa API che puoi utilizzare per creare istanze VM e gruppi di istanze gestite. I modelli di istanza definiscono il tipo di macchina, l'immagine del disco di avvio, la subnet, le etichette e altre proprietà dell'istanza. Crea un modello di istanza per us-east1 un altro per europe-west1.
- Nella console Cloud, vai a Menu di navigazione (
) > Compute Engine > Modelli di istanza e fai clic su Crea modello di istanza. - In corrispondenza di Nome, digita us-east1-template.
- In Serie, seleziona N1.
- Fai clic su Networking, dischi, sicurezza, gestione , single tenancy.

- Vai alla sezione Gestione:

- In Metadati, fai clic su Aggiungi elemento e specifica quanto segue:
Key (Chiave) | Valore |
startup-script-url | gs://cloud-training/gcpnet/httplb/startup.sh |
- Fai clic su Networking.
- Specifica i valori seguenti e lascia le impostazioni predefinite per gli altri valori:
Proprietà | Valore (digita il valore o seleziona l'opzione come specificato) |
Rete (in Interfacce di rete) | predefinito |
Subnet (in Interfacce di rete) | predefinita (us-east1) |
Tag di rete | http-server |
- Fai clic su Crea.
- Attendi il completamento della creazione del modello di istanza.
Ora crea un altro modello di istanza per subnet-b copiando us-east1-template:
- Fai clic su us-east1-template e poi sull'opzione Copia in alto.
- In corrispondenza di Nome, digita europe-west1-template.
- Fai clic su Networking, dischi, sicurezza, gestione , single tenancy.
- Fai clic su Networking.
- In Interfacce di rete,modifica l'interfaccia predefinita. Per Subnet, seleziona predefinita (europe-west1).
- Fai clic su Crea.
Crea i gruppi di istanze gestite
Crea un gruppo di istanze gestite in us-east1 e uno in europe-west1.
- Sempre in Compute Engine, fai clic su Gruppi di istanze nel menu a sinistra.

- Fai clic su Crea gruppo di istanze. Seleziona Nuovo gruppo di istanze gestite (stateless).
- Specifica i valori seguenti e lascia le impostazioni predefinite per gli altri valori:
Proprietà | Valore (digita il valore o seleziona l'opzione come specificato) |
Nome | us-east1-mig |
Posizione | Più zone |
Area geografica | us-east1 |
Modello di istanza | us-east1-template |
Scalabilità automatica > Criterio di scalabilità automatica > Fai clic sull'icona a forma di matita > Tipo di metrica | Utilizzo CPU |
Utilizzo CPU target | 80, fai clic su Fine. |
Periodo di raffreddamento | 45 |
Numero minimo di istanze | 1 |
Numero massimo di istanze | 5 |
- Fai clic su Crea.
Ora ripeti la stessa procedura per creare un secondo gruppo di istanze per europe-west1-mig in europe-west1:
- Fai clic su Crea gruppo di istanze.
- Specifica i valori seguenti e lascia le impostazioni predefinite per gli altri valori:
Proprietà | Valore (digita il valore o seleziona l'opzione come specificato) |
Nome | europe-west1-mig |
Località | Più zone |
Regione | europe-west1 |
Modello di istanza | europe-west1-template |
Scalabilità automatica > Criterio di scalabilità automatica > Fai clic sull'icona a forma di matita > Tipo di metrica | Utilizzo CPU |
Utilizzo CPU target | 80, fai clic su Fine. |
Periodo di raffreddamento | 45 |
Numero minimo di istanze | 1 |
Numero massimo di istanze | 5 |
- Fai clic su Crea.
5. configura il bilanciatore del carico HTTP
Configura il bilanciatore del carico HTTP per bilanciare il traffico tra i due backend (us-east1-mig in us-east1 e europe-west1-mig in europe-west1), come illustrato in questo diagramma di rete:

Avvia la configurazione
- Nella console Cloud, fai clic su Menu di navigazione (
) > Servizi di rete > Bilanciamento del carico, quindi fai clic su Crea bilanciatore del carico. - In Bilanciamento del carico HTTP(S), fai clic su Avvia configurazione.

- Seleziona Da internet alle mie VM, Bilanciatore del carico HTTP(S) classico e fai clic su Continua.
- Imposta Nome su http-lb.
Configura il backend
I servizi di backend indirizzano il traffico in ingresso a uno o più backend collegati. Ciascun backend è composto da un gruppo di istanze e da metadati aggiuntivi relativi alla capacità di distribuzione.
- Fai clic su Configurazione backend.
- In Servizi e bucket di backend, fai clic su Crea un servizio di backend.
- Specifica i valori seguenti e lascia le impostazioni predefinite per gli altri valori:
Proprietà | Valore (seleziona l'opzione come specificato) |
Nome | http-backend |
Gruppo di istanze | us-east1-mig |
Numeri di porta | 80 |
Modalità di bilanciamento | Frequenza |
Massimo RPS | 50 (per istanza) |
Capacità | 100 |
- Fai clic su Fine.
- Fai clic su Aggiungi backend.
- Specifica i valori seguenti e lascia le impostazioni predefinite per gli altri valori:
Proprietà | Valore (seleziona l'opzione come specificato) |
Gruppo di istanze | europe-west1-mig |
Numeri di porta | 80 |
Modalità di bilanciamento | Utilizzo |
Utilizzo backend massimo | 80 |
Capacità | 100 |
- Fai clic su Fine.
- In Controllo di integrità, seleziona Crea un controllo di integrità.

- Specifica i valori seguenti e lascia le impostazioni predefinite per gli altri valori:
Proprietà | Valore (seleziona l'opzione come specificato) |
Nome | http-health-check |
Protocollo | TCP |
Porta | 80 |

- Fai clic su Salva.
- Seleziona la casella Abilita il logging.
- Imposta la frequenza di campionamento su 1:

- Fai clic su Crea per creare il servizio di backend.

Configura il frontend
Le regole relative a host e percorso determinano come sarà indirizzato il traffico. Ad esempio, potresti decidere di indirizzare il traffico video a un backend e il traffico statico a un altro. Tuttavia, in questo lab non configurerai le regole relative a host e percorso.
- Fai clic su Configurazione frontend.
- Specifica quanto segue, lasciando le impostazioni predefinite per tutti gli altri valori:
Proprietà | Valore (digita il valore o seleziona l'opzione come specificato) |
Protocollo | HTTP |
Versione IP | IPv4 |
Indirizzo IP | Temporaneo |
Porta | 80 |
- Fai clic su Fine.
- Fai clic su Aggiungi IP e porta frontend.
- Specifica quanto segue, lasciando le impostazioni predefinite per tutti gli altri valori:
Proprietà | Valore (digita il valore o seleziona l'opzione come specificato) |
Protocollo | HTTP |
Versione IP | IPv6 |
Indirizzo IP | Temporaneo |
Porta | 80 |
- Fai clic su Fine.
Esamina e crea il bilanciatore del carico HTTP
- Fai clic su Esamina e finalizza.

- Esamina i Servizi di backend e il Frontend.

- Fai clic su Crea.
- Attendi che la creazione del bilanciatore del carico sia completa.
- Fai clic sul nome del bilanciatore del carico (http-lb).
- Prendi nota degli indirizzi IPv4 e IPv6 del bilanciatore del carico, che utilizzerai nella prossima attività. Ci riferiremo a questi indirizzi rispettivamente come [LB_IP_v4] e [LB_IP_v6].
6. verifica il bilanciatore del carico HTTP
Ora che hai creato il bilanciatore del carico HTTP per i tuoi backend, verifica che il traffico sia inoltrato al servizio di backend.
Accedi al bilanciatore del carico HTTP
Per testare l'accesso al bilanciatore del carico HTTP su IPv4, apri una nuova scheda del browser e vai all'indirizzo http://[LB_IP_v4]. Assicurati di sostituire [LB_IP_v4] con l'indirizzo IPv4 del bilanciatore del carico.
Se hai un indirizzo IPv6 locale, prova a utilizzare l'indirizzo IPv6 del bilanciatore del carico HTTP andando all'indirizzo http://[LB_IP_v6]. Assicurati di sostituire [LB_IP_v6] con l'indirizzo IPv6 del bilanciatore del carico.

Esegui lo stress test del bilanciatore del carico HTTP
Crea una nuova VM per simulare un carico sul bilanciatore del carico HTTP utilizzando siege. Quindi, determina se il carico viene bilanciato su entrambi i backend in condizioni di carico elevato.
- Nella console, vai a Menu di navigazione (
) > Compute Engine > Istanze VM. - Fai clic su Crea istanza.
- Specifica i valori seguenti e lascia le impostazioni predefinite per gli altri valori:
Proprietà | Valore (digita il valore o seleziona l'opzione come specificato) |
Nome | siege-vm |
Area geografica | us-west1 |
Zona | us-west1-c |
Serie | N1 |
- Fai clic su Crea.
- Attendi che la creazione dell'istanza siege-vm sia completa.
- In siege-vm, fai clic su SSH per avviare un terminale e stabilire una connessione.
- Esegui questo comando per installare siege:
sudo apt-get -y install siege
- Per salvare l'indirizzo IPv4 del bilanciatore del carico HTTP in una variabile di ambiente, esegui il seguente comando, sostituendo [LB_IP_v4] con l'indirizzo IPv4:
export LB_IP=[LB_IP_v4]
- Per simulare un carico, esegui questo comando:
siege -c 250 http://$LB_IP
L'output dovrebbe avere il seguente aspetto (non copiarlo: si tratta di un esempio):
New configuration template added to /home/student/.siege Run siege -C to view the current settings in that file ** SIEGE 4.0.4 ** Preparing 250 concurrent users for battle. The server is now under siege...
- Nella console Cloud, fai clic sul menu di navigazione (
), poi su Servizi di rete > Bilanciamento del carico. - Fai clic su http-lb.
- Fai clic sulla scheda Monitoraggio. Monitora il traffico tra il Nord America e i due backend per 2-3 minuti.
All'inizio, il traffico dovrebbe essere indirizzato soltanto verso us-east1-mig, ma appena le richieste al secondo aumentano, il traffico verrà indirizzato anche verso europe-west1-mig.

Questo dimostra che, per impostazione predefinita, il traffico viene inoltrato al backend più vicino, ma non appena il carico diventa eccessivo, il traffico può essere distribuito tra i due backend.

- Torna al terminale SSH di siege-vm.
- Premi Ctrl+C per arrestare siege.
7. Crea una policy di limitazione della frequenza di Cloud Armor
In questa sezione utilizzerai Cloud Armor per impedire a siege-vm di accedere al bilanciatore del carico HTTP impostando una policy di limitazione della frequenza.
- In Cloud Shell(consulta "Avvia Cloud Shell" in "Configurazione e requisiti" per istruzioni su come utilizzare Cloud Shell), crea la policy di sicurezza tramite gcloud:
gcloud compute security-policies create rate-limit-siege \
--description "policy for rate limiting"
- Quindi, aggiungi una regola di limitazione della frequenza:
gcloud beta compute security-policies rules create 100 \
--security-policy=rate-limit-siege \
--expression="true" \
--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
- Collega la policy di sicurezza al servizio di backend http-backend:
gcloud compute backend-services update http-backend \
--security-policy rate-limit-siege –-global
- Nella console, vai a Menu di navigazione > Sicurezza della rete > Cloud Armor.
- Click rate-limit-siege. La tua norma dovrebbe essere simile alla seguente:

Verifica il criterio di sicurezza
- Torna al terminale SSH di siege-vm.
- Esegui un comando curl sull'IP del bilanciatore del carico per verificare che tu possa ancora connetterti. Dovresti ricevere una risposta 200.
curl http://$LB_IP
- Nel terminale SSH di siege-vm, esegui questo comando per simulare un carico:
siege -c 250 http://$LB_IP
L'output dovrebbe avere il seguente aspetto (non copiarlo: si tratta di un esempio):
** SIEGE 4.0.4 ** Preparing 250 concurrent users for battle. The server is now under siege...
- Esamina i log del criterio di sicurezza per determinare se anche questo traffico viene bloccato.
- Nella console, vai a Menu di navigazione > Sicurezza della rete > Cloud Armor.
- Fai clic su rate-limit-siege.
- Fai clic su Log.

- Fai clic su Visualizza log dei criteri.
- Nella pagina Logging, assicurati di cancellare tutto il testo in Anteprima della query.
- Seleziona la risorsa come Bilanciatore del carico HTTP Cloud > http-lb-forwarding-rule > http-lb, quindi fai clic su Aggiungi. In alternativa, di seguito è riportata la query MQL(monitoring query language) che puoi copiare e incollare nell'editor di query:
resource.type="http_load_balancer" resource.labels.forwarding_rule_name="http-lb-forwarding-rule" resource.labels.url_map_name="http-lb"
- Ora, fai clic su Esegui query.
- Espandi una voce di log in Risultati query.
- Espandi httpRequest. L'origine della richiesta dovrebbe essere l'indirizzo IP di siege-vm. In caso contrario, espandi un'altra voce di log.
- Espandi jsonPayload.
- Espandi enforcedSecurityPolicy.

Nota che configuredAction è impostato su RATE_BASED_BAN con il nome rate-limit-siege.
- Come controllo aggiuntivo, vai al menu di navigazione (
), fai clic su Servizi di rete > Bilanciamento del carico. Fai clic su http-lb. Fai clic sulla scheda Monitoraggio.

Puoi visualizzare il traffico dell'attacco nei grafici. Noterai anche che il traffico con limitazione della frequenza non raggiunge il backend ed è bloccato dal criterio Cloud Armor.
Complimenti! Hai completato questo lab sulla limitazione di frequenza con Cloud Armor
©2020 Google LLC. Tutti i diritti riservati. Google e il logo Google sono marchi di Google LLC. Tutti gli altri nomi di società e prodotti sono marchi delle rispettive società a cui sono associati.
8. Pulizia del lab
- Vai a Sicurezza di rete >> Cloud Armor >> %POLICY NAME% e seleziona Elimina.

- Vai a Networking >> Servizi di rete >> Bilanciamento del carico. Seleziona il bilanciatore del carico che hai creato e fai clic su Elimina.

Seleziona il servizio di backend e il controllo di integrità come risorse aggiuntive da eliminare.

- Vai a menu di navigazione (
) > Compute Engine > Gruppi di istanze. Seleziona entrambi i gruppi di istanze gestite e fai clic su Elimina.

Conferma l'eliminazione digitando "delete" nella casella di testo.
Attendi l'eliminazione dei gruppi di istanze gestite. Vengono eliminate anche le istanze nel gruppo. Puoi eliminare i modelli solo dopo aver eliminato il gruppo di istanze.
- Vai a Template di istanza dal riquadro a sinistra**.** Seleziona entrambi i modelli di istanza e fai clic su Elimina.

- Vai a Istanze VM nel riquadro a sinistra**.** Seleziona i puntini di sospensione accanto all'istanza siege-vm e fai clic su Elimina.

- Vai a Menu di navigazione (
) > Rete VPC > Firewall. Seleziona default-allow-health-check e fai clic su Elimina.

9. Complimenti!
Hai implementato correttamente la limitazione di frequenza con Cloud Armor. Hai configurato un bilanciatore del carico HTTP con backend in us-east1 ed europe-west1. Hai quindi eseguito lo stress test del bilanciatore del carico utilizzando una macchina virtuale e hai inserito l'indirizzo IP in una lista bloccata tramite la limitazione della frequenza con Cloud Armor. Hai potuto inoltre consultare i log del criterio di sicurezza per comprendere perché il traffico veniva bloccato.
Argomenti trattati
- Come configurare i modelli di istanza e creare gruppi di istanze gestite.
- Come configurare un bilanciatore del carico HTTP.
- Come creare una policy di limitazione della frequenza di Cloud Armor.
- Come verificare che la norma di limitazione della frequenza funzioni come previsto.
Passaggi successivi
- Prova a configurare una policy di limitazione della frequenza in base a un intervallo di IP di origine. Esempio di comando:
gcloud alpha compute security-policies rules create 105 \
--security-policy sec-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
- Prova a configurare una policy di limitazione della frequenza in base al codice regione. Esempio di comando:
gcloud alpha 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 IP