Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Cómo detectar reglas de firewall huérfanas en Google Cloud

By Ami MahloofJun 25, 20193 min read

Esta página también está disponible en English, Deutsch, Français, Italiano, 日本語 y Português.

1 ypmxzr3hay0 4kvzxka5eq

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.

1 ypmxzr3hay0 4kvzxka5eqImagen 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.git
cd gcp-discover-orphaned-firewall-rules
go mod download
go run main.go

Autenticació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 login

O 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 client
INFO[2019-06-12T12:57:54+03:00] host project: host-project-123ewquiyt
INFO[2019-06-12T12:57:56+03:00] firewall Rules for host project: host-project-123ewquiyt
INFO[0001] listing only TargetTags rules...
INFO[0001] number of TargetTags Rules: 3
INFO[2019-06-12T12:57:56+03:00] child project: deleted-project-1268522
WARN[0001] error listing VM instances googleapi: Error 404: Failed to find project deleted-project-1268522, notFound
WARN[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, notFound
INFO[2019-06-12T12:57:56+03:00] child project: resource-project-12iuyt2854
INFO[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-rule
INFO[0001] 2 potential orphaned firewall rules to evalute...
INFO[2019-06-12T12:57:56+03:00] child project: resource-2-23ouyrwe9
INFO[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-rule
INFO[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.csv
INFO[2019-06-12T12:57:57+03:00] done!

También se genera un archivo CSV:

rule-name,rule-tags
ghost,dead
real-rule,"real-1,real2,real-3"

¿Quieres leer más historias? Visita nuestro blog o sigue a Ami en Twitter.