
Quando il deployment su Google Cloud in shared VPC cresce, tenere traccia di tutte le regole firewall del proprio ambiente diventa complicato. Ecco come ho risolto il problema delle regole firewall orfane.
Immagine per gentile concessione di Information Age
Spesso conviene gestire l'intera configurazione del firewall da un Host project con shared VPC.
Ad oggi non c'è un modo semplice per ottenere l'elenco delle regole non applicate ad alcuna istanza della rete: quando si raggiunge il limite massimo di regole firewall, bisogna individuare tutte quelle inutilizzate o orfane per ripulire l'ambiente.
Lo strumento gcp-discover-orphaned-firewall-rules aiuta proprio a identificarle.
Come funziona:
Lo strumento parte dall'id dell'host project e recupera tutti i progetti shared VPC collegati. Estrae poi tutte le regole firewall (solo di tipo ingress) dell'host project e ne crea un nuovo elenco da cui rimuovere progressivamente le regole attive.
Per ciascun progetto (compreso l'host project) individua le istanze VM presenti e confronta network tag e service account con i target tag delle regole firewall: in caso di corrispondenza, la regola viene rimossa dall'elenco e quest'ultimo passa al progetto successivo, fino a esaurire l'iterazione. Quel che resta è l'elenco delle regole firewall orfane.
L'elenco viene stampato a schermo in formato tabellare ed esportato in un file CSV.
Lo strumento non elimina alcuna regola firewall: la cancellazione va fatta manualmente oppure tramite uno script personalizzato che sfrutti il file CSV.
Come installarlo:
scarica il binario oppure clona il repository
git clone [email protected]:doitintl/gcp-discover-orphaned-firewall-rules.gitcd gcp-discover-orphaned-firewall-rulesgo mod downloadgo run main.goAutenticazione su Google Cloud
Il progetto si appoggia alle Google Application Default Credentials (ADC).
È possibile autenticarsi dal terminale con la configurazione predefinita di gcloud tramite il comando:
gcloud auth application-default loginOppure tramite un service account, impostando la variabile d'ambiente:
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/[FILE_NAME].json"Come eseguirlo
Flag disponibili:
--debug Set log level--host string Host Project ID <Required>--running Filter only running VM instances./discover-orphaned-rules-darwin-amd64 --host=host-project-123ewquiyt
INFO[2019-06-12T12:57:54+03:00] creating a new Compute API clientINFO[2019-06-12T12:57:54+03:00] host project: host-project-123ewquiytINFO[2019-06-12T12:57:56+03:00] firewall Rules for host project: host-project-123ewquiytINFO[0001] listing only TargetTags rules...INFO[0001] number of TargetTags Rules: 3INFO[2019-06-12T12:57:56+03:00] child project: deleted-project-1268522WARN[0001] error listing VM instances googleapi: Error 404: Failed to find project deleted-project-1268522, notFoundWARN[2019-06-12T12:57:56+03:00] Could not check project deleted-project-1268522 for orphaned rules: googleapi: Error 404: Failed to find project deleted-project-1268522, notFoundINFO[2019-06-12T12:57:56+03:00] child project: resource-project-12iuyt2854INFO[0001] making a list of orphaned rules with all rules (active rules will be removed from it)resource-project-12iuyt2854, ghostresource-project-12iuyt2854, instance-target-demo-ruleresource-project-12iuyt2854, real-ruleINFO[0001] looking for orphaned rules in project..INFO[0001] remove active rule from orphans list: instance-target-demo-ruleINFO[0001] 2 potential orphaned firewall rules to evalute...INFO[2019-06-12T12:57:56+03:00] child project: resource-2-23ouyrwe9INFO[0002] making a list of orphaned rules with all rules (active rules will be removed from it)resource-2-23ouyrwe9, ghostami-resource-2-23ouyrwe9, instance-target-demo-ruleami-resource-2-23ouyrwe9, real-ruleINFO[0002] looking for orphaned rules in project..INFO[0002] remove active rule from orphans list: instance-target-demo-ruleINFO[0002] 2 potential orphaned firewall rules to evalute...INFO[2019-06-12T12:57:57+03:00] generating CSV file for orphaned rules...INFO[0002] creating a new CSV file: orphaned-rules.csvINFO[2019-06-12T12:57:57+03:00] done!Lo script genera anche un file CSV:
rule-name,rule-tagsghost,deadreal-rule,"real-1,real2,real-3"Vuole leggere altri articoli? Visiti il nostro blog oppure segua Ami su Twitter.