1. Introduzione
Il bilanciamento del carico di Google Cloud viene eseguito sul perimetro della rete Google, nei punti di presenza (POP) Google in tutto il mondo. Il traffico utente indirizzato a un bilanciatore del carico del proxy TCP 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 di attacchi DDoS (Distributed Denial of Service) e WAF (Web Application Firewall) di Google. Cloud Armor è strettamente accoppiato al bilanciatore del carico del proxy TCP di Google Cloud e ti consente di interrogare il traffico in entrata per le richieste indesiderate. La funzionalità di limitazione di 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 le risorse sulla rete VPC (Virtual Private Cloud).
I bilanciatori del carico del proxy TCP/SSL di Google Cloud consentono di eseguire il proxy del traffico di tipo TCP/ SSL tra i servizi di backend.
In questo codelab creerai un bilanciatore del carico del proxy TCP/SSL con un servizio di backend e utilizzerai Cloud Armor per limitare l'accesso al bilanciatore del carico a un insieme specifico di client utente.

Obiettivi didattici
- Come creare un bilanciatore del carico del proxy TCP/SSL
- Come creare una policy di sicurezza di Cloud Armor
- Come creare una regola di elenco di IP negati per il bilanciatore del carico del proxy TCP/SSL in Cloud Armor
- Come creare una regola di limitazione di frequenza per il bilanciatore del carico del proxy TCP in Cloud Armor
- Come aggiungere la policy di sicurezza a un servizio di backend di bilanciamento del carico TCP/SSL
Che cosa ti serve
- Conoscenza di base di Google Compute Engine ( codelab)
- Conoscenza di base del networking e di TCP/IP
- Conoscenza di base della riga di comando Unix/Linux
- È utile aver completato un tour del networking in Google Cloud con Networking in the Google Cloud
2. Requisiti
Configurazione dell'ambiente autonomo
- Accedi a Cloud Console e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.
Nota: puoi accedere facilmente alla console Cloud memorizzando il relativo URL, ovvero console.cloud.google.com.



Ricorda l'ID progetto, un nome univoco tra tutti i progetti Google Cloud (il nome sopra è già stato utilizzato e non funzionerà per te, ci dispiace!). In questo codelab verrà indicato come PROJECT_ID.
Nota: se utilizzi un account Gmail, puoi lasciare la località predefinita impostata su Nessuna organizzazione. Se utilizzi un account Google Workspace, scegli una località adatta alla tua organizzazione.
- Dopodiché, devi abilitare la fatturazione nella console Cloud per utilizzare le risorse Google Cloud.
L'esecuzione di questo codelab non dovrebbe costare molto, se non nulla. Assicurati di seguire le istruzioni riportate nella sezione "Pulizia", che ti consiglia come arrestare le risorse in modo da non incorrere in addebiti oltre questo tutorial. I nuovi utenti di Google Cloud possono beneficiare del programma di 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 Google Cloud, 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 visualizzare un risultato simile al seguente:

Questa macchina virtuale è caricata con tutti gli strumenti di sviluppo di cui avrai bisogno. Offre una home directory permanente da 5 GB e viene eseguita in Google Cloud, migliorando notevolmente le prestazioni e l'autenticazione della rete. Tutto il lavoro in 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 API
Abilita tutti i servizi necessari.
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com
3. Crea servizi di backend
Crea due istanze come segue: crea l'istanza 1-b1 nella zona us-central1-b.
gcloud compute instances create vm-1-b1 \
--image-family debian-9 \
--image-project debian-cloud \
--tags tcp-lb \
--zone us-central1-b \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
sudo service apache2 restart
echo '<!doctype html><html><body><h1>This is VM1-b1 in central1-b</h1></body></html>' | tee /var/www/html/index.html
EOF"
Crea l'istanza 1-b2 nella zona us-central1-b.
gcloud compute instances create vm-1-b2 \
--image-family debian-9 \
--image-project debian-cloud \
--tags tcp-lb \
--zone us-central1-b \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
sudo service apache2 restart
echo '<!doctype html><html><body><h1>This is VM1-b2 in central1-b</h1></body></html>' | tee /var/www/html/index.html
EOF"
Crea un gruppo di istanze vm-ig1.
gcloud compute instance-groups unmanaged create vm-ig1 --zone us-central1-b
Crea una porta denominata per il gruppo di istanze. Per questo lab, utilizzeremo la porta 110.
gcloud compute instance-groups set-named-ports vm-ig1 \ --named-ports tcp 110:110 --zone us-central1-b
Aggiungi le istanze al gruppo di istanze.
gcloud compute instance-groups unmanaged add-instances vm-ig1 \ --instances vm-1-b1,vm-1-b2 --zone us-central1-b
4. Configurazione del bilanciatore del carico
Ora creeremo un controllo di integrità.
gcloud compute health-checks create tcp my-tcp-health-check --port 110
Crea un servizio di backend.
gcloud compute backend-services create my-tcp-lb --global-health-checks --global \ --protocol TCP --health-checks my-tcp-health-check --timeout 5m --port-name tcp110
Aggiungi il gruppo di istanze al nuovo servizio di backend.
gcloud compute backend-services add-backend my-tcp-lb --global --instance-group \ vm-ig1 --instance-group-zone us-central1-b --balancing-mode UTILIZATION \ --max-utilization 0.8
Configura un proxy TCP di destinazione.
gcloud compute target-tcp-proxies create my-tcp-lb-target-proxy --backend-service \ my-tcp-lb --proxy-header NONE
Prenota indirizzi IPv4 statici globali.
Utilizzerai questo indirizzo IP per raggiungere il servizio con bilanciamento del carico.
gcloud compute addresses create tcp-lb-static-ipv4 --ip-version=IPV4 --global
Configura le regole di forwarding globale per l'indirizzo IP del bilanciatore del carico.
gcloud compute forwarding-rules create my-tcp-lb-ipv4-forwarding-rule \
--global --target-tcp-proxy my-tcp-lb-target-proxy --address LB_STATIC_IPV4 \ --ports 110
5. Creazione di una regola firewall per il bilanciatore del carico del proxy TCP
gcloud compute firewall-rules create allow-tcplb-and-health \ --source-ranges 130.211.0.0/22,35.191.0.0/16 \ --target-tags tcp-lb \ --allow tcp:110
Una volta creato il bilanciatore del carico, testalo con il seguente comando.
Curl LB_IP:110
Poi crea le VM per la convalida del rifiuto di accesso al bilanciatore del carico.
Devi creare due istanze, ognuna con un indirizzo IP pubblico e denominate test-server1 e test-server2.
6. Crea una policy di sicurezza in Cloud Armor
In questa sezione creerai una policy di sicurezza di backend e due regole nella policy in Cloud Armor.
La prima regola impedirà a un insieme limitato di IP di accedere al bilanciatore del carico TCP impostando una policy di sicurezza per negare determinati IP, mentre la seconda regola eseguirà la limitazione di frequenza.
- In Cloud Shell(per istruzioni su come utilizzare Cloud Shell, consulta "Avvia Cloud Shell" in "Configurazione e requisiti"), crea una policy di sicurezza del servizio di backend denominata rate-limit-and-deny-tcp come segue.
gcloud compute security-policies create rate-limit-and-deny-tcp \
--description "policy for tcp proxy rate limiting and IP deny"
Aggiungi regole alla policy di sicurezza
Poi aggiungi una regola di elenco di IP negati alla policy di Cloud Armor "rate-limit-and-deny-tcp".
gcloud compute security-policies rules create 1000 --action deny --security-policy \ rate-limit-and-deny-tcp --description "deny test-server1" --src-ip-ranges \ "enter-test-server-1ip-here"
Aggiungi una regola di limitazione di frequenza alla policy di sicurezza di Cloud Armor "rate-limit-and-deny-tcp".
gcloud compute security-policies rules create 3000 \ --security-policy=rate-limit-and-deny-tcp \ --expression="true" --action=rate-based-ban --rate-limit-threshold-count=5 \ --rate-limit-threshold-interval-sec=60 --ban-duration-sec=300 \ --conform-action=allow --exceed-action=deny-404 --enforce-on-key=IP
Collega la policy al servizio di backend del proxy TCP:
Esegui il seguente comando per assicurarti che la policy di sicurezza sia collegata al servizio di backend del proxy TCP.
gcloud compute backend-services update my-tcp-lb --security-policy \ rate-limit-and-deny-tcp
Abilita il logging sul bilanciatore del carico del proxy TCP
gcloud beta compute backend-services update my-tcp-lb \ --enable-logging --logging-sample-rate=1
7. Convalida la regola di elenco di IP negati
Convalida la regola di elenco di IP negati accedendo al server di test il cui IP è stato specificato nella regola di elenco di IP negati ed esegui il seguente comando.
Curl LB_IP:110
Le richieste immediate potrebbero fornire una risposta dall'LB, ma attendi che la richiesta curl venga rifiutata o eliminata, quindi esamina i log in Cloud Logging per verificare la voce di log per l'attivazione della regola di negazione IP.
Vai a Cloud Logging e, in Risorse, seleziona il tipo di risorsa "tcp_ssl_proxy_rule" e imposta la destinazione di backend su "my-tcp-lb".
Con le risorse definite per il filtraggio, possiamo convalidare che la regola di IP negati sia attiva dal valore PRIORITY di 1000 nella voce di log e che l'azione configurata "DENY" sia attiva, come indicato dalla regola di IP negati e dall'IP negato, come mostrato di seguito.

8. Convalida la regola di limitazione di frequenza
Convalida che la regola di limitazione di frequenza sia attiva inviando molte richieste in un breve periodo di tempo che superi la soglia definita (5 richieste al minuto).
Al termine, fai clic su Visualizza log nel servizio Cloud Armor per accedere a Cloud Logging, dove puoi filtrare i log in base al bilanciatore del carico per visualizzare i log di Cloud Armor man mano che arrivano.
Una voce di limitazione di frequenza dovrebbe essere simile a quella dello screenshot riportato di seguito. Possiamo convalidare che la regola di limitazione di frequenza sia attiva dal valore PRIORITY di 3000 nella voce di log e che l'azione configurata, l'azione "RATE BASED BAN" , sia attiva come indicato dalla regola di limitazione di frequenza.

9. Pulizia dell'ambiente
Assicurati di liberare spazio nell'infrastruttura creata per evitare costi di gestione dell'infrastruttura inutilizzata.
Il modo più rapido è eliminare l'intero progetto in Google Cloud per assicurarti che non rimangano risorse non gestite. Tuttavia, elimina le singole risorse con i seguenti comandi.
Il bilanciatore del carico del proxy TCP
gcloud compute target-tcp-proxies delete my-tcp-lb
Il gruppo di istanze
gcloud compute instance-groups unmanaged delete vm-ig1
Le due istanze VM di test create
gcloud compute instances delete Instance_name --zone=instance_zone
Il servizio di backend
gcloud compute backend-services delete BACKEND_SERVICE_NAME
Le regole di Cloud Armor all'interno della policy
gcloud compute security-policies rules delete 1000 \ --security-policy=rate-limit-and-deny-tcp && gcloud compute security-policies rules delete 3000 \ --security-policy=rate-limit-and-deny-tcp
La policy di sicurezza di Cloud Armor
gcloud compute security-policies delete rate-limit-and-deny-tcp