1. Introduzione
Cloud Next Generation Firewall (NGFW)
Cloud Next Generation Firewall è un servizio firewall completamente distribuito con funzionalità di protezione avanzate, microsegmentazione e copertura pervasiva per proteggere i tuoi carichi di lavoro Google Cloud da attacchi interni ed esterni.
Cloud NGFW offre i seguenti vantaggi:
- Servizio firewall distribuito:Cloud NGFW fornisce un'applicazione stateful e completamente distribuita basata sull'host su ogni workload per abilitare l'architettura di sicurezza Zero Trust.
- Configurazione e deployment semplificati:Cloud NGFW implementa criteri firewall di rete e gerarchici che possono essere collegati a un nodo della gerarchia delle risorse. Queste policy forniscono un'esperienza firewall coerente nella gerarchia delle risorse Google Cloud.
- Controllo granulare e microsegmentazione:la combinazione di policy firewall e tag regolati da Identity and Access Management (IAM) fornisce un controllo preciso per il traffico nord-sud ed est-ovest fino a una singola VM, tra le reti Virtual Private Cloud (VPC).
Policy del firewall di rete
La policy firewall di rete funge da contenitore per le regole firewall. Le regole definite in una policy firewall di rete non vengono applicate da nessuna parte finché la policy non viene associata a una rete VPC. A ogni rete VPC può essere associato un criterio firewall di rete. I criteri firewall di rete supportano i tag gestiti da IAM (o semplicemente tag) nelle regole firewall e possono essere utilizzati per fornire l'identità al workload.
La condivisione di un criterio firewall di rete tra più reti e l'integrazione con i tag gestiti da IAM semplificano notevolmente la configurazione e la gestione dei firewall.
Con l'introduzione del criterio firewall di rete, i criteri firewall di Google Cloud ora sono costituiti dai seguenti componenti:
- Policy firewall gerarchica
- Regole firewall VPC
- Criterio firewall di rete globale e criterio firewall di rete a livello di regione
I criteri firewall gerarchici sono supportati nei nodi dell'organizzazione e delle cartelle all'interno della gerarchia delle risorse, mentre le regole firewall VPC e i criteri firewall di rete vengono applicati a livello di VPC. Una grande differenza tra le regole firewall VPC e le policy firewall di rete è che le regole firewall VPC possono essere applicate solo a una singola rete VPC, mentre le policy firewall di rete possono essere associate a un singolo VPC o a un gruppo di VPC, tra gli altri vantaggi come gli aggiornamenti batch.
In questo lab testeremo il criterio firewall gerarchico e il criterio firewall di rete globale.
Infine, abbiamo anche le regole firewall implicite incluse in ogni rete VPC:
- Una regola in uscita la cui azione è consentita e la cui destinazione è 0.0.0.0/0.
- Una regola di traffico in entrata la cui azione è deny, la cui origine è 0.0.0.0/0
Per impostazione predefinita, la sequenza di applicazione è mostrata nel seguente diagramma:

Tag regolati da IAM
I nuovi tag integrati nelle regole dei criteri firewall sono risorse di coppie chiave-valore definite a livello di organizzazione o progetto della gerarchia di risorse Google Cloud. Come suggerisce il nome, questo tag contiene un controllo dell'accesso IAM che specifica chi può fare cosa sul tag. Le autorizzazioni IAM, ad esempio, consentono di specificare quali entità possono assegnare valori ai tag e quali entità possono associare i tag alle risorse. Una volta applicato un tag a una risorsa, le regole delle policy del firewall possono utilizzarlo per consentire e negare il traffico.
I tag rispettano il modello di risorse di ereditarietà di Google Cloud, il che significa che i tag e i relativi valori vengono trasmessi nella gerarchia dagli elementi padre. Di conseguenza, i tag possono essere creati in un'unica posizione e poi utilizzati da altre cartelle e progetti in tutta la gerarchia delle risorse. Visita questa pagina per ulteriori dettagli su tag e limitazione dell'accesso.
I tag non devono essere confusi con i tag di rete, che sono stringhe che possono essere aggiunte alle istanze Compute Engine; sono associati all'istanza e scompaiono quando l'istanza viene ritirata. Le regole firewall VPC possono includere tag di rete, ma poiché non sono considerate risorse cloud, non sono soggette al controllo dell'accesso IAM. Visita questa pagina per informazioni dettagliate sulla differenza.
2. Obiettivi didattici
- Come creare tag gestiti da IAM da utilizzare con Cloud NGFW e con ambito globale.
- Come collegare i tag alle VM.
- Come creare una policy firewall gerarchica e associarla a una cartella.
- Come creare una regola firewall nel criterio firewall gerarchico e specificare l'origine e la destinazione utilizzando i tag gestiti da IAM.
3. Architettura complessiva del lab

Organizzazione e cartelle:
- Creerai due cartelle,
folder1efolder2, direttamente sotto la tua organizzazione.
Progetti:
- In
folder1, creerai un progetto host. Questo progetto conterrà la rete VPC condivisa. - All'interno di
folder2, creerai un progetto di servizio. Questo progetto conterrà le VM che utilizzano il VPC condiviso.
Networking:
- Nel progetto host verrà creata una rete VPC denominata
mynete configurata come VPC condiviso. Ciò consente alle risorse nel progetto di servizio di utilizzare la rete. - Nel progetto di servizio verranno create due VM e connesse al VPC condiviso
mynet.
Tag regolati da IAM:
- Creerai un tag gestito da IAM denominato
http_tagscon due valori, denominatihttp_serverehttp_client, a livello di organizzazione. Questi tag/valori verranno utilizzati per identificare e applicare le regole firewall alle VM.
Criteri firewall:
- Verrà creata una policy firewall gerarchica e associata a
folder1. Una regola all'interno di questa policy utilizzerà i tag gestiti da IAM per consentire il traffico dahttp-clientahttp-serversulla porta 80. - Nel progetto host verrà creato un criterio firewall di rete associato al VPC
mynet. Questo criterio includerà una regola per consentire l'accesso SSH IAP alle VM a scopo di test.
4. Passaggi di preparazione
Innanzitutto, configura i ruoli IAM, l'infrastruttura di rete e le istanze necessari nella tua organizzazione Google Cloud.
Ruoli IAM richiesti per lavorare sul lab
Iniziamo assegnando i ruoli IAM richiesti all'account Google Cloud a livello di organizzazione.
- Amministratore dell'organizzazione (
roles/resourcemanager.organizationAdmin): questo ruolo consente di gestire le policy IAM e visualizzare le policy dell'organizzazione per organizzazioni, cartelle e progetti. - Amministratore del tag(
roles/resourcemanager.tagAdmin). Questo ruolo consente di creare, aggiornare ed eliminare tag sicuri. - Ruolo Utente tag (
roles/resourcemanager.tagUser). Questo ruolo consente di accedere all'elenco dei tag sicuri e di gestire le relative associazioni con le risorse. - Ruolo Amministratore policy firewall dell'organizzazione Compute (
roles/compute.orgFirewallPolicyAdmin). Questo ruolo ti consente di controllare completamente le policy firewall dell'organizzazione Compute Engine. - Ruolo Amministratore risorse organizzazione Compute (
roles/compute.orgSecurityResourceAdmin). Questo ruolo ti consente di controllare completamente le associazioni delle policy firewall di Compute Engine all'organizzazione o alla cartella. - Amministratore di rete Compute (
roles/compute.networkAdmin). Questo ruolo ti offre il controllo completo delle risorse di networking di Compute Engine. - Amministratore istanze Compute( beta) (
roles/compute.instanceAdmin). Questo ruolo ti offre il controllo completo delle risorse delle istanze di Compute Engine. - Amministratore Logging (
roles/logging.admin). Questo ruolo ti concede l'accesso a tutte le autorizzazioni di logging e alle autorizzazioni dipendenti. - Amministratore service account (
roles/iam.serviceAccountAdmin). Questo ruolo consente di creare e gestire i service account. - Amministratore utilizzo dei servizi (
roles/serviceusage.serviceUsageAdmin). Questo ruolo ti consente di abilitare, disabilitare e analizzare gli stati dei servizi, analizzare le operazioni e utilizzare la quota e la fatturazione per un progetto consumer. - Amministratore VPC condivisa Compute (
roles/compute.xpnAdmin). Questo ruolo ti consente di amministrare una rete VPC condivisa (XPN).
Crea cartelle e progetti
In Cloud Shell, esegui le operazioni seguenti per creare folder1 e folder2:
gcloud auth login
export org_id=$(gcloud organizations list --format='value(ID)')
export BILLING_ACCOUNT_ID=$(gcloud billing accounts list --format='value(ACCOUNT_ID)')
export folder1=[FOLDER1 NAME]
export folder2=[FOLDER2 NAME]
export hostproject=[HOST PROJECT NAME]
export serviceproject=[SERVICE PROJECT NAME]
export regionname=[REGION NAME]
export zonename=[COMPUTE ZONE NAME]
gcloud resource-manager folders create --display-name=$folder1 --organization=$org_id
export folder1_id=$(gcloud resource-manager folders list --organization=$org_id --filter="displayName=$folder1" --format="value(ID)")
gcloud resource-manager folders create --display-name=$folder2 --organization=$org_id
export folder2_id=$(gcloud resource-manager folders list --organization=$org_id --filter="displayName=$folder2" --format="value(ID)")
In Cloud Shell, esegui le seguenti operazioni per creare il progetto host in folder1:
gcloud projects create --name=$hostproject --folder=$folder1_id
Verrà visualizzato quanto segue. Premi Y per creare il progetto con il nuovo ID progetto.
No project ID provided.
Use [NEW-PROJECT-ID] as project ID (Y/n)?
Prendi nota dell'ID progetto. In Cloud Shell, esegui quanto segue per esportarlo in hostproject_id:
export hostproject_id=[HOSTPROJECT ID]
In Cloud Shell, esegui le seguenti operazioni per collegare il progetto host all'account di fatturazione:
gcloud billing projects link $hostproject_id \
--billing-account=$BILLING_ACCOUNT_ID
In Cloud Shell, esegui le seguenti operazioni per creare il progetto di servizio in folder2:
gcloud projects create --name=$serviceproject --folder=$folder2_id
Verrà visualizzato quanto segue. Premi Y per creare il progetto con il nuovo ID progetto.
No project ID provided.
Use [NEW-PROJECT-ID] as project ID (Y/n)?
Prendi nota dell'ID progetto. In Cloud Shell, esegui le seguenti operazioni per esportarlo in serviceproject_id:
export serviceproject_id=[SERVICEPROJECT ID]
In Cloud Shell, esegui le seguenti operazioni per collegare il progetto di servizio all'account di fatturazione:
gcloud billing projects link $serviceproject_id \
--billing-account=$BILLING_ACCOUNT_ID
Creare tag regolati da IAM
Un tag è una coppia chiave-valore che può essere collegata a un'organizzazione, una cartella o un progetto. Per ulteriori dettagli, consulta le sezioni Creazione e gestione dei tag e Autorizzazioni richieste.
Creiamo un tag a livello di organizzazione, http-tags. Lo scopo del tag è l'utilizzo di Cloud NGFW. Non limitiamo l'ambito a una singola rete: il tag ha un ambito globale. In un secondo momento, applicheremo il tag alle VM create nel progetto di servizio in folder2.
In Cloud Shell, esegui le seguenti operazioni:
gcloud resource-manager tags keys create http_tags \
--parent=organizations/$org_id \
--purpose GCE_FIREWALL \
--purpose-data organization=auto
Utilizzeremo l'ID chiave tag per annotare la VM durante la creazione. In Cloud Shell, esegui quanto segue per ottenere l'ID della chiave del tag:
export http_tags_id=$(gcloud resource-manager tags keys describe $org_id/http_tags --format="value(name)")
echo $http_tags_id
In Cloud Shell, esegui le seguenti operazioni per creare due nuovi valori di tag, http_server e http_client:
gcloud resource-manager tags values create http_server \
--parent $org_id/http_tags
gcloud resource-manager tags values create http_client \
--parent $org_id/http_tags
Utilizzeremo l'ID tag e l'ID valore tag per annotare la VM durante la creazione. In Cloud Shell, esegui le seguenti operazioni per ottenere l'ID valore tag di http_server e http_client:
export http_tags_http_server_id=$(gcloud resource-manager tags values describe $org_id/http_tags/http_server --format="value(name)")
echo $http_tags_http_server_id
export http_tags_http_client_id=$(gcloud resource-manager tags values describe $org_id/http_tags/http_client --format="value(name)")
echo $http_tags_http_client_id
Abilita le API nel progetto host e nel progetto di servizio
In Cloud Shell, esegui le seguenti operazioni:
gcloud services enable compute.googleapis.com --project=$serviceproject_id
gcloud services enable compute.googleapis.com --project=$hostproject_id
Crea un VPC nel progetto host
Nel progetto host, crea una rete VPC con modalità subnet personalizzata ed esegui le seguenti operazioni in Cloud Shell:
gcloud compute networks create mynet \
--subnet-mode=custom \
--project=$hostproject_id
Crea subnet nel progetto host
In Cloud Shell, esegui questo comando per creare una subnet IPv4:
gcloud compute networks subnets create mysubnet \
--network=mynet \
--range=10.0.0.0/28 \
--region=$regionname \
--project=$hostproject_id
Abilita il VPC condiviso nel progetto host
In Cloud Shell, esegui le seguenti operazioni per abilitare la rete VPC condivisa nel progetto host:
gcloud compute shared-vpc enable $hostproject_id
Collega il progetto di servizio per il VPC condiviso nel progetto host
In Cloud Shell, esegui le seguenti operazioni per collegare il progetto di servizio per il VPC condiviso nel progetto host:
gcloud compute shared-vpc associated-projects add $serviceproject_id --host-project=$hostproject_id
Crea router Cloud e Cloud NAT nel progetto host
Cloud NAT viene utilizzato per consentire il traffico in uscita verso internet per le VM per scaricare e installare applicazioni.
gcloud compute routers create $regionname-cr \
--network=mynet \
--region=$regionname \
--project=$hostproject_id
gcloud compute routers nats create $regionname-nat \
--router=$regionname-cr \
--region=$regionname \
--nat-all-subnet-ip-ranges \
--auto-allocate-nat-external-ips \
--project=$hostproject_id
Crea istanze nel service project
Nel progetto di servizio, crea due istanze nelle subnet che hai appena creato nel VPC condiviso nel progetto host. Un'istanza è denominata http-server e annotiamo il tag di http_tags con il valore di http_server. L'altra istanza si chiama http-client e annotiamo il tag di http_tags con il valore di http_client. Esegui questi comandi in Cloud Shell:
gcloud compute instances create http-client \
--project=$serviceproject_id \
--subnet=projects/$hostproject_id/regions/$regionname/subnetworks/mysubnet \
--zone=$zonename \
--no-address \
--resource-manager-tags=$http_tags_id=$http_tags_http_client_id
gcloud compute instances create http-server \
--project=$serviceproject_id \
--subnet=projects/$hostproject_id/regions/$regionname/subnetworks/mysubnet \
--zone=$zonename \
--no-address \
--resource-manager-tags=$http_tags_id=$http_tags_http_server_id \
--metadata startup-script='#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
a2enmod ssl
sudo a2ensite default-ssl
echo "I am a Http Server." | \
tee /var/www/html/index.html
systemctl restart apache2'
Prendi nota dell'indirizzo IP interno di http-server. Lo utilizzeremo nel passaggio successivo di test della regola firewall.
export http_server_ip=$(gcloud compute instances describe http-server --zone $zonename --format='value(networkInterfaces[0].networkIP)' --project $serviceproject_id)
echo $http_server_ip
5. Crea una policy del firewall di rete globale nel progetto host
Creeremo una policy firewall di rete globale nel progetto host e la assoceremo al VPC condiviso nel progetto host.
gcloud config set project $hostproject_id
gcloud compute network-firewall-policies create mynet-fw-policy \
--global \
--project=$hostproject_id
gcloud compute network-firewall-policies associations create \
--firewall-policy=mynet-fw-policy \
--network=mynet \
--name=mynet-fw-policy \
--global-firewall-policy \
--project=$hostproject_id
Per consentire a IAP di connettersi alle tue istanze VM, crea una regola firewall nella policy firewall di rete:
- 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.
gcloud compute network-firewall-policies rules create 1000 \
--action=ALLOW \
--firewall-policy=mynet-fw-policy \
--description="mynet-allow-iap" \
--direction=INGRESS \
--src-ip-ranges=35.235.240.0/20 \
--layer4-configs=tcp:22 \
--global-firewall-policy \
--project=$hostproject_id
Nella console, puoi andare al progetto host e trovare la policy firewall di rete globale appena creata in Policy firewall. Puoi controllare la regola firewall appena creata nella policy firewall di rete. Ecco il link alla console per arrivarci. Assicurati di impostare il selettore di progetti sul progetto host nella console.
6. Testa l'accesso dalla VM http-client alla VM http-server
Accedi tramite SSH alla VM denominata http-client e verifica se può accedere a http-server sulla porta HTTP 80.
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute ssh \
--zone=$zonename "http-client" \
--tunnel-through-iap \
--project=$serviceproject_id
Utilizza curl per accedere al server web.
curl -m 10 [http_server_ip]
Verrà visualizzato il risultato del comando curl. Non esiste alcuna regola firewall in entrata che consenta la porta 80 per http-server.
Timeout della connessione dopo 10.000 millisecondi.
Torna a Cloud Shell uscendo dalla sessione SSH.
exit
7. Crea criteri firewall gerarchici e regole firewall
Creeremo una policy del firewall gerarchica in folder1 e la assoceremo a folder1. Le regole firewall nella policy verranno applicate al progetto host in folder1.
Crea policy firewall gerarchica
gcloud compute firewall-policies create \
--folder=$folder1_id \
--short-name=my-folder1-fw-policy
Crea una regola firewall nella policy firewall gerarchica
La regola consente alle VM con un valore tag di http_tags/http_client di accedere alle VM con un valore tag di http_tags/http_server sulla porta TCP 80.
gcloud compute firewall-policies rules create 100 \
--organization=$org_id \
--firewall-policy my-folder1-fw-policy \
--direction=INGRESS \
--layer4-configs=tcp:80 \
--action=allow \
--src-secure-tags=$org_id/http_tags/http_client \
--target-secure-tags=$org_id/http_tags/http_server \
--description=folder1-allow-http
Associa il criterio firewall gerarchico a folder1
gcloud compute firewall-policies associations create \
--firewall-policy=my-folder1-fw-policy \
--folder=$folder1_id \
--name=my-folder1-fw-policy\
--organization=$org_id
Nella console, puoi andare a folder1 e trovare la policy del firewall gerarchica appena creata in Policy del firewall. Il criterio firewall è mostrato in "Criteri firewall situati in questa cartella". Puoi controllare la regola firewall appena creata nel criterio firewall gerarchico. Ecco il link alla console per arrivarci. Assicurati di impostare il selettore di progetti su folder1 nella console.
8. Testa l'accesso dalla VM http-client alla VM http-server
Controlla i criteri firewall effettivi applicati al VPC condiviso nel progetto host.
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute networks get-effective-firewalls mynet --project=$hostproject_id
Vedrai la policy firewall gerarchica ereditata in questo modo:
TYPE: org-firewall
FIREWALL_POLICY_NAME: <NUMBER_FOR_YOUR_FW_POLICY>
FIREWALL_POLICY_PRIORITY:
PRIORITY: 100
ACTION: ALLOW
DIRECTION: INGRESS
DISABLED: False
IP_RANGES:
You will see the network firewall policy to the VPC like this:
TYPE: network-firewall-policy
FIREWALL_POLICY_NAME: mynet-fw-policy
FIREWALL_POLICY_PRIORITY: 1000
PRIORITY: 1000
ACTION: ALLOW
DIRECTION: INGRESS
DISABLED: False
IP_RANGES: 35.235.240.0/20
Accedi tramite SSH alla VM denominata http-client e verifica se può accedere a http-server sulla porta HTTP 80.
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute ssh \
--zone=$zonename "http-client" \
--tunnel-through-iap \
--project=$serviceproject_id
Utilizza curl per accedere al server web.
curl [http_server_ip]
Vedrai il comando curl restituire correttamente la risposta da http-server.
I am a Http Server.
La regola firewall in entrata della policy firewall gerarchica consente l'accesso da http-client a http-server sulla porta 80.
Torna a Cloud Shell uscendo dalla sessione SSH.
exit
9. Esegui la pulizia
Pulisci le VM nel service project
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute instances delete http-server --zone $zonename --project=$serviceproject_id
gcloud compute instances delete http-client --zone $zonename --project=$serviceproject_id
Esegui la pulizia del criterio firewall gerarchico
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute firewall-policies associations delete my-folder1-fw-policy \
--firewall-policy=my-folder1-fw-policy \
--organization=$org_id
gcloud compute firewall-policies rules delete 100 \
--organization=$org_id \
--firewall-policy=my-folder1-fw-policy
gcloud compute firewall-policies delete my-folder1-fw-policy \
--organization=$org_id
Ripulisci i tag a livello di organizzazione
In Cloud Shell, esegui le seguenti operazioni:
gcloud resource-manager tags values delete $http_tags_http_server_id
gcloud resource-manager tags values delete $http_tags_http_client_id
gcloud resource-manager tags keys delete $http_tags_id
Pulire il progetto host
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute shared-vpc associated-projects remove $serviceproject_id --host-project=$hostproject_id
gcloud compute shared-vpc disable $hostproject_id
gcloud projects delete $hostproject_id
Pulire il service project
In Cloud Shell, esegui le seguenti operazioni:
gcloud projects delete $serviceproject_id
Pulire le cartelle
In Cloud Shell, esegui le seguenti operazioni:
gcloud resource-manager folders delete $folder1_id
gcloud resource-manager folders delete $folder2_id
10. Complimenti
Hai testato correttamente il criterio firewall gerarchico con i tag gestiti da IAM.