Configure Google Cloud Firewall para filtrar por etiquetas y subredes

Configure Google Cloud Firewall para filtrar por etiquetas y subredes

Estoy ejecutando PostgreSQL en una instancia de Google Cloud Compute Engine y PostgreSQL está actualmente configurado para aceptar conexiones desde cualquier lugar, la idea es que uso el firewall para controlar el acceso en lugar de tener que iniciar sesión en el servidor cada vez.

Actualmente tengo una regla de firewall llamada development-allow-psql, para asegurarme de que nada más esté mal configurado, la configuré para permitir desde todas partes:

Targets: All instances on network
Source Filter: IP Ranges
Source IP Ranges: 0.0.0.0/0
Second Source Filter: None
Specified protocols and ports: tcp:5432

Correr

psql "dbname=mydb host=__.___.__.__ user=myuser password=mypassword port=5432"

Me conecta instantáneamente, pero desde cualquier lugar en lugar de solo las instancias a las que quiero permitir el acceso.

Estas instancias se crean automáticamente a través Instance Groupde una Instance Template plantilla configurada para crear instancias con las siguientes configuraciones:

Network tags: myapp-api, http-server, https-server
Network: development
Subnetwork: development (with address range 10.154.0.0/20)

Quiero limitar el acceso a esta instancia de base de datos a instancias que tengan myapp-apiuna etiqueta o una subred 10.154.0.0/20o ambas. Entonces cambio la configuración de mi firewall a la siguiente:

Targets: Specified target tags
Target tags: myapp-api
Source Filter: Subnets
Subnets: 10.154.0.0/20
Second Source Filter: None
Specified protocols and ports: tcp:5432

Esto bloquea el acceso al psqlcomando que ejecuté anteriormente (el comando psql se ejecuta desde una instancia de Docker a la que tengo acceso a través de docker exec -ti -u0 my-instance-api-dev-small bash)

Si ahora cambio a

Targets: All instances on the network
Source Filter: Subnets
Subnets: 10.154.0.0/20
Second Source Filter: Source tags
Source tags: myapp-api
Specified protocols and ports: tcp:5432

Todavía bloquea todo acceso. Si ahora elimino el filtro de segunda fuente y solo filtro en la subred, todavía no tengo acceso.

Targets: All instances on the network
Source Filter: Subnets
Subnets: 10.154.0.0/20
Second Source Filter: None
Specified protocols and ports: tcp:5432

Si cambio el filtro de origen de subred por un filtro de etiquetas:

Targets: All instances on the network
Source Filter: Source tags
Source tags: myapp-api
Second Source Filter: None
Specified protocols and ports: tcp:5432

... todavía no hay acceso.

Lo mismo al seleccionar Filtro de origen de subredes y simplemente seleccionar todas las subredes.

Cambiar a:

Targets: All instances on the network
Source Filter: IP ranges
Source IP ranges: 0.0.0.0/0
Second Source Filter: Source tags
Source tags: myapp-api
Specified protocols and ports: tcp:5432

una vez más permite que todos (incluso fuera de Google Cloud) se conecten aunque especifiqué una etiqueta de origen

Cambiar el rango de direcciones IP a 10.154.0.0/20 vuelve a bloquear a todos

Targets: All instances on the network
Source Filter: IP ranges
Source IP ranges: 10.154.0.0/20
Second Source Filter: Source tags
Source tags: myapp-api
Specified protocols and ports: tcp:5432

Reemplazar el rango de IP con las direcciones IP externas de las instancias, por ejemplo, 35.189.124.141/32funciona, pero dado que estas direcciones IP son efímeras, esto no es una solución, ya que requerirá actualizar las reglas del firewall cada vez que el escalado automático agregue más instancias con nuevas direcciones IP.

¿Cómo configuro el Firewall para que solo permita instancias de una determinada subred y/o con determinadas etiquetas? Lo que estoy haciendo no parece funcionar.

Respuesta1

Al cambiar de la dirección IP externa de la instancia de la base de datos a su dirección IP interna, de repente todas las combinaciones anteriores funcionan.

psql "dbname=mydb host=internal-ip-address-here user=myuser password=mypassword port=5432"

Resulta que cuando usas etiquetas, el firewall mira la dirección IP interna en lugar de la dirección IP externa.

Targets: All instances on the network
Source Filter: Subnets
Subnets: 10.154.0.0/20
Second Source Filter: Source tags
Source tags: myapp-api
Specified protocols and ports: tcp:5432

información relacionada