1. Introduzione
Le policy di sicurezza perimetrali di Google Cloud Armor consentono di limitare l'accesso agli oggetti memorizzati nella cache su Google Cloud CDN e Google Cloud Storage. Alcuni motivi per farlo includono garantire che gli utenti non accedano a oggetti nei bucket di archiviazione da aree geografiche con limitazioni o che la distribuzione dei contenuti multimediali venga filtrata in base alle aree geografiche per le quali disponi di una licenza.
In questo lab creeremo un bucket GCS, caricheremo un'immagine, lo collegheremo a un bilanciatore del carico e poi abiliteremo Cloud CDN e i criteri di sicurezza perimetrale.
Cosa imparerai a fare
- Come configurare un bucket Cloud Storage con contenuti memorizzabili nella cache
- Come creare una policy di sicurezza perimetrale per proteggere i contenuti
- Come verificare che la policy di sicurezza perimetrale funzioni come previsto
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. Crea un bucket Cloud Storage
In Cloud Console, vai al menu di navigazione > Cloud Storage > Browser. Fai clic su CREA BUCKET:

Regole di denominazione dei bucket:
- Non includere informazioni sensibili nel nome del bucket, poiché lo spazio dei nomi dei bucket è globale e visibile pubblicamente.
- I nomi dei bucket possono contenere solo lettere minuscole, numeri, trattini (-), trattini bassi (_) e punti (.). I nomi che contengono punti devono essere verificati.
- I nomi dei bucket devono iniziare e terminare con un numero o con una lettera.
- I nomi dei bucket possono contenere da 3 a 63 caratteri. I nomi che includono punti possono contenere fino a 222 caratteri, ma ogni singolo componente separato da un punto non può essere più lungo di 63 caratteri.
- I nomi dei bucket non possono essere rappresentati da un indirizzo IP con notazione decimale puntata (ad esempio 192.168.5.4).
- I nomi dei bucket non possono iniziare con il prefisso "goog".
- I nomi dei bucket non devono contenere la parola "google" o parole simili che potrebbero sembrare errori di digitazione di "google".
- Inoltre, ai fini della conformità e della compatibilità futura con il DNS, non devi utilizzare trattini bassi (_) né inserire un punto accanto a un altro punto o a un trattino. Ad esempio, "..", "-." o ".-" non sono nomi DNS validi.
Fai clic su CONTINUA.
Tipo di località:regione
Località:scegli una regione lontana dalla tua
Fai clic su CONTINUA.
Classe di archiviazione predefinita:Standard
Fai clic su CONTINUA.
Deseleziona la casella di controllo Applica la prevenzione dell'accesso pubblico in questo bucket in Impedisci l'accesso pubblico.
Scegli Granulare in Controllo dell'accesso.
Fai clic su CONTINUA.
Dopo aver configurato il bucket, fai clic su CREA:
Ecco fatto: hai appena creato un bucket Cloud Storage.
4. Carica un oggetto nel bucket
Ora carica un oggetto in un bucket.
Per prima cosa, scarica questa immagine su un'istanza temporanea di Cloud Shell. Nell'esempio riportato di seguito viene utilizzata l'immagine di Google della home page di Google.
Da Cloud Shell
wget --output-document google.png https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png
Utilizza il comando gsutil cp per caricare l'immagine dal percorso in cui l'hai salvata nel bucket che hai creato:
Da Cloud Shell
gsutil cp google.png gs://YOUR-BUCKET-NAME
Ora rimuovi l'immagine scaricata:
Da Cloud Shell
rm google.png
Individua l'oggetto, fai clic sui tre puntini a destra e modifica le autorizzazioni in modo che siano pubbliche.


5. Crea un bilanciatore del carico
Successivamente, creeremo un bilanciatore del carico HTTP.
Vai a Networking >> Servizi di rete >> Bilanciamento del carico >> Crea bilanciatore del carico >> Bilanciatore del carico HTTP >> Internet alle mie VM >> Bilanciatore del carico HTTP(S) classico.
Innanzitutto, crea un nome per il bilanciatore del carico che creerai.
Crea bucket di backend
Crea un nuovo bucket di backend che sia il bucket appena creato e seleziona Abilita CDN e Memorizza nella cache i contenuti statici. Fai clic su Crea.

Crea regole host e percorso
Vai a Regole host e percorso a sinistra. Utilizzeremo una semplice regola host/percorso e invieremo qualsiasi richiesta al bucket.

Crea la configurazione del frontend
Seleziona la configurazione del frontend. Per la configurazione frontend utilizzeremo HTTP (anche se HTTPS funzionerà se hai un certificato) e un indirizzo IP effimero e ci assicureremo che tu abbia selezionato la rete di livello Premium.

Fai clic su Crea
Recupera l'IP del bilanciatore del carico
Ottieni l'IP del bilanciatore del carico dalla console facendo clic sul nome del bilanciatore del carico nell'elenco dei bilanciatori del carico per il tuo progetto.

Esegui una query sul bilanciatore del carico
Dopo un paio di minuti, prova a eseguire una query sul bilanciatore del carico per l'oggetto che hai caricato. Avrai bisogno dell'indirizzo IP del bilanciatore del carico e del nome dell'immagine. Il comando è strutturato come segue:
Dal terminal
curl -svo /dev/null http://LOAD_BALANCER_IP/google.png
Output
armanrye-macbookpro% curl -svo /dev/null http://34.98.81.123/google.png * Trying 34.98.81.123... * TCP_NODELAY set * Connected to 34.98.81.123 (34.98.81.123) port 80 (#0) > GET /google.png HTTP/1.1 > Host: YOUR_IP > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 OK < X-GUploader-UploadID: ADPycdtoILI76KVsvBvdVGvSfzaxys1m3zYqCepBrmJxAI48ni24cWCRIdNu-53PX3DS6iycxp6xwFbMpwtcHHZQUQmEBxAgng < Expires: Mon, 13 Dec 2021 22:58:26 GMT < Date: Mon, 13 Dec 2021 21:58:26 GMT < Cache-Control: public, max-age=3600 < Last-Modified: Mon, 13 Dec 2021 21:45:57 GMT < ETag: "8f9327db2597fa57d2f42b4a6c5a9855" < x-goog-generation: 1639431957957903 < x-goog-metageneration: 2 < x-goog-stored-content-encoding: identity < x-goog-stored-content-length: 5969 < Content-Type: image/png < x-goog-hash: crc32c=TeiHTA== < x-goog-hash: md5=j5Mn2yWX+lfS9CtKbFqYVQ== < x-goog-storage-class: STANDARD < Accept-Ranges: bytes < Content-Length: 5969 < Server: UploadServer
Verifica che i contenuti vengano pubblicati dalla CDN tramite il monitoraggio della CDN o del bilanciamento del carico. Dovresti riuscire ad avvicinarti a un tasso di corrispondenza del 100%. Se devi eseguire alcune query, puoi procedere nel seguente modo:
Dal terminal
#for i in `seq 1 50`; do curl http://%loadbalncer-IP%/google.png; done
Conferma i contenuti pubblicati da Cloud CDN
Verifica di gestire il traffico dalla CDN andando a Servizi di rete >> CDN

6. Elimina l'oggetto da GCS
Ora che la cache è popolata, eliminiamo l'oggetto dal bucket, rafforzando il concetto che stiamo applicando la policy alla cache e non al backend.
Vai a Cloud Storage >> %bucket name% >> objects
Seleziona l'immagine ed eliminala.

7. Crea una policy di sicurezza perimetrale per la cache CDN
Vai a Sicurezza di rete >> Cloud Armor e fai clic su Crea criterio.
Seleziona quanto segue
Tipo di policy: policy di sicurezza perimetrale
Azione predefinita: Nega



Applica la policy al bucket di backend.
8. Convalida il criterio di sicurezza edge
Ora che abbiamo creato una policy di sicurezza perimetrale davanti al nostro bucket di backend, verifichiamo che funzioni come previsto.
Controlla il criterio di sicurezza
Dopo qualche minuto, potrai verificare che la policy Cloud Armor sia in esecuzione. Dalla riga di comando, l'esecuzione del seguente comando restituirà un errore 403
Dal terminal
curl -svo /dev/null http://LOAD_BALANCER_IP/google.png
Output
curl -svo /dev/null http://34.98.81.123/google.png * Trying 34.98.81.123... * TCP_NODELAY set * Connected to 34.98.81.123 (34.98.81.123) port 80 (#0) > GET /google.png HTTP/1.1 > Host: YOUR_IP > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 403 Forbidden < X-GUploader-UploadID: ADPycdtS6FtJOGIsiWYDrAAE8VFeQuNutcvbGoQe2t8EZxsuspVtmCjyiTv_P3CNktroHMOGFXkTCfG-Jj-rUO60ZGPpEbpqcw < Content-Type: application/xml; charset=UTF-8 < Content-Length: 111 < Date: Mon, 13 Dec 2021 23:09:35 GMT < Expires: Mon, 13 Dec 2021 23:09:35 GMT < Cache-Control: private, max-age=0 < Server: UploadServer <
Esaminare i log
Successivamente, puoi controllare i log per visualizzare la policy di sicurezza perimetrale applicata. Vai a Operazioni >> Logging >> Esplora log.
Inserisci lo snippet riportato di seguito nella query e fai clic su Esegui.

resource.type:(http_load_balancer) AND jsonPayload.enforcedEdgeSecurityPolicy.name:(%SECURITY_POLICY_NAME%)
Prendi nota della risposta 403 e della policy di sicurezza applicata

Rimuovere la policy di sicurezza
Rimuovi la policy di sicurezza ed esegui query sull'oggetto dalla cache.
Vai a Sicurezza di rete >> Cloud Armor >> %POLICY NAME% >> destinazioni e rimuovi il bucket di destinazione.

Conferma della rimozione della policy
Dopo alcuni minuti, invia un altro comando curl alla risorsa nel bucket di archiviazione. Questa volta riceverai una risposta 200.
Dal terminal
curl -svo /dev/null http://LOAD_BALANCER_IP/google.png
Output
armanrye-macbookpro% curl -svo /dev/null http://34.98.81.123/google.png
* Trying 34.98.81.123...
* TCP_NODELAY set
* Connected to 34.98.81.123 (34.98.81.123) port 80 (#0)
> GET /google.png HTTP/1.1
> Host: YOUR_IP
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 200 OK
< X-GUploader-UploadID: ADPycdtI7f49P3MSuZSZ8vl6RwfwmnIDJ59EeSKp7UPvLPawdaiRHXiNWLtseQTxUxceWOvSLvpYmT3pWVkV4qeIP7M
< Date: Mon, 13 Dec 2021 23:06:46 GMT
< Last-Modified: Mon, 13 Dec 2021 21:45:57 GMT
< ETag: "8f9327db2597fa57d2f42b4a6c5a9855"
< x-goog-generation: 1639431957957903
< x-goog-metageneration: 2
< x-goog-stored-content-encoding: identity
< x-goog-stored-content-length: 5969
< Content-Type: image/png
< x-goog-hash: crc32c=TeiHTA==
< x-goog-hash: md5=j5Mn2yWX+lfS9CtKbFqYVQ==
< x-goog-storage-class: STANDARD
< Accept-Ranges: bytes
< Content-Length: 5969
< Server: UploadServer
< Age: 1621
< Cache-Control: public,max-age=3600
<
{ [775 bytes data]
* Connection #0 to host 34.98.81.123 left intact
* Closing connection 0
Complimenti! Hai completato questo lab sulle policy di sicurezza perimetrale di 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.
9. Pulizia del lab
Vai a Sicurezza di rete >> Cloud Armor >> %POLICY NAME% e seleziona Elimina.

Vai a Cloud Storage, seleziona il bucket che hai creato e fai clic su Elimina.

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

10. Complimenti!
Hai completato il codelab Protezione della cache perimetrale con Cloud Armor.
Argomenti trattati
- Come configurare un bucket Cloud Storage e un bilanciatore del carico cloud associato
- Come creare una policy di sicurezza perimetrale di Cloud Armor
- Come verificare che la policy di sicurezza perimetrale funzioni come previsto.
Passaggi successivi
- Prova a configurare una policy di sicurezza perimetrale con un hit della cache da una risorsa Compute Engine.