
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 Group
de 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-api
una etiqueta o una subred 10.154.0.0/20
o 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 psql
comando 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/32
funciona, 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