Policy firewall gerarchica con tag gestiti da IAM

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:

  1. Policy firewall gerarchica
  2. Regole firewall VPC
  3. 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:

86df8f0d19c64e80.png

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

1bfe78ad755496e5.png

Organizzazione e cartelle:

  • Creerai due cartelle, folder1 e folder2, 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 mynet e 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_tags con due valori, denominati http_server e http_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 da http-client a http-server sulla 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.