Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Sicurezza di rete più solida: filtraggio egress tramite Fully Qualified Domain Name (FQDN) con GCP…

By Chimbu ChinnaduraiJun 11, 20237 min read

Questa pagina è disponibile anche in English, Deutsch, Español, Français, 日本語 e Português.

Oggi i dati si spostano liberamente tra reti e sistemi. Diventa quindi essenziale adottare misure di sicurezza efficaci per proteggere le informazioni sensibili. Sebbene il filtraggio del traffico in ingresso riceva grande attenzione, l'importanza di quello in egress non va sottovalutata: consente alle organizzazioni di regolare le comunicazioni di rete in uscita, garantendo che vengano stabilite solo connessioni autorizzate e sicure.

Tra le tecniche più diffuse per il filtraggio egress c'è quella basata sui Fully Qualified Domain Name (FQDN), che offre agli amministratori un controllo preciso sul traffico in uscita a partire dai nomi di dominio. Combinata con la Firewall Policy di Google Cloud Platform (GCP), permette alle organizzazioni di raggiungere un livello di sicurezza e di governance dei punti egress di rete davvero notevole.

In questo articolo vedremo come implementare il filtraggio egress FQDN su GCP utilizzando gli oggetti FQDN nelle regole della firewall policy. La Firewall policy è una funzionalità a sé stante all'interno del cloud firewall e mette a disposizione molte più opzioni rispetto alle regole VPC firewall.

La funzionalità degli oggetti FQDN nelle regole della firewall policy è attualmente in preview e il supporto GCP non garantisce SLA né impegni di assistenza tecnica.

Cos'è una Firewall Policy?

La Firewall Policy di Google Cloud Platform (GCP) è una funzionalità di sicurezza di rete che consente di definire e applicare regole firewall centralizzate sulle istanze di macchine virtuali (VM) e sulle reti VPC (Virtual Private Cloud).

Offre un approccio unificato e scalabile alla gestione del traffico di rete: permette di controllare le comunicazioni in ingresso e in uscita, di filtrare il traffico in base a più criteri e di rafforzare la sicurezza complessiva.

Con la Firewall Policy si possono definire regole granulari che indicano quali tipi di traffico sono consentiti o negati in base a fattori come intervalli IP, porte, protocolli e persino Fully Qualified Domain Name (FQDN). Si stabilisce così un perimetro di rete sicuro, proteggendo le risorse cloud da accessi non autorizzati o attività malevole.

Le caratteristiche e i vantaggi principali della GCP Firewall Policy sono:

  • Gestione centralizzata: si possono gestire e configurare le regole firewall su più progetti, regioni e reti VPC da un'unica interfaccia, semplificando la gestione delle policy di sicurezza di rete.
  • Definizione flessibile delle regole: la Cloud Firewall Policy permette di creare regole basate su indirizzi IP, intervalli, porte, protocolli e FQDN. Questa flessibilità garantisce un controllo granulare sul traffico in ingresso e in uscita e consente di definire policy di sicurezza estremamente specifiche.
  • Aggiornamenti dinamici: è possibile modificare le regole firewall in tempo reale, adattandosi all'evoluzione delle esigenze di sicurezza senza interrompere il traffico esistente.
  • Integrazione con i servizi Google Cloud: la Cloud Firewall Policy si integra in modo nativo con altri servizi Google Cloud come reti VPC, load balancer e istanze VM, garantendo controlli di sicurezza coerenti su tutta l'infrastruttura.
  • Logging e monitoraggio: la Cloud Firewall Policy mette a disposizione funzionalità dettagliate di logging e monitoraggio, offrendo piena visibilità sul traffico di rete, l'analisi degli eventi di sicurezza e la risoluzione efficace di eventuali problemi.

Architettura di riferimento

Configurazione di esempio

Passaggi di implementazione dell'architettura di riferimento

  • Configurare Private Google Access
  • Cloud NAT per l'accesso a Internet
  • Configurare le regole della firewall policy

Configurare Private Google Access

Private Google Access consente alle risorse di una rete Virtual Private Cloud (VPC) di accedere ai servizi Google tramite indirizzi IP privati, senza bisogno di una connettività Internet esterna.

Occorre inoltre configurare Private Google Access con il dominio private.googleapis.com oppure restricted.googleapis.com per fare in modo che le richieste alle API Google siano instradabili solo all'interno di Google Cloud.

Private Google Access si abilita a livello di subnet. Abilitarlo su una subnet esistente e aggiornare le variabili.

gcloud config set project $PROJECT_ID

gcloud compute networks subnets update $SUBNET_NAME \
--region=$REGION \
--enable-private-ip-google-access

Per questa configurazione bisogna creare le zone Cloud DNS per private.googleapis.com. Utilizzare restricted.googleapis.com se si fa uso di VPC service control. Per maggiori dettagli si rimanda alle Domain options.

Creare una zona DNS privata per googleapis.com

gcloud dns managed-zones create googleapis-com \
--dns-name=googleapis.com. \
--description="googleapis-com domain for PGA" \
--visibility=private \
--networks=$NETWORK_NAME

Creare un record A per private.googleapis.com che punti agli indirizzi IP 199.36.153.8, 199.36.153.9, 199.36.153.10, 199.36.153.11.

gcloud dns record-sets create "private.googleapis.com." \
--type="A" \
--ttl="300" \
--rrdatas="199.36.153.8,199.36.153.9,199.36.153.10,199.36.153.11" \
--zone="googleapis-com"

Creare un record CNAME per *.googleapis.com che punti al dominio configurato: private.googleapis.com.

gcloud dns record-sets create "*.googleapis.com." \
--type="CNAME" \
--ttl="300" \
--rrdatas="private.googleapis.com." \
--zone="googleapis-com"

Alcune API e servizi Google sono erogati anche tramite domini aggiuntivi, tra cui *.gcr.io, *.gstatic.com, *.pkg.dev e pki.goog.

Consultare la tabella di domini e intervalli di indirizzi IP nelle Domain options per verificare se i servizi del dominio aggiuntivo siano raggiungibili tramite private.googleapis.com o restricted.googleapis.com. Ad esempio, se si utilizza Google Kubernetes Engine (GKE), occorre configurare in Cloud DNS anche le zone private *.gcr.io e *.pkg.dev.

Configurare Cloud NAT

Cloud NAT è un servizio gestito distribuito e software-defined che consente alle risorse prive di indirizzi IP esterni di stabilire connessioni in uscita verso Internet. Per controllare il traffico in uscita è preferibile utilizzarlo al posto del gateway Internet predefinito.

Creare un Cloud router nella regione desiderata.

gcloud compute routers create cloud-firewall-policy-demo-cloud-nat \
    --network=$NETWORK_NAME \
    --region=$REGION

Creare il gateway Cloud NAT.

gcloud compute routers nats create cloud-firewall-policy-demo-cloud-nat \
   --router=cloud-firewall-policy-demo-cloud-nat \
   --region=$REGION \
   --auto-allocate-nat-external-ips \
   --nat-all-subnet-ip-ranges

Esempio di configurazione Cloud NAT

Configurare le regole della firewall policy

Le firewall policy sono disponibili in tre varianti.

  • Le Hierarchical firewall policies permettono di creare e applicare una policy firewall coerente in tutta l'organizzazione. Possono essere assegnate all'organizzazione nel suo complesso o a singole cartelle.
  • Le Global network firewall policies consentono di aggiornare in blocco tutte le regole firewall raggruppandole in un unico oggetto policy; le regole valgono per tutte le regioni.
  • Le Regional network firewall policies permettono di creare e applicare una policy firewall coerente su tutte le sottoreti di una regione della rete VPC.

Creiamo una Global Network firewall policy per questa configurazione.

gcloud compute network-firewall-policies create global-demo-firewall-policy \
--global

Creare quindi una nuova associazione tra la firewall policy e la rete di destinazione.

gcloud compute network-firewall-policies associations create \
--firewall-policy=global-demo-firewall-policy \
--network=$NETWORK_NAME --global-firewall-policy

Le regole firewall predefinite fanno parte della policy

Associazione della rete alla policy

Sono ora disponibili tutte le risorse necessarie per applicare il filtraggio egress FQDN tramite gli oggetti FQDN nelle regole della firewall policy. Il passo successivo è aggiungere le regole alla policy.

Al momento non è stata applicata alcuna restrizione al traffico egress e le istanze in rete dispongono di accesso illimitato a Internet.

In questa configurazione consentiremo il traffico in uscita solo verso www.example.com e verso l'indirizzo IP pubblico assegnato a private.googleapis.com, bloccando tutto il resto del traffico Internet.

Creare una regola di default che consenta il traffico in ingresso. L'accesso in ingresso viene così permesso senza restrizioni, ma è possibile personalizzare la regola in base alle proprie esigenze.

gcloud compute network-firewall-policies rules create 1001 \
--firewall-policy="global-demo-firewall-policy" \
--action="allow" \
--direction="INGRESS" \
--description="Allow ingress traffic"  \
--src-ip-ranges="0.0.0.0/0" \
--layer4-configs="all" \
--global-firewall-policy

Creare poi una regola firewall che consenta la comunicazione con gli intervalli IP privati. Verificare che la regola includa anche eventuali altri intervalli privati personalizzati in uso nel proprio ambiente, così da non compromettere la comunicazione tra le istanze.

gcloud compute network-firewall-policies rules create 999 \
--firewall-policy="global-demo-firewall-policy" -\
-action="allow" \
--direction="EGRESS" \
--description="Allow communication with private IP ranges" \
--dest-ip-ranges="10.0.0.0/8,172.16.0.0/12,192.168.0.0/16" \
--layer4-configs="all" \
--global-firewall-policy

Creare una regola della firewall policy che consenta le richieste in uscita verso gli IP pubblici di private.googleapis.com: si tratta di IP instradabili solo all'interno di Google Cloud.

gcloud compute network-firewall-policies rules create 998 \
--firewall-policy="global-demo-firewall-policy" \
--action="allow" \
--direction="EGRESS" \
--description="Allow DNS resolution requests to private.googleapis.com" \
--dest-ip-ranges="199.36.153.8/32,199.36.153.9/32,199.36.153.10/32,199.36.153.11/32" \
--layer4-configs="tcp:443" \
--global-firewall-policy

Creare una regola della firewall policy che consenta le richieste in uscita verso www.example.com.

gcloud compute network-firewall-policies rules create 997 \
--firewall-policy="global-demo-firewall-policy" \
--action="allow" \
--direction="EGRESS" \
--description="FQDN egress filtering rules" \
--dest-fqdns="www.example.com" \
--layer4-configs="tcp:80,tcp:443" \
--global-firewall-policy

Creare infine una regola di default che neghi il traffico egress, accertandosi di aver già definito le regole di allow per i domini e gli intervalli IP necessari.

gcloud compute network-firewall-policies rules create 1000 \
--firewall-policy="global-demo-firewall-policy" \
--action="deny" \
--direction="EGRESS" \
--description="Deny all Egress traffic"  \
--dest-ip-ranges="0.0.0.0/0" \
--layer4-configs="all" \
--global-firewall-policy

Elenco consolidato delle regole della firewall policy.

Le regole possono richiedere fino a 30 secondi per diventare effettive: testare quindi la connettività di rete dall'istanza GCE o dai pod GKE. Le richieste in uscita sono consentite solo verso i domini e gli intervalli IP previsti dalle regole della firewall policy.

Risultati dei test dopo l'applicazione delle regole della firewall policy

In questo esempio abbiamo visto come gli oggetti FQDN possano essere impiegati nelle regole della Firewall policy per il filtraggio egress: un metodo molto efficace per rafforzare la sicurezza di rete e tenere sotto controllo i punti egress.

Per ulteriori informazioni sulla Firewall Policy si rimanda alla pagina di prodotto.