Criterio firewall di rete globale con tag

1. Introduzione

Criteri firewall di rete

I firewall sono i componenti di base per un ambiente cloud sicuro. In precedenza, abbiamo introdotto i criteri firewall a livello di organizzazione e di cartella, lasciando invariati i firewall VPC. In questa versione, espanderemo la struttura dei criteri del firewall fino al livello VPC e apporteremo diversi miglioramenti al supporto attuale dei criteri del firewall al fine di fornire un supporto unificato del firewall nella gerarchia delle risorse di Google Cloud e un'esperienza utente coerente nella gestione del controllo dei criteri del firewall in modo sicuro, flessibile e scalabile.

Il criterio del firewall di rete funge da contenitore per le regole del firewall. Le regole definite in un criterio firewall di rete non vengono applicate finché il criterio non viene associato 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, che sostituiscono i tag di rete attuali e possono essere utilizzati per fornire l'identità al workload.

La condivisione di un criterio firewall di rete tra le 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:

  1. Criterio firewall gerarchico
  2. Regole firewall VPC
  3. Criterio firewall di rete ( globale e regionale)

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 i criteri firewall di rete è che le regole firewall VPC possono essere applicate solo a una singola rete VPC, mentre i criteri firewall di rete possono essere associati a un singolo VPC o a un gruppo di VPC, tra gli altri vantaggi come l'aggiornamento collettivo.

Infine, sono presenti anche le regole firewall implicite fornite con ogni rete VPC:

  • Una regola di uscita con azione Consenti e destinazione 0.0.0.0/0
  • Una regola di ingresso con azione di rifiuto e origine 0.0.0.0/0

Per impostazione predefinita, la sequenza di applicazione è mostrata nel seguente diagramma:

abae4597af782b2b.png

Tieni presente che l'ordine di applicazione tra le regole firewall VPC e il criterio firewall di rete globale può essere invertito. I clienti possono specificare l'ingiunzione di applicazione in qualsiasi momento con un comando gcloud.

Tag

I nuovi tag integrati nelle regole dei criteri del firewall di rete sono risorse di coppie chiave-valore definite a livello di organizzazione nella gerarchia delle risorse Google Cloud. Come suggerisce il nome, questo tag contiene un controllo dell'accesso IAM che specifica chi può fare cosa nel tag. Le autorizzazioni IAM, ad esempio, consentono di specificare quali entità possono assegnare valori ai tag e quali possono associare i tag alle risorse. Una volta applicato un tag a una risorsa, le regole firewall di rete 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 lungo la gerarchia dai relativi elementi principali. Di conseguenza, i tag possono essere creati in un unico posto e poi utilizzati da altre cartelle e altri progetti nella gerarchia delle risorse. Visita questa pagina per ulteriori dettagli sui tag e sulle restrizioni di accesso.

I tag non devono essere confusi con i tag di rete, che sono stringhe che possono essere aggiunte alle istanze Compute Engine. Questi tag sono associati all'istanza e svaniscono 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.

Tieni presente che in questo documento i tag e i tag gestiti da IAM vengono utilizzati in modo intercambiabile.

Cosa creerai

Questo codelab è composto da due parti: la prima mostra i criteri del firewall di rete e i tag utilizzando una singola rete VPC, mentre la seconda mostra come utilizzare i tag nelle reti VPC con peering come indicato nel diagramma seguente. Pertanto, questo codelab richiede un singolo progetto e la possibilità di creare più reti VPC.

b9acf9823df8be04.jpeg

Cosa imparerai a fare

  • Come creare un criterio firewall di rete
  • Come creare e utilizzare i tag con il criterio firewall di rete
  • Come utilizzare i tag tramite il peering di rete VPC

Che cosa ti serve

  • Progetto Google Cloud
  • Conoscenza del deployment delle istanze e della configurazione dei componenti di rete
  • Conoscenze sulla configurazione del firewall VPC

2. Prima di iniziare

Creare/aggiornare le variabili

Questo codelab utilizza le variabili $per facilitare l'implementazione della configurazione di gcloud in Cloud Shell.

In Cloud Shell, svolgi i seguenti passaggi:

gcloud config set project [project-id]
export project_id=`gcloud config list --format="value(core.project)"`
export org_id=[org]
export region=us-central1
export zone=us-central1-a
export prefix=fwpolicy

3. Crea la rete e la subnet VPC

Rete VPC

Crea fwpolicy-vpc1:

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

Subnet

Crea le rispettive subnet nella regione selezionata:

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

Cloud NAT

Crea i router cloud e i gateway Cloud NAT per fwpolicy-pc1:

gcloud compute routers create $prefix-vpc1-cr \
  --region=$region --network=$prefix-vpc1

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

4. Creazione delle istanze

Crea una regola firewall che consenta il traffico SSH in entrata dagli intervalli IAP, se non è ancora stata definita nell'ambito della configurazione dell'IAP:

gcloud compute firewall-rules create allow-ssh-ingress-from-iap-vpc1 \
  --direction=INGRESS \
  --action=allow \
  --network=$prefix-vpc1 \
  --rules=tcp:22 \
  --source-ranges=35.235.240.0/20

Crea le istanze client e del server web fwpolicy-vpc1:

gcloud compute instances create $prefix-vpc1-www \
   --subnet=$prefix-vpc1-subnet --no-address --zone $zone \
   --metadata startup-script='#! /bin/bash
apt-get update
apt-get install apache2 -y
a2ensite default-ssl
a2enmod ssl
# Read VM network configuration:
md_vm="http://169.254.169.254/computeMetadata/v1/instance/"
vm_hostname="$(curl $md_vm/name -H "Metadata-Flavor:Google" )"
filter="{print \$NF}"
vm_network="$(curl $md_vm/network-interfaces/0/network \
-H "Metadata-Flavor:Google" | awk -F/ "${filter}")"
vm_zone="$(curl $md_vm/zone \
-H "Metadata-Flavor:Google" | awk -F/ "${filter}")"
# Apache configuration:
echo "Page on $vm_hostname in network $vm_network zone $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2'

gcloud compute instances create $prefix-vpc1-client \
    --subnet=$prefix-vpc1-subnet --no-address --zone $zone

Poiché non sono definite regole firewall VPC (tranne la regola di autorizzazione SSH che avrebbe dovuto essere creata durante la configurazione di IAP come indicato all'inizio di questa sezione) e per impostazione predefinita tutto il traffico in entrata viene negato, le istanze client non potranno accedere ai rispettivi server web. Per verificare che la richiesta scada, apri una nuova finestra e avvia una sessione SSH con l'istanza fwpolicy-vpc1-client e prova a eseguire curl sul server web:

user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2

Risultato previsto:

curl: (28) Connection timed out after 2001 milliseconds

Se vuoi, verifica che non siano presenti regole firewall VPC definite per fwpolicy-vpc1 tramite Cloud Shell:

gcloud compute firewall-rules list --filter="network:$prefix-vpc1"

5. Criterio firewall di rete globale

Crea un criterio firewall di rete globale:

gcloud compute network-firewall-policies create \
   $prefix-example --description \
   "firewall-policy-description" --global

Aggiungi una regola che consenta il traffico web:

gcloud compute network-firewall-policies rules create 500 \
    --action allow \
    --description "allow-web" \
    --layer4-configs tcp:80,tcp:443 \
    --firewall-policy $prefix-example \
    --src-ip-ranges 10.0.0.0/16 \
    --global-firewall-policy --enable-logging

Descrivi il criterio firewall di rete e verifica che la regola sia stata added correttamente:

gcloud compute network-firewall-policies describe \
    $prefix-example --global

Output previsto (scorri verso l'alto fino all'inizio dell'output; tieni presente che vengono visualizzate anche le regole implicite):

creationTimestamp: '2022-09-23T12:46:53.677-07:00'
description: "firewall-policy-description"
fingerprint: Np1Rup09Amc=
id: '7021772628738421698'
kind: compute#firewallPolicy
name: fwpolicy-example
ruleTupleCount: 13
rules:
- action: allow
  description: allow-web
  direction: INGRESS
  disabled: false
  enableLogging: true
  kind: compute#firewallPolicyRule
  match:
    layer4Configs:
    - ipProtocol: tcp
      ports:
      - '80'
    - ipProtocol: tcp
      ports:
      - '443'
    srcIpRanges:
    - 10.0.0.0/16
  priority: 500
  ruleTupleCount: 5
...

Associa il criterio firewall di rete a fwpolicy-vpc1:

gcloud compute network-firewall-policies associations create \
     --firewall-policy $prefix-example \
     --network $prefix-vpc1 \
     --name $prefix-vpc1-association \
     --global-firewall-policy

Verifica che sia stato applicato correttamente alla rete fwpolicy-vpc1:

gcloud compute networks get-effective-firewalls $prefix-vpc1

Output previsto (tieni presente che se sono presenti criteri firewall gerarchici che hanno la precedenza, le regole pertinenti verranno visualizzate in alto):

TYPE                     FIREWALL_POLICY_NAME     PRIORITY    ACTION     DIRECTION  IP_RANGES
network-firewall-policy  fwpolicy-example      500         ALLOW      INGRESS    10.0.0.0/16
network-firewall-policy  fwpolicy-example      2147483645  GOTO_NEXT  INGRESS    ::/0
network-firewall-policy  fwpolicy-example      2147483647  GOTO_NEXT  INGRESS    0.0.0.0/0
network-firewall-policy  fwpolicy-example      2147483644  GOTO_NEXT  EGRESS     ::/0
network-firewall-policy  fwpolicy-example      2147483646  GOTO_NEXT  EGRESS     0.0.0.0/0

Verifica che sia stato applicato correttamente anche al server web fwpolicy-vpc1:

gcloud compute instances network-interfaces \
   get-effective-firewalls $prefix-vpc1-www --zone $zone

L'output previsto è simile a quello del comando precedente (firewall efficaci fwpolicy-vpc1):

TYPE                     FIREWALL_POLICY_NAME     PRIORITY    ACTION     DIRECTION  IP_RANGES
network-firewall-policy  fwpolicy-example      500         ALLOW      INGRESS    10.0.0.0/16
network-firewall-policy  fwpolicy-example      2147483645  GOTO_NEXT  INGRESS    ::/0
network-firewall-policy  fwpolicy-example      2147483647  GOTO_NEXT  INGRESS    0.0.0.0/0
network-firewall-policy  fwpolicy-example      2147483644  GOTO_NEXT  EGRESS     ::/0
network-firewall-policy  fwpolicy-example      2147483646  GOTO_NEXT  EGRESS     0.0.0.0/0

Torna alla sessione SSH vpc1-client e prova di nuovo a eseguire curl (tieni presente che il comando riportato di seguito presuppone che sia stato utilizzato fwpolicy come prefisso; modifica di conseguenza il comando curl se è stato utilizzato un nome diverso):

user@vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
Page on vpc1-www in network vpc1 zone us-central1-a

Da Cloud Shell, verifica che il criterio firewall di rete sia applicato a fwpolicy-vpc1:

gcloud compute network-firewall-policies describe \
   $prefix-example --global

Risultato previsto (scorri verso l'alto fino all'inizio dell'output):

---
associations:
- attachmentTarget: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/fwpolicy-vpc1
  name: fwpolicy-vpc1-association
...

6. Tag regolati da IAM

Un tag è una coppia chiave-valore che può essere collegata a un'organizzazione, una cartella o un progetto. Per maggiori dettagli, consulta la sezione Creare e gestire i tag e le autorizzazioni richieste.

Il ruolo tagAdmin ti consente di creare nuovi tag, aggiornare ed eliminare quelli esistenti. Un amministratore dell'organizzazione può concedere questo ruolo. Da Cloud Shell, aggiorna il criterio IAM per aggiungere il ruolo tagAdmin all'utente. Utilizza la pagina Riferimento alle autorizzazioni per vedere quali autorizzazioni sono incluse in ogni ruolo predefinito.

gcloud organizations add-iam-policy-binding $org_id \
  --member user:[user@example.com] --role roles/resourcemanager.tagAdmin

Esegui il comando seguente per verificare quali utenti dispongono del ruolo resourcemanager.tagAdmin:

gcloud organizations get-iam-policy $org_id --flatten=bindings \
  --filter=bindings.role:roles/resourcemanager.tagAdmin

Crea una nuova chiave tag:

gcloud resource-manager tags keys create tags-vpc1 \
   --parent organizations/$org_id \
   --purpose GCE_FIREWALL \
   --purpose-data network=$project_id/$prefix-vpc1

Risultato previsto:

Waiting for TagKey [tags-vpc1] to be created...done.                                                                                                                
createTime: '2022-09-23T20:49:01.162228Z'
etag: PwvmFuHO4wK1y6c5Ut2n5w==
name: tagKeys/622132302133
namespacedName: ORGANIZATION_ID/tags-vpc1
parent: organizations/ORGANIZATION_ID
purpose: GCE_FIREWALL
purposeData:
  network: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/6749205358365096383
shortName: tags-vpc1
updateTime: '2022-09-23T20:49:03.873776Z'

Crea nuovi valori di tag:

gcloud resource-manager tags values create web-servers \
   --parent=$org_id/tags-vpc1

gcloud resource-manager tags values create web-clients \
   --parent=$org_id/tags-vpc1

Verifica che i valori dei tag siano stati creati correttamente:

gcloud resource-manager tags values list \
   --parent=$org_id/tags-vpc1

Risultato previsto:

NAME                    SHORT_NAME   DESCRIPTION
tagValues/349564376683  web-servers
tagValues/780363571446  web-clients

Da Cloud Shell, descrivi la regola del criterio del firewall di rete esistente per verificare che i tag non vengano utilizzati:

gcloud compute network-firewall-policies rules describe 500 \
    --firewall-policy $prefix-example \
    --global-firewall-policy

Risultato previsto:

---
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: true
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: tcp
    ports:
    - '80'
  - ipProtocol: tcp
    ports:
    - '443'
  srcIpRanges:
  - 10.0.0.0/16
priority: 500
ruleTupleCount: 5

Da Cloud Shell, aggiorna la regola in modo da consentire solo il traffico dalla chiave del tag vpc1-tags/web-clients e installa la regola sulle istanze con la chiave del tag vpc1-tags/web-servers.

gcloud compute network-firewall-policies rules update 500 \
    --firewall-policy $prefix-example \
    --src-secure-tags $org_id/tags-vpc1/web-clients \
    --target-secure-tags $org_id/tags-vpc1/web-servers \
    --global-firewall-policy

Da Cloud Shell, descrivi la regola del criterio firewall di rete esistente per verificare che i tag siano stati applicati correttamente e siano segnalati come EFFETTIVO:

gcloud compute network-firewall-policies rules describe 500 \
    --firewall-policy $prefix-example \
    --global-firewall-policy

Risultato previsto:

---
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: false
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: tcp
    ports:
    - '80'
  - ipProtocol: tcp
    ports:
    - '443'
  srcIpRanges:
  - 10.0.0.0/16
  srcSecureTags:
  - name: tagValues/479619031616
    state: EFFECTIVE
priority: 500
ruleTupleCount: 7
targetSecureTags:
- name: tagValues/230424970229
  state: EFFECTIVE

Da Cloud Shell, verifichiamo che la regola sia stata applicata a vpc1:

gcloud compute networks get-effective-firewalls $prefix-vpc1

Risultato previsto:

network-firewall-policy  fwpolicy-example      500         ALLOW      INGRESS    10.0.0.0/16
network-firewall-policy  fwpolicy-example      2147483645  GOTO_NEXT  INGRESS    ::/0
network-firewall-policy  fwpolicy-example      2147483647  GOTO_NEXT  INGRESS    0.0.0.0/0
network-firewall-policy  fwpolicy-example      2147483644  GOTO_NEXT  EGRESS     ::/0
network-firewall-policy  fwpolicy-example      2147483646  GOTO_NEXT  EGRESS     0.0.0.0/0

Verifica che, anche se il criterio del firewall di rete è ancora associato alla rete VPC, la regola che consente il traffico web non venga più applicata al server web, perché il tag non è stato aggiunto alle istanze:

gcloud compute instances network-interfaces \
   get-effective-firewalls $prefix-vpc1-www --zone $zone

Output previsto (tieni presente che la regola firewall con priorità 500 non viene visualizzata):

network-firewall-policy  fwpolicy-example      2147483645  GOTO_NEXT  INGRESS    ::/0
network-firewall-policy  fwpolicy-example      2147483647  GOTO_NEXT  INGRESS    0.0.0.0/0
network-firewall-policy  fwpolicy-example      2147483644  GOTO_NEXT  EGRESS     ::/0
network-firewall-policy  fwpolicy-example      2147483646  GOTO_NEXT  EGRESS     0.0.0.0/0

Concedi il ruolo Utente tag al tag e all'utente specifici. Utilizza la pagina Riferimento alle autorizzazioni per vedere quali autorizzazioni sono incluse in ogni ruolo predefinito.

gcloud resource-manager tags keys add-iam-policy-binding \
  $org_id/tags-vpc1 \
  --member user:[email] --role roles/resourcemanager.tagUser

gcloud projects add-iam-policy-binding $project_id \
  --member user:[email] --role roles/resourcemanager.tagUser

Verifica che il ruolo sia stato aggiunto correttamente:

gcloud resource-manager tags keys get-iam-policy $org_id/tags-vpc1

gcloud projects get-iam-policy $project_id --flatten=bindings \
   --filter=bindings.role:roles/resourcemanager.tagUser

Risultato previsto:

bindings:
- members:
  - user:[user]
  role: roles/resourcemanager.tagUser
...

Applica il tag all'istanza fwpolicy-vpc1-www:

gcloud resource-manager tags bindings create \
  --location $zone \
  --tag-value $org_id/tags-vpc1/web-servers \
  --parent \
//compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc1-www

Risultato previsto:

Waiting for TagBinding for parent [//compute.googleapis.com/projects/PROJECT_ID/zones/us-central1-a/instances/38369703403698502] and tag value [tagValues/34
9564376683] to be created with [operations/rctb.us-central1-a.6144808968019372877]...done.                                                                            
done: true
metadata:
  '@type': type.googleapis.com/google.cloud.resourcemanager.v3.CreateTagBindingMetadata
name: operations/rctb.us-central1-a.6144808968019372877
response:
  '@type': type.googleapis.com/google.cloud.resourcemanager.v3.TagBinding
  name: tagBindings/%2F%2Fcompute.googleapis.com%2Fprojects%2FPROJECT_NUMBER%2Fzones%2Fus-central1-a%2Finstances%2F38369703403698502/tagValues/349564376683
  parent: //compute.googleapis.com/projects/PROJECT_NUMBER/zones/us-central1-a/instances/38369703403698502
  tagValue: tagValues/349564376683

Verifica le associazioni:

gcloud resource-manager tags bindings list --location $zone --effective --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc1-www 

Risultato previsto:

namespacedTagKey: ORGANIZATION_ID/tags-vpc1
namespacedTagValue: ORGANIZATION_ID/tags-vpc1/web-servers
tagKey: tagKeys/622132302133
tagValue: tagValues/349564376683

Verifica di nuovo le regole firewall efficaci:

gcloud compute instances network-interfaces \
   get-effective-firewalls $prefix-vpc1-www --zone $zone

Risultato previsto:

network-firewall-policy  fwpolicy-example      490         ALLOW      INGRESS    10.0.0.0/16
network-firewall-policy  fwpolicy-example      2147483645  GOTO_NEXT  INGRESS    ::/0
network-firewall-policy  fwpolicy-example      2147483647  GOTO_NEXT  INGRESS    0.0.0.0/0
network-firewall-policy  fwpolicy-example      2147483644  GOTO_NEXT  EGRESS     ::/0
network-firewall-policy  fwpolicy-example      2147483646  GOTO_NEXT  EGRESS     0.0.0.0/0

Torna alla scheda della sessione SSH fwpolicy-vpc1-client e prova a eseguire curl:

user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2

Hai potuto collegarti?

Per verificare, aggiorna la regola per rimuovere i criteri CIDR di origine tramite Cloud Shell.

gcloud compute network-firewall-policies rules update 500 \
    --firewall-policy $prefix-example \
    --src-ip-ranges "" \
    --global-firewall-policy

gcloud compute network-firewall-policies rules describe 500 \
    --firewall-policy $prefix-example \
    --global-firewall-policy

action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: false
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: tcp
    ports:
    - '80'
  - ipProtocol: tcp
    ports:
    - '443'
  srcSecureTags:
  - name: tagValues/479619031616
    state: EFFECTIVE
priority: 490
ruleTupleCount: 7
targetSecureTags:
- name: tagValues/230424970229
  state: EFFECTIVE

Torna alla scheda della sessione SSH fwpolicy-vpc1-client e riprova:

user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2

Questa volta la connessione dovrebbe scadere, poiché il tag non è stato aggiunto a fwpolicy-vpc1-client. Da Cloud Shell, aggiungilo e riprova.

gcloud resource-manager tags bindings create \
  --location $zone \
  --tag-value $org_id/tags-vpc1/web-clients \
  --parent \
//compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc1-client

Torna alla scheda della sessione SSH fwpolicy-vpc1-client e riprova. L'operazione dovrebbe riuscire.

user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2

7. Tag regolati da IAM tramite il peering di rete VPC

Da Cloud Shell, crea un nuovo VPC, una subnet e un client e configura il peering di reti VPC tra le reti:

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

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

gcloud compute instances create $prefix-vpc2-client \
   --subnet=$prefix-vpc2-subnet --no-address --zone $zone

gcloud compute networks peerings create vpc1-to-vpc2 \
   --network=$prefix-vpc1 \
   --peer-project $project_id \
   --peer-network $prefix-vpc2

gcloud compute networks peerings create vpc2-to-vpc1 \
    --network=$prefix-vpc2 \
    --peer-project $project_id \
    --peer-network $prefix-vpc1

Crea una regola firewall che consenta il traffico SSH in entrata dagli intervalli IAP, se non è ancora stata definita nell'ambito della configurazione dell'IAP:

gcloud compute firewall-rules create allow-ssh-ingress-from-iap-vpc2 \
  --direction=INGRESS \
  --action=allow \
  --network=$prefix-vpc2 \
  --rules=tcp:22 \
  --source-ranges=35.235.240.0/20

Anche se i tag sono oggetti a livello di organizzazione, le chiavi dei tag sono associate a un VPC specifico e, pertanto, non possono essere applicate a istanze in reti diverse. Pertanto, è necessario creare una nuova chiave e un nuovo valore del tag applicabili a vpc2:

gcloud resource-manager tags keys create tags-vpc2 \
   --parent organizations/$org_id \
   --purpose GCE_FIREWALL \
   --purpose-data network=$project_id/$prefix-vpc2

gcloud resource-manager tags values create web-clients \
   --parent=$org_id/tags-vpc2

Applica il nuovo tag all'istanza fwpolicy-vpc2-client:

gcloud resource-manager tags bindings create \
  --location $zone \
  --tag-value $org_id/tags-vpc2/web-clients \
  --parent \
//compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc2-client

(Facoltativo) Elenca le associazioni di fwpolicy-vpc2-client:

gcloud resource-manager tags bindings list --location $zone --effective --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc2-client

Risultato previsto:

namespacedTagKey: ORGANIZATION_ID/tags-vpc2
namespacedTagValue: ORGANIZATION_ID/tags-vpc2/web-clients
tagKey: tagKeys/916316350251
tagValue: tagValues/633150043992

Da Cloud Shell, descrivi la regola del criterio del firewall di rete esistente per verificare che i nuovi tag non vengano utilizzati:

gcloud compute network-firewall-policies rules describe 500 \
    --firewall-policy $prefix-example \
    --global-firewall-policy

Risultato previsto:

---
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: true
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: tcp
    ports:
    - '80'
  - ipProtocol: tcp
    ports:
    - '443'
  srcSecureTags:
  - name: tagValues/479619031616
    state: EFFECTIVE
priority: 500
ruleTupleCount: 6
targetSecureTags:
- name: tagValues/230424970229
  state: EFFECTIVE

Aggiorna la regola del firewall esistente per consentire i tag della rete VPC accoppiata:

gcloud compute network-firewall-policies rules update 500 \
    --firewall-policy $prefix-example \
    --src-secure-tags $org_id/tags-vpc1/web-clients,$org_id/tags-vpc2/web-clients \
    --global-firewall-policy

Descrivi la regola del firewall per assicurarti che sia stata applicata correttamente e che sia segnalata come EFFICACE:

gcloud compute network-firewall-policies rules describe 500 \
    --firewall-policy $prefix-example \
    --global-firewall-policy

Risultato previsto:

---
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: false
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: tcp
    ports:
    - '80'
  - ipProtocol: tcp
    ports:
    - '443'
  srcSecureTags:
  - name: tagValues/479619031616
    state: EFFECTIVE
  - name: tagValues/633150043992
    state: EFFECTIVE
priority: 500
ruleTupleCount: 7
targetSecureTags:
- name: tagValues/230424970229
  state: EFFECTIVE

Scopri l'IP di fwpolicy-vpc1-www tramite il comando gcloud riportato di seguito:

gcloud compute instances list --filter=vpc1-www

Connettiti a fwpolicy-vpc2-client tramite SSH e prova a eseguire curl sull'IP di fwpolicy-vpc1:

user@fwpolicy-vpc2-client$ curl [fwpolicy-vpc1-www_IP] --connect-timeout 2

Dovresti essere in grado di connetterti al server fwpolicy-vpc1-www. Vai alla sezione successiva per i passaggi di pulizia.

8. Procedura di pulizia

Da Cloud Shell, rimuovi le istanze, Cloud NAT e Cloud Router:

gcloud -q compute instances delete $prefix-vpc2-client --zone=$zone

gcloud -q compute instances delete $prefix-vpc1-client --zone=$zone

gcloud -q compute instances delete $prefix-vpc1-www --zone=$zone

gcloud -q compute routers nats delete $prefix-vpc1-cloudnat \
--router=$prefix-vpc1-cr --router-region=$region

gcloud -q compute routers delete $prefix-vpc1-cr --region=$region

Rimuovi il criterio firewall di rete globale e i tag:

gcloud -q resource-manager tags values delete \
   $org_id/tags-vpc2/web-clients

gcloud -q resource-manager tags keys delete $org_id/tags-vpc2

gcloud -q resource-manager tags values delete \
   $org_id/tags-vpc1/web-servers

gcloud -q resource-manager tags values delete \
   $org_id/tags-vpc1/web-clients

gcloud -q resource-manager tags keys delete $org_id/tags-vpc1

gcloud -q compute network-firewall-policies associations delete \
     --firewall-policy $prefix-example \
     --name $prefix-vpc1-association \
     --global-firewall-policy

gcloud -q compute network-firewall-policies delete \
   $prefix-example --global

gcloud -q compute firewall-rules delete allow-ssh-ingress-from-iap-vpc1

gcloud -q compute firewall-rules delete allow-ssh-ingress-from-iap-vpc2

Se i ruoli tagAdmin e tagUsers sono stati modificati, svolgi i passaggi riportati di seguito:

gcloud organizations remove-iam-policy-binding $org_id \
  --member user:[email] --role roles/resourcemanager.tagAdmin

gcloud organizations remove-iam-policy-binding $org_id \
  --member user:[email] --role roles/resourcemanager.tagUser

Infine, rimuovi i peering di rete VPC, le subnet e le reti VPC:

gcloud -q compute networks peerings delete vpc1-to-vpc2 \
    --network $prefix-vpc1

gcloud -q compute networks peerings delete vpc2-to-vpc1 \
    --network $prefix-vpc2

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

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

gcloud -q compute networks delete $prefix-vpc1

gcloud -q compute networks delete $prefix-vpc2

9. Complimenti!

Congratulazioni, hai configurato e convalidato correttamente un criterio firewall di rete globale con la configurazione dei tag.