
Si manejas un despliegue lo suficientemente grande en Google Cloud con VPC compartida, es fácil perderle el rastro a las reglas de firewall de tu entorno. Te cuento cómo resolví el problema de las reglas de firewall huérfanas.
Imagen cortesía de Information Age
En muchos casos resulta más práctico administrar toda la configuración del firewall desde un proyecto Host con VPC compartidas.
Hoy por hoy no hay una forma sencilla de identificar las reglas que no están aplicadas a ninguna instancia de la red. Cuando alcanzas el límite de reglas de firewall permitidas, tienes que dar con todas esas reglas sin uso o huérfanas para depurarlas.
La herramienta gcp-discover-orphaned-firewall-rules te ayuda a identificar las reglas de firewall huérfanas.
Cómo funciona:
La herramienta recibe el project-id del host y localiza todos los proyectos con VPC compartidas que estén vinculados a ese proyecto host. Luego obtiene todas las reglas de firewall (solo de tipo ingress) del proyecto host y crea una nueva lista para ir descartando las reglas activas.
En cada proyecto (incluido el host), detecta las instancias de VM y busca network tags y service accounts que coincidan con los target tags de la lista de reglas de firewall. Si hay coincidencia, la regla se quita de la lista de eliminación y esa lista se traspasa al siguiente proyecto, y así hasta terminar de recorrerlos todos. Al final te queda una lista con las reglas de firewall huérfanas.
La lista se muestra en pantalla en formato tabular y también se exporta a un archivo CSV.
Esta herramienta no elimina ninguna regla de firewall: tendrás que borrarlas a mano o usar el archivo CSV junto con un script propio que se encargue de eliminarlas.
Cómo instalarla:
Descarga el binario o clona el repositorio
git clone [email protected]:doitintl/gcp-discover-orphaned-firewall-rules.gitcd gcp-discover-orphaned-firewall-rulesgo mod downloadgo run main.goAutenticación en Google Cloud
Este proyecto usa las Google Application Default Credentials (ADC).
Puedes iniciar sesión desde la terminal con tu configuración predeterminada de gcloud usando este comando:
gcloud auth application-default loginO bien mediante una service account, definiendo la siguiente variable de entorno:
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/[FILE_NAME].json"Cómo ejecutarla
Flags disponibles:
--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!También se genera un archivo CSV:
rule-name,rule-tagsghost,deadreal-rule,"real-1,real2,real-3"¿Quieres leer más historias? Visita nuestro blog o sigue a Ami en Twitter.