Codelab su Cloud Secure Web Proxy (SWP)

1. Introduzione

Secure Web Proxy per Google Cloud

Cloud SWP è un servizio cloud-first che fornisce un proxy web sicuro per proteggere il traffico web in uscita (HTTP/S). Configura i client in modo che utilizzino esplicitamente Cloud SWG come proxy. Le richieste web possono provenire dalle seguenti origini:

  • Istanze di macchine virtuali (VM)
  • Container
  • Un ambiente serverless che utilizza un connettore serverless
  • Workload nel peering VPC
  • Carichi di lavoro esterni a Google Cloud connessi tramite Cloud VPN o Cloud Interconnect

Cloud SWP consente di applicare criteri flessibili e granulari basati su identità cloud-first e applicazioni web.

Vantaggi

Di seguito sono riportati alcuni esempi di vantaggi che Cloud SWP potrebbe fornire a un'organizzazione:

Migrazione a Google Cloud

Cloud SWP ti aiuta a eseguire la migrazione a Google Cloud mantenendo i criteri di sicurezza e i requisiti esistenti per il traffico web in uscita. Puoi evitare di utilizzare soluzioni di terze parti che richiedono un'altra console di gestione o la modifica manuale dei file di configurazione.

Accesso a servizi web esterni attendibili

Cloud SWP consente di applicare criteri di accesso granulari al traffico web in uscita in modo da proteggere la rete. Crei e identifichi le identità di workload o applicazioni, quindi applichi i criteri.

Accesso monitorato a servizi web non attendibili

Puoi utilizzare Cloud SWP per fornire l'accesso monitorato a servizi web non attendibili. Cloud SWP identifica il traffico non conforme ai criteri e lo registra in Cloud Logging. Puoi quindi monitorare l'utilizzo di internet, scoprire le minacce alla tua rete e rispondere alle minacce.

Controlli granulari dei criteri per le API di Google

Puoi utilizzare Cloud SWP per fornire policy granulari per le API di Google. Ad esempio, puoi impostare criteri a livello di bucket/oggetto utilizzando Common Expression Language (CEL).

Funzionalità supportate

Cloud SWP supporta le seguenti funzionalità:

Servizio proxy esplicito

I client devono essere configurati in modo esplicito per utilizzare il server proxy. Il proxy Cloud SWP isola i client da internet creando nuove connessioni TCP per conto del client.

Scalabilità automatica dei proxy Envoy Cloud SWP

Supporta la regolazione automatica delle dimensioni del pool di proxy Envoy e della capacità del pool in una regione, il che consente prestazioni coerenti durante i periodi di forte domanda al costo più basso.

Criteri di accesso modulari per il traffico in uscita

Cloud SWP supporta in modo specifico le seguenti policy di uscita:

  • Identità di origine basata su tag sicuri, service account o indirizzi IP.
  • Destinazioni basate su URL e nomi host.
  • Richieste basate su metodi, intestazioni o URL. Gli URL possono essere specificati utilizzando elenchi, caratteri jolly o pattern.
  • Crittografia end-to-end: i tunnel client-proxy potrebbero transitare su TLS. Cloud SWP supporta anche HTTP/S CONNECT per le connessioni TLS end-to-end avviate dal client al server di destinazione.

Integrazione semplificata di Cloud NAT

Cloud NAT esegue automaticamente il provisioning di indirizzi IP pubblici aggiuntivi quando aumenta il set di proxy che gestiscono il traffico Cloud SWP.

Gli indirizzi IP pubblici statici manuali sono un'opzione anche per chi vuole avere IP di uscita noti.

Integrazione di Cloud Audit Logs e della suite operativa di Google Cloud

Cloud Audit Logs e la suite operativa di Google Cloud registrano le attività amministrative e le richieste di accesso per le risorse correlate a Cloud SWP. Registrano anche le metriche e i log delle transazioni per le richieste gestite dal proxy.

Ispezione TLS

Secure Web Proxy offre un servizio di ispezione TLS che consente di intercettare il traffico TLS, ispezionare la richiesta criptata e applicare policy di sicurezza.

  • Stretta integrazione con Certificate Authority Service (CAS), un repository scalabile e ad alta disponibilità per le CA private.
  • La possibilità di utilizzare la tua radice di attendibilità, se necessario. Puoi anche utilizzare una CA radice esistente per firmare le CA subordinate detenute da CAS. Se preferisci, puoi generare un nuovo certificato radice in CAS.
  • Criteri di decriptazione granulari utilizzando SessionMatcher e ApplicationMatcher all'interno delle regole dei criteri Secure Web Proxy. Questi criteri includono host corrispondenti presenti in elenchi di URL, espressioni regolari, intervalli di indirizzi IP ed espressioni simili. Se necessario, i criteri possono essere combinati con espressioni booleane.
  • Ogni policy Secure Web Proxy può essere configurata con la propria policy di ispezione TLS e il proprio pool di CA. In alternativa, più policy Secure Web Proxy possono condividere una singola policy di ispezione TLS.

Obiettivi didattici

  • Come eseguire il deployment e gestire Cloud SWP.

Che cosa ti serve

  • Conoscenza del deployment delle istanze e della configurazione dei componenti di rete
  • Conoscenza della configurazione del firewall VPC

2. Ambiente di test

Questo codelab utilizzerà un singolo VPC. Una risorsa di calcolo in questo ambiente eseguirà l'uscita utilizzando Cloud SWP, come mostrato nel diagramma seguente.

1264e30caa136365.png

In questo lab avremo due VM di workload.

Il client A verrà configurato per inviare tutte le richieste HTTP/HTTPS al Cloud SWP.

Client B NON sarà configurato per inviare esplicitamente richieste HTTP/HTTPS al Cloud SWP, ma utilizzerà Cloud NAT per il traffico diretto a internet.

3. Prima di iniziare

Il codelab richiede un singolo progetto.

In Cloud Shell, assicurati che l'ID progetto sia configurato.

export project_id=`gcloud config list --format="value(core.project)"`
export project_number=`gcloud projects describe $project_id --format="value(projectNumber)"`
export region=us-west1
export zone=us-west1-a
export prefix=codelab-swp
export member="serviceAccount:service-$project_number@gcp-sa-networksecurity.iam.gserviceaccount.com"

4. Abilita API

Abilita le API per utilizzare i prodotti

gcloud services enable networksecurity.googleapis.com
gcloud services enable certificatemanager.googleapis.com
gcloud services enable networkservices.googleapis.com

5. Crea rete VPC, subnet e subnet solo proxy

Rete VPC

Crea il VPC codelab-swp-vpc:

gcloud compute networks create $prefix-vpc --subnet-mode=custom 

Subnet

Crea le rispettive subnet nella regione selezionata:

gcloud compute networks subnets create $prefix-vpc-subnet \
   --range=10.10.10.0/24 --network=$prefix-vpc --region=$region

Subnet solo proxy

Crea una subnet solo proxy nella regione selezionata:

gcloud compute networks subnets create $prefix-proxy-only-subnet --purpose=REGIONAL_MANAGED_PROXY --role=ACTIVE --region=$region --network=$prefix-vpc --range=172.16.0.0/23

6. Crea regole firewall

Per consentire a IAP di connettersi alle tue istanze VM, crea una regola firewall che:

  • Si applichi a tutte le istanze VM a cui vuoi accedere tramite IAP.
  • Consente il traffico in entrata dall'intervallo IP 35.235.240.0/20. Questo intervallo contiene tutti gli indirizzi IP che utilizzati da IAP per l'inoltro TCP.

Da Cloud Shell:

gcloud compute firewall-rules create $prefix-allow-iap-proxy \
--direction=INGRESS \
--priority=1000 \
--network=$prefix-vpc \
--action=ALLOW \
--rules=tcp:22 \
--source-ranges=35.235.240.0/20

7. Crea router Cloud e Cloud NAT

Crea il router Cloud per Cloud NAT.

gcloud compute routers create ${prefix}-cr \
--region=$region \
--network=${prefix}-vpc

Crea il gateway Cloud NAT per il cliente B.

gcloud compute routers nats create $prefix-nat-gw-$region \
--router=$prefix-cr \
--router-region=$region \
--auto-allocate-nat-external-ips \
--nat-all-subnet-ip-ranges

8. Crea una policy di sicurezza del gateway

Crea un file YAML che contenga le informazioni pertinenti per la policy:

cat > /tmp/policy.yaml << EOF
description: Policy to allow .com traffic, then (/index.html), and finally TLS.
name: projects/${project_id}/locations/${region}/gatewaySecurityPolicies/${prefix}-policy
EOF

Esegui il comando gcloud per creare la policy dal file YAML:

gcloud network-security gateway-security-policies import ${prefix}-policy --source=/tmp/policy.yaml --location=${region}

9. Crea una regola della policy di sicurezza del gateway

Crea un file YAML contenente le regole. Queste regole sono rappresentate in Common Expression Language (CEL). Questo lab utilizzerà una semplice regola che consentirà il traffico verso i domini .com e bloccherà tutti gli altri:

cat > /tmp/rule-com.yaml << EOF
name: projects/${project_id}/locations/${region}/gatewaySecurityPolicies/${prefix}-policy/rules/rule-com
enabled: true
priority: 1
description: Allow .com traffic
basicProfile: ALLOW
sessionMatcher: host().endsWith('com')
EOF

Ora possiamo associare la regola alla policy di sicurezza del gateway:

gcloud network-security gateway-security-policies rules import rule-com --source=/tmp/rule-com.yaml --location=${region} --gateway-security-policy=${prefix}-policy

10. Crea un certificato e caricalo in Cloud Certificate Manager

Crea un certificato per terminare il traffico del workload:

openssl req -x509 -newkey rsa:2048 -keyout /tmp/key.pem -out /tmp/cert.pem -days 365 -subj '/CN=www.codelab-swp.com' -nodes -addext \
  "subjectAltName = DNS:www.codelab-swp.com"

Carica il certificato in Cloud Certificate Manager in modo che SWP possa farvi riferimento nella policy del gateway di sicurezza.

gcloud certificate-manager certificates create ${prefix}-cert --location=${region} --private-key-file=/tmp/key.pem --certificate-file=/tmp/cert.pem

11. Crea il gateway SWP

Crea il file YAML per SWP Gateway per fare riferimento alle informazioni precedenti, come certificato, policy di sicurezza del gateway, rete e subnet.

cat > /tmp/gateway.yaml << EOF
name: projects/${project_id}/locations/${region}/gateways/${prefix}-gateway
type: SECURE_WEB_GATEWAY
addresses: [10.10.10.50]
ports: [443]
certificateUrls: [projects/${project_id}/locations/${region}/certificates/${prefix}-cert]
gatewaySecurityPolicy: projects/${project_id}/locations/${region}/gatewaySecurityPolicies/${prefix}-policy
network: projects/${project_id}/global/networks/${prefix}-vpc
subnetwork: projects/${project_id}/regions/${region}/subnetworks/${prefix}-vpc-subnet
EOF

Crea il gateway:

gcloud network-services gateways import ${prefix}-swp --source=/tmp/gateway.yaml --location=${region}

Verifica che il gateway sia stato creato:

gcloud network-services gateways describe ${prefix}-swp --location ${region}

12. Crea istanze di Compute

Poiché Cloud SWP è un proxy esplicito, dobbiamo specificare esplicitamente l'IP del proxy per il traffico del workload. L'istanza di calcolo clientA avrà la variabile di ambiente impostata. Il cliente B non lo farà.

Crea le istanze di calcolo ClientA e ClientB:

gcloud compute instances create clienta \
   --subnet=$prefix-vpc-subnet \
   --no-address \
   --private-network-ip=10.10.10.10 \
   --zone $zone \
   --metadata startup-script='#! /bin/bash
apt-get update
sudo echo http_proxy=https://10.10.10.50:443/ >> /etc/environment
sudo echo https_proxy=https://10.10.10.50:443/ >> /etc/environment
'
gcloud compute instances create clientb \
   --subnet=$prefix-vpc-subnet \
   --no-address \
   --private-network-ip=10.10.10.200 \
   --zone $zone \
   --metadata startup-script='#! /bin/bash
apt-get update
'

13. Test della corrispondenza delle sessioni

Accedi tramite SSH alla VM di Compute "clienta" creata di recente. Questa VM ha la variabile di ambiente impostata per utilizzare Cloud SWP.

Da Cloud Shell:

gcloud compute ssh clienta --zone=$zone --tunnel-through-iap

Esegui alcune query web per convalidare la funzionalità. Abbiamo bisogno di -proxy-insecure perché abbiamo creato un certificato autofirmato per questo lab:

curl https://google.com --proxy-insecure

Output previsto:

davidtu@clienta:~$ curl https://google.com --proxy-insecure
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="https://www.google.com/">here</A>.
</BODY></HTML>

Come puoi vedere, la richiesta è stata "completata". È previsto un reindirizzamento 301, poiché il sito web reindirizza a https://www.google.com.

L'esecuzione del seguente comando fornisce log dettagliati con informazioni sulla connessione:

curl https://google.com --proxy-insecure -v

Evidenzia alcuni output per mostrare i dettagli della connessione proxy, i certificati e la destinazione.

davidtu@clienta:~$ curl https://google.com --proxy-insecure -v
* Uses proxy env variable https_proxy == 'https://10.10.10.50:443/'
*   Trying 10.10.10.50:443...
* Connected to 10.10.10.50 (10.10.10.50) port 443 (#0)
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use http/1.1
* Proxy certificate:
*  subject: CN=www.codelab-swp.com
*  start date: Dec 12 17:16:35 2022 GMT
*  expire date: Dec 12 17:16:35 2023 GMT
*  issuer: CN=www.codelab-swp.com
*  SSL certificate verify result: self signed certificate (18), continuing anyway.
* allocate connect buffer!
* Establish HTTP proxy tunnel to google.com:443
> CONNECT google.com:443 HTTP/1.1
> Host: google.com:443
> User-Agent: curl/7.74.0
> Proxy-Connection: Keep-Alive
> 
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
< HTTP/1.1 200 OK
< date: Mon, 12 Dec 2022 19:22:04 GMT
< 
* Proxy replied 200 to CONNECT request
* CONNECT phase completed!
...

Prova altri domini .com per verificare la funzionalità.

Ora proviamo altri domini non .com per verificare il comportamento di blocco predefinito:

curl https://wikipedia.org --proxy-insecure

Output previsto:

curl: (56) Received HTTP code 403 from proxy after CONNECT

Analogamente, esamina la registrazione dell'output dettagliato e verifica che Cloud SWP blocchi questo traffico:

curl https://wikipedia.org --proxy-insecure -v
davidtu@clienta:~$ curl https://wikipedia.org --proxy-insecure -v
* Uses proxy env variable https_proxy == 'https://10.10.10.50:443/'
*   Trying 10.10.10.50:443...
* Connected to 10.10.10.50 (10.10.10.50) port 443 (#0)
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use http/1.1
* Proxy certificate:
*  subject: CN=www.codelab-swp.com
*  start date: Dec 12 17:16:35 2022 GMT
*  expire date: Dec 12 17:16:35 2023 GMT
*  issuer: CN=www.codelab-swp.com
*  SSL certificate verify result: self signed certificate (18), continuing anyway.
* allocate connect buffer!
* Establish HTTP proxy tunnel to wikipedia.org:443
> CONNECT wikipedia.org:443 HTTP/1.1
> Host: wikipedia.org:443
> User-Agent: curl/7.74.0
> Proxy-Connection: Keep-Alive
> 
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
< HTTP/1.1 403 Forbidden
< content-length: 13
< content-type: text/plain
< date: Mon, 12 Dec 2022 19:35:09 GMT
< connection: close
< 
* Received HTTP code 403 from proxy after CONNECT
* CONNECT phase completed!
* Closing connection 0
curl: (56) Received HTTP code 403 from proxy after CONNECT

Se vuoi, puoi provare anche altri domini per verificare il comportamento.

Esci dalla sessione SSH di "clienta" e avvia una nuova connessione SSH a "clientb".

gcloud compute ssh clientb --zone=$zone --tunnel-through-iap

Esegui alcuni comandi curl per verificare il comportamento:

curl https://google.com

Questo dovrebbe funzionare come previsto nella VM clientb:

davidtu@clientb:~$ curl https://google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="https://www.google.com/">here</A>.
</BODY></HTML>

Test rispetto a un dominio org:

curl https://wikipedia.org

Questo funziona come previsto perché clientb non utilizza Cloud SWP:

davidtu@clientb:~$ curl https://wikipedia.org
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="https://www.wikipedia.org/">here</a>.</p>
</body></html>

Verifica l'invio esplicito del traffico tramite Cloud SWP:

curl -x https://10.10.10.50:443/ https://wikipedia.org --proxy-insecure 

Ci risulta che questo traffico venga negato tramite le norme Cloud SWP:

davidtu@clientb:~$ curl -x https://10.10.10.50:443/ https://wikipedia.org --proxy-insecure
curl: (56) Received HTTP code 403 from proxy after CONNECT

Come hai verificato, il traffico che utilizza Cloud SWP viene applicato in base al criterio di sicurezza configurato. Il traffico destinato a .com è consentito e tutte le altre destinazioni sono rifiutate.

Esci da clientb.

14. Aggiorna una regola della policy di sicurezza del gateway per ApplicationMatching

Aggiorniamo la regola in modo che corrisponda ai dettagli a livello di applicazione. Creeremo una regola per esaminare il percorso della richiesta e consentirlo solo se corrisponde a index.html.

cat > /tmp/rule-com.yaml << EOF
name: projects/${project_id}/locations/${region}/gatewaySecurityPolicies/${prefix}-policy/rules/rule-com
enabled: true
priority: 1
description: Allow .com traffic with path index.html
basicProfile: ALLOW
sessionMatcher: host().endsWith('com')
applicationMatcher: request.path.matches('index.html')
EOF

Ora possiamo associare la regola aggiornata al criterio di sicurezza del gateway:

gcloud network-security gateway-security-policies rules import rule-com --source=/tmp/rule-com.yaml --location=${region} --gateway-security-policy=${prefix}-policy

15. Test della regola ApplicationMatcher

Accedi tramite SSH a una VM di calcolo clienta. Questa VM ha la variabile di ambiente impostata per utilizzare Cloud SWP.

Da Cloud Shell:

gcloud compute ssh clienta --zone=$zone --tunnel-through-iap

Esegui alcune query web per convalidare la funzionalità. Abbiamo bisogno di -proxy-insecure perché abbiamo creato un certificato autofirmato per questo lab:

curl http://google.com --proxy-insecure

Tieni presente che questa query non andrà a buon fine, anche se in precedenza era andata a buon fine.

Access denied

Qualsiasi percorso di richiesta diverso da "index.html" deve essere bloccato con un errore 403. Non esitare a testare ulteriormente questa funzionalità.

Modifica la query in modo da includere il percorso /index.html

curl http://google.com/index.html --proxy-insecure

Questa richiesta dovrebbe andare a buon fine:

davidtu@clienta:~$ curl http://google.com/index.html --proxy-insecure
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="https://www.google.com/index.html">here</A>.
</BODY></HTML>

È previsto un reindirizzamento 301 poiché il sito web reindirizza a http://www.google.com/index.html

Tieni presente che si tratta di una richiesta HTTP. Successivamente, dovrai abilitare SWP per disporre delle funzionalità di ispezione TLS.

Poi esegui la stessa query, ma tramite TLS:

curl -k https://google.com/index.html --proxy-insecure

Output previsto:

curl: (56) Received HTTP code 403 from proxy after CONNECT

Questa richiesta dovrebbe non andare a buon fine, poiché SWP non è configurato per ispezionare TLS e non può valutare il percorso in base alla regola applicationMatcher.

Esci da clenta.

16. Abilita l'ispezione TLS

Senza l'ispezione TLS, applicationMatcher non corrisponderà al traffico HTTPS.

"applicationMatcher" consente il filtraggio in base a quanto segue:

  • Mappa delle intestazioni delle richieste
  • Metodo di richiesta
  • Richiedi host
  • Percorso richiesta
  • Query della richiesta
  • Schema della richiesta
  • URL di richiesta completo
  • Richiedi useragent

Crea service account

Questo service account avrà le autorizzazioni per generare certificati per l'ispezione TLS SWP.

gcloud beta services identity create \
    --service=networksecurity.googleapis.com \
    --project=$project_id

Assicurati che CAS sia abilitato

gcloud services enable privateca.googleapis.com

Crea un pool di CA

gcloud privateca pools create $prefix-ca-pool \
    --tier=devops \
    --project=$project_id \
    --location=$region 

Crea CA radice

CA utilizzata per la firma del certificato.

gcloud privateca roots create $prefix-root-ca --pool=$prefix-ca-pool \
  --location=$region \
  --auto-enable \
  --subject="CN=my-swp-ca, O=SWP LLC"

Creare un file di criteri di emissione di certificati

cat > /tmp/tls-issuance-policy.yaml << EOF
maximumLifetime: 1209600s
baselineValues:
  caOptions:
    isCa: false
  keyUsage:
    extendedKeyUsage:
      serverAuth: true
EOF

Crea il file YAML di ispezione TLS

cat > /tmp/tls-inspection-policy.yaml << EOF
caPool: projects/$project_id/locations/$region/caPools/$prefix-ca-pool
name: projects/$project_id/locations/$region/tlsInspectionPolicies/$prefix-tls-inspection
EOF

Crea policy di ispezione TLS

gcloud network-security tls-inspection-policies import $prefix-tls-inspection \
    --source=/tmp/tls-inspection-policy.yaml \
    --location=$region

Aggiorna il pool di CA per utilizzare il criterio di emissione di certificati

gcloud privateca pools update $prefix-ca-pool    --issuance-policy=/tmp/tls-issuance-policy.yaml --location=$region

Concedi autorizzazioni

In questo modo, il service account può utilizzare il pool di CA per generare certificati.

gcloud privateca pools add-iam-policy-binding $prefix-ca-pool \
    --member=$member \
    --role='roles/privateca.certificateManager' \
    --location=$region

Aggiorna il file YAML della policy per includere l'ispezione TLS

cat > /tmp/policy.yaml << EOF
description: some policy description
name: projects/${project_id}/locations/${region}/gatewaySecurityPolicies/${prefix}-policy
tlsInspectionPolicy: projects/${project_id}/locations/${region}/tlsInspectionPolicies/${prefix}-tls-inspection
EOF

Esegui il comando per applicare la policy aggiornata

gcloud network-security gateway-security-policies import ${prefix}-policy --source=/tmp/policy.yaml --location=${region}

Aggiorna le regole in modo da includere l'ispezione TLS

Poi specifica quali regole devono avere il flag di ispezione TLS "enabtlsInspectionEnabled: true".

cat > /tmp/rule-com.yaml << EOF
name: projects/${project_id}/locations/${region}/gatewaySecurityPolicies/${prefix}-policy/rules/rule-com
enabled: true
priority: 1
description: Allow .com traffic with path index.html
basicProfile: ALLOW
sessionMatcher: host().endsWith('com')
applicationMatcher: request.path.matches('index.html')
tlsInspectionEnabled: true
EOF

Esegui il comando per applicare la regola aggiornata

gcloud network-security gateway-security-policies rules import rule-com --source=/tmp/rule-com.yaml --location=${region} --gateway-security-policy=${prefix}-policy

17. Testare l'ispezione TLS

Accedi tramite SSH a una VM di calcolo clienta. Questa VM ha la variabile di ambiente impostata per utilizzare Cloud SWP.

Da Cloud Shell:

gcloud compute ssh clienta --zone=$zone --tunnel-through-iap

Esegui la query web precedente per verificare se SWP esegue l'ispezione TLS per recuperare il percorso

curl -k https://google.com/index.html --proxy-insecure

Questa volta dovrebbe avere esito positivo perché SWP può valutare ApplicationMatcher.

Output previsto:

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="https://www.google.com/index.html">here</A>.
</BODY></HTML>

Abbiamo configurato correttamente Cloud SWP per ispezionare TLS e valutare la logica di applicationMatcher.

Esci da clienta.

18. Procedura di pulizia

Da Cloud Shell, rimuovi il gateway SWP, il criterio di sicurezza, i certificati, le istanze, Cloud NAT e Cloud Router:

gcloud -q network-services gateways delete ${prefix}-swp --location=${region}

gcloud -q network-security gateway-security-policies rules delete rule-com --location=${region} --gateway-security-policy=${prefix}-policy

gcloud -q network-security gateway-security-policies delete ${prefix}-policy --location=${region}

gcloud -q certificate-manager certificates delete ${prefix}-cert --location=${region}

gcloud -q network-security tls-inspection-policies delete $prefix-tls-inspection --location=$region

gcloud -q privateca roots disable $prefix-root-ca --pool=$prefix-ca-pool --location=$region

gcloud -q privateca roots delete $prefix-root-ca --pool=$prefix-ca-pool --location=$region --ignore-active-certificates --skip-grace-period

gcloud -q privateca pools delete $prefix-ca-pool --location=$region

gcloud -q compute instances delete clienta --zone=$zone

gcloud -q compute instances delete clientb --zone=$zone

gcloud -q compute routers nats delete ${prefix}-nat-gw-${region} \
--router=$prefix-cr --router-region=$region

gcloud -q compute routers delete `gcloud compute routers list --regions=$region --format="value(NAME)" | grep -e swg-autogen -e codelab-swp` --region=$region

Rimuovi le subnet, le regole firewall e i VPC:

gcloud -q compute networks subnets delete $prefix-vpc-subnet \
    --region $region

gcloud -q compute networks subnets delete $prefix-proxy-only-subnet \
    --region=$region

gcloud -q compute firewall-rules delete $prefix-allow-iap-proxy

gcloud -q compute networks delete $prefix-vpc

19. Complimenti!

Congratulazioni per aver completato il codelab. Hai configurato e implementato correttamente Cloud Secure Web Proxy su Google Cloud.

Argomenti trattati

  • SWP per Cloud e i vantaggi