Difesa della cache perimetrale con Cloud Armor

1. Introduzione

I criteri di sicurezza Edge di Google Cloud Armor consentono di limitare l'accesso agli oggetti memorizzati nella cache su Google Cloud CDN e Google Cloud Storage. Alcuni esempi di motivi per farlo sono assicurarsi che gli utenti non accedano agli oggetti nei bucket di archiviazione da aree geografiche limitate o che la distribuzione dei contenuti multimediali stia filtrando in base alle aree geografiche per cui disponi di una licenza per farlo.

In questo lab creeremo un bucket GCS, caricheremo un'immagine al suo interno, lo assoceremo a un bilanciatore del carico e quindi abiliteremo i criteri di Cloud CDN e di sicurezza perimetrale.

Cosa imparerai a fare

  • Configurare un bucket Cloud Storage con contenuti memorizzabili nella cache
  • Come creare un criterio di sicurezza perimetrale per proteggere i contenuti
  • Come verificare che il criterio di sicurezza perimetrale funzioni come previsto

Che cosa ti serve

  • Networking di base e conoscenza di HTTP
  • Conoscenza di base della riga di comando Unix/Linux

2. Configurazione e requisiti

Configurazione dell'ambiente da seguire in modo autonomo

  1. 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.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • Il Nome progetto è il nome visualizzato dei partecipanti del progetto. Si tratta di una stringa di caratteri non utilizzata dalle API di Google e può essere aggiornata 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). La console Cloud genera automaticamente una stringa univoca. di solito non ti importa cosa sia. Nella maggior parte dei codelab, devi fare riferimento all'ID progetto (che solitamente è identificato come PROJECT_ID), quindi, se non ti piace, generane un altro a caso oppure puoi fare un tentativo personalizzato e controllare se è disponibile. Poi c'è "congelato" dopo la creazione del progetto.
  • C'è un terzo valore, il numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
  1. Successivamente, dovrai abilitare la fatturazione nella console Cloud per utilizzare le risorse/le API Cloud. Eseguire questo codelab non dovrebbe costare molto. Per arrestare le risorse in modo da non incorrere in fatturazione oltre questo tutorial, segui eventuali "pulizie" istruzioni riportate alla fine del codelab. I nuovi utenti di Google Cloud sono idonei al programma prova senza costi di 300$.

Avvia Cloud Shell

Anche se Google Cloud può essere utilizzato da remoto dal tuo laptop, in questo codelab utilizzerai Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.

Dalla console di Google Cloud, fai clic sull'icona di Cloud Shell nella barra degli strumenti in alto a destra:

bce75f34b2c53987.png

Dovrebbe richiedere solo qualche istante per eseguire il provisioning e connettersi all'ambiente. Al termine, dovresti vedere una schermata simile al seguente:

f6ef2b5f13479f3a.png

Questa macchina virtuale viene caricata con tutti gli strumenti di sviluppo necessari. Offre una home directory permanente da 5 GB e viene eseguita su Google Cloud, migliorando notevolmente le prestazioni di rete e l'autenticazione. Tutto il lavoro in questo lab può essere svolto semplicemente con un browser.

Prima di iniziare

All'interno di 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

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 un bucket Cloud Storage

In Cloud Console, vai al menu di navigazione > Cloud Storage > Browser. Fai clic su CREA BUCKET:

baf3d3c74282ecba.png

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 separata da punti (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 utilizzare trattini bassi (_) e non 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 da te

Fai clic su CONTINUA.

Classe di archiviazione predefinita: Standard

Fai clic su CONTINUA.

Deseleziona Applica la prevenzione dell'accesso pubblico in questo bucket in Impedisci l'accesso pubblico.

Seleziona Granulare sotto Controllo 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.

Innanzitutto, scarica questa immagine in un'istanza temporanea in Cloud Shell. Nell'esempio riportato di seguito, viene usata l'immagine 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 il tuo oggetto e fai clic sui tre puntini sulla destra e modifica le autorizzazioni in modo che siano pubbliche.

821aad82d8633922.png

30a975d3ad22d33d.png

5. Crea un bilanciatore del carico

Quindi creeremo un bilanciatore del carico HTTP.

Vai a Networking >> Servizi di rete >> Bilanciamento del carico >> Crea il bilanciatore del carico >> Bilanciatore del carico HTTP >> Internet per le 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 corrispondente al bucket che hai appena creato e seleziona CDN e contenuti statici nella cache abilitati. Fai clic su Crea.

ed392a56538d499e.png

Crea regole per host e percorso

Vai a Regole host e percorso sul lato sinistro. Utilizzeremo una semplice regola host/percorso e invieremo qualsiasi richiesta al bucket.

7c1a664e0d1f15b0.png

Crea configurazione frontend

Seleziona la configurazione frontend. Per la configurazione del frontend utilizzeremo HTTP (sebbene HTTPS funzioni anche se hai un certificato) e un indirizzo IP temporaneo. Inoltre, ci assicuriamo di aver selezionato la rete di livello Premium.

2597a5e63d618622.png

Fai clic su Crea

Ottieni IP bilanciatore del carico

Recupera 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.

9b757362d806e835.png

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. Sono necessari l'indirizzo IP del bilanciatore del carico e il nome dell'immagine. Il comando ha la seguente struttura:

Dal terminale

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 CDN o monitoraggio del bilanciamento del carico. Dovresti riuscire ad avvicinarti a un tasso di hit del 100%. Per eseguire alcune query, puoi procedere come segue:

Dal terminale

#for i in `seq 1 50`; do curl http://%loadbalncer-IP%/google.png; done

Conferma i contenuti pubblicati da Cloud CDN

Per verificare se stai gestendo il traffico da una CDN, vai a Servizi di rete >> CDN

a52d0ba4c084aa05.png

6. Elimina l'oggetto da GCS

Ora che la cache è compilata, eliminiamo l'oggetto dal bucket, confermando che stiamo applicando il criterio alla cache e non al backend.

Vai a Cloud Storage >> %nome bucket% >> oggetti

Seleziona l'immagine ed eliminala.

a1cc1bb9a0ff41df.png

7. Crea criterio di sicurezza perimetrale per la cache CDN

Vai a Sicurezza della rete >>. Cloud Armor e fai clic su Crea criterio

Seleziona quanto segue

Tipo di criterio: criterio di sicurezza perimetrale

Azione predefinita: Rifiuta

7a12374be33026fd.png

b7c4efc091272358.png

77ddbcddd07b65d2.png

Applica il criterio al bucket di backend.

8. Convalida criterio di sicurezza perimetrale

Ora che abbiamo creato un criterio di sicurezza perimetrale davanti al nostro bucket di backend, verifichiamo che funzioni come previsto.

Controlla il criterio di sicurezza

Dopo alcuni minuti, potrai verificare che il criterio di Cloud Armor sia in esecuzione. Dalla riga di comando, l'esecuzione di questo comando restituirà un errore 403

Dal terminale

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
<

Esamina i log

In seguito, puoi controllare i log per vedere il criterio di sicurezza perimetrale applicata. Vai a Operazioni >> Logging >> Esplora log

Inserisci lo snippet seguente nella query e fai clic su Esegui

14972af5ae6c182a.png

resource.type:(http_load_balancer) AND jsonPayload.enforcedEdgeSecurityPolicy.name:(%SECURITY_POLICY_NAME%)

Prendi nota della risposta 403 e del criterio di sicurezza applicato.

cddc48ca93ad79ca.png

Rimuovere il criterio di sicurezza

Rimuovi il criterio di sicurezza ed esegui una query sull'oggetto dalla cache.

Vai a Sicurezza della rete >>. Cloud Armor >> %NOME NORMA% >> target e rimuovi il bucket di destinazione.

350655729a89eb33.png

Conferma rimozione del criterio

Dopo alcuni minuti, invia un altro curl alla risorsa nel bucket di archiviazione. Questa volta riceverai una risposta di tipo 200.

Dal terminale

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 sui criteri di sicurezza Edge 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 della rete >>. Cloud Armor >> %POLICY NAME% e seleziona Elimina

21eefb5f375e8fee.png

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

ef2fa8d45c1d3452.png

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

ee2e78c10f4104eb.png

10. Complimenti!

Hai completato il codelab su Defending Edge Cache con Cloud Armor.

Argomenti trattati

  • Come configurare un bucket Cloud Storage e il bilanciatore del carico Cloud associato
  • Come creare un criterio di sicurezza perimetrale di Cloud Armor
  • Come verificare che il criterio di sicurezza perimetrale funzioni come previsto.

Passaggi successivi

  • Prova a configurare un criterio di sicurezza perimetrale con un successo della cache da una risorsa Compute Engine.