Cómo Conectar a tu Base de Datos con Cloud SQL Auth Proxy
Protege tus bases de datos relacionales en Google Cloud. Erradica el peligro de las redes autorizadas públicas, habilita túneles mTLS automáticos de 256 bits y conecta tus herramientas locales y microservicios mediante identidades IAM sin contraseñas estáticas.
Lo que dominarás en esta guía técnica
127.0.0.1 con credenciales ADC de gcloud.La Brecha de las Redes Autorizadas: Por Qué Abrir tu Base de Datos a Internet es una Sentencia
Durante una de nuestras auditorías de infraestructura para una empresa del sector retail, nos encontramos con un escenario que, por desgracia, se repite con alarmante frecuencia en organizaciones de todos los tamaños. El equipo de seguridad nos convocó de urgencia tras detectar un tráfico anómalo de salida masiva de datos: su base de datos transaccional en Google Cloud SQL había sufrido una exfiltración completa de registros confidenciales.
Al realizar el análisis forense de la configuración, la causa raíz quedó al descubierto en cuestión de minutos. Meses atrás, para que los desarrolladores de base de datos pudieran conectarse rápidamente desde sus casas en modalidad de teletrabajo para depurar incidencias y ejecutar migraciones con DBeaver, un administrador había añadido a la lista de Authorized Networks (redes autorizadas) la dirección 0.0.0.0/0 como una "solución temporal para el fin de semana". Como suele ocurrir en los entornos de producción bajo presión, aquella regla temporal se olvidó y permaneció abierta a todo Internet durante más de ocho meses.
⚠️ El Peligro Crítico de las Redes Autorizadas
Configurar IPs públicas y permitir rangos CIDR abiertos en Cloud SQL traslada toda la seguridad de tus datos a una simple contraseña de base de datos. Los atacantes rastrean continuamente los rangos de IP de los proveedores cloud buscando puertos 5432 (Postgres), 3306 (MySQL) y 1433 (SQL Server). Si una credencial se filtra en un repositorio, en un fichero .env o es vulnerada por fuerza bruta, tu base de datos queda completamente desprotegida. Si sufres un borrado malicioso en un incidente así, tu única salvación será la recuperación ante desastres y Point-in-Time Recovery (PITR) en Cloud SQL.
De la "Comodidad" del Teletrabajo al Incidente de Seguridad
Los desarrolladores no abren las bases de datos a Internet por negligencia deliberada, sino por fricción operativa. Conectar una herramienta gráfica de escritorio como DBeaver, pgAdmin, DataGrip o un script local de Node/Python a una base de datos ubicada en una nube privada suele exigir complejas VPNs corporativas, bastiones SSH (*jump hosts*) o complejas configuraciones de red que entorpecen el flujo de trabajo diario.
Para resolver este conflicto entre seguridad estricta y agilidad del equipo de desarrollo, Google Cloud diseñó el Cloud SQL Auth Proxy. La premisa es contundente: cerrar por completo cualquier red autorizada a Internet, no exponer jamás una IP pública y permitir que los desarrolladores se conecten a su instancia remota apuntando con total tranquilidad a localhost:5432.
¿Qué es Cloud SQL Auth Proxy y Cómo Funciona Bajo el Capó?
El Cloud SQL Auth Proxy es un binario ligero de código abierto (desarrollado en Go) que se ejecuta en el mismo host o pod que tu cliente de base de datos. Actúa como un túnel intermediario local: tu aplicación o software de gestión se conecta al proxy en un socket local (por ejemplo, 127.0.0.1:5432), y el proxy se encarga de retransmitir todo el tráfico hacia la instancia de Cloud SQL a través de un túnel cifrado y autenticado.
🔒 Las Tres Garantías Fundamentales del Auth Proxy
1. Cero IPs Públicas en Internet: No necesitas configurar firewalls externos ni redes autorizadas en Cloud SQL.
2. Cifrado mTLS Automático de 256 bits: El proxy y el servidor Cloud SQL negocian certificados efímeros de forma mutua; no tienes que gestionar manualmente cadenas de certificados SSL.
3. Autenticación Delegada en IAM: El acceso a la instancia no depende de saberse una IP o puerto remoto, sino de contar con los permisos adecuados en Google Cloud IAM mediante la arquitectura de seguridad Zero Trust e identidades sin claves en Google Cloud.
Mecánica Interna: Rotación Horaria de Certificados con Cloud SQL Admin API
¿Qué ocurre exactamente cuando levantas el binario del proxy en tu terminal? El proceso técnico se divide en tres fases milimétricamente orquestadas:
-
Autenticación y Descubrimiento: El proxy utiliza tus credenciales locales (obtenidas mediante
gcloud auth application-default logino una Service Account) para comunicarse con la Cloud SQL Admin API. Verifica si tu identidad posee el permisocloudsql.instances.connecty obtiene los metadatos de conexión de la instancia. - Emisión Efímera de Certificados mTLS: El proxy genera un par de claves criptográficas localmente y solicita a la API de Cloud SQL la firma de un certificado de cliente efímero. Este certificado mTLS tiene una validez estricta de 60 minutos y el proxy lo renueva en segundo plano automáticamente de manera transparente sin desconectar tus sesiones activas.
-
Establecimiento del Túnel Seguro: El proxy abre una conexión mTLS hacia el puerto
3307de la infraestructura de Google Cloud (la capa de terminación del proxy en la red de Google), autentica ambos extremos mediante mTLS y expone el puerto nativo (ej.5432) en tu máquina local.
Matriz de Decisión Arquitectónica: Auth Proxy vs Redes Autorizadas vs Private IP
Para elegir la estrategia de conectividad adecuada en tu infraestructura de arquitectura enterprise y alta disponibilidad en Google Cloud SQL, evaluemos los tres modelos de acceso posibles según la criticidad de la carga de trabajo y el perfil de acceso:
| Método de Conexión | Cifrado en Tránsito | Superficie Pública | Autenticación | Complejidad Operativa | Recomendado Para |
|---|---|---|---|---|---|
| Redes Autorizadas (IP Pública) | Opcional (Requiere configurar certificados SSL manuales) | Máxima (Expuesta a Internet) | Contraseña estática de base de datos | Baja inicial / Crítica a largo plazo | Antipatrón total. Desaconsejado en producción. |
| Cloud SQL Auth Proxy | Obligatorio (mTLS 256 bits continuo) | Nula (Tráfico cerrado por IAM) | Google Cloud IAM + Usuario DB (o IAM nativo) | Mínima (Binario único o contenedor sidecar) | Desarrollo local, teletrabajo, CI/CD y microservicios en GKE/Cloud Run |
| Private IP (VPC Peering / PSC) | Opcional / Configurable mediante certificados internos | Nula (100% aislada en la VPC) | Usuario DB / Políticas de red internas | Media-Alta (Configuración de subredes y rutas privadas) | Cargas de trabajo internas en Compute Engine, GKE y microservicios empresariales |
En arquitecturas de gran escala, el estándar de oro consiste en combinar Private IP con el Auth Proxy: la base de datos se despliega sin IP pública mediante el despliegue de bases de datos Cloud SQL en redes privadas con Terraform y VPC Peering, y los desarrolladores acceden a ella a través del Auth Proxy conectado al túnel seguro de Google Cloud.
Demostración en Vídeo: Configuración y Conexión Práctica Paso a Paso
En este tutorial en vídeo te muestro de forma práctica cómo descargar el binario de Cloud SQL Auth Proxy v2, configurar la autenticación en tu máquina local y conectar herramientas como DBeaver o pgAdmin sin abrir tu base de datos a Internet:
Guía de Implementación Práctica: Conexión Local para Desarrolladores
A continuación tienes el procedimiento exacto que enseñamos a implementar en los equipos de desarrollo para que puedan consultar bases de datos desde sus puestos de trabajo sin solicitar aperturas de red inseguras.
Paso 1: Descarga e Instalación del Proxy v2
Google Cloud reescribió por completo el proxy en su versión 2 (v2), mejorando radicalmente la telemetría, el consumo de memoria y la sintaxis de comandos. Instálalo según tu sistema operativo:
# En Linux (x86_64)
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.14.1/cloud-sql-proxy.linux.amd64
chmod +x cloud-sql-proxy
sudo mv cloud-sql-proxy /usr/local/bin/
# En macOS (usando Homebrew)
brew install cloud-sql-proxy
# En Windows (usando PowerShell como Administrador)
Invoke-WebRequest -Uri "https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.14.1/cloud-sql-proxy.x64.exe" -OutFile "cloud-sql-proxy.exe"
Paso 2: Autenticación con Application Default Credentials (ADC)
Para que el proxy pueda invocar la API de Google Cloud sin necesidad de manejar ficheros de clave JSON en los portátiles de los desarrolladores (lo cual representaría otro grave vector de fuga), el desarrollador solo debe autenticarse una vez con el SDK de Google Cloud:
# Iniciar sesión con tu cuenta corporativa de Google Cloud
gcloud auth login
# Generar las credenciales por defecto para aplicaciones (ADC)
gcloud auth application-default login
# Establecer el proyecto activo de trabajo
gcloud config set project mi-proyecto-gcp-prod
🔑 Permiso Mínimo Necesario en IAM
El usuario o la cuenta de servicio únicamente necesita el rol predefinido roles/cloudsql.client (que contiene el permiso cloudsql.instances.connect). No otorgues roles con privilegios de administración como roles/cloudsql.admin o roles/editor a las identidades de los desarrolladores.
Paso 3: Obtener el Nombre de Conexión y Lanzar el Proxy
Cada instancia de Cloud SQL tiene un identificador universal unívoco con el formato PROYECTO:REGIÓN:NOMBRE_INSTANCIA (Instance Connection Name). Puedes consultarlo en la consola o por CLI:
# Consultar el Instance Connection Name de tu base de datos
gcloud sql instances describe mi-bd-postgres --format="value(connectionName)"
# Ejemplo de salida: mi-proyecto-gcp-prod:europe-west1:mi-bd-postgres
# Iniciar el Auth Proxy mapeando el puerto local 5432
cloud-sql-proxy mi-proyecto-gcp-prod:europe-west1:mi-bd-postgres --port 5432
Al ejecutar el comando, la terminal confirmará que el proxy está escuchando conexiones en 127.0.0.1:5432:
2026/10/25 17:15:20 [mi-proyecto-gcp-prod:europe-west1:mi-bd-postgres] Listening on 127.0.0.1:5432
2026/10/25 17:15:20 The Cloud SQL Auth Proxy is ready for new connections.
Paso 4: Conectar tu Cliente SQL (DBeaver, DataGrip o pgAdmin)
Ahora abre tu herramienta gráfica de gestión de base de datos preferida (DBeaver, DataGrip, VS Code Database Client o TablePlus) y configura una nueva conexión exactamente como si la base de datos estuviera instalada localmente en tu ordenador:
- Host / Servidor:
127.0.0.1olocalhost - Puerto:
5432(para PostgreSQL) o3306(para MySQL) - Base de Datos: Nombre de tu base de datos (ej.
ecommerce_db) - Usuario y Contraseña: Tu usuario y clave de base de datos (o tu identidad IAM)
- Modo SSL: Desactivado / Disable (el cifrado mTLS lo gestiona el proxy de forma transparente hacia la nube)
Autenticación IAM Nativa (`--auto-iam-authn`): Despídete de las Contraseñas en Ficheros `.env`
El mayor salto de madurez en seguridad no solo consiste en encapsular el tráfico en un túnel mTLS, sino en eliminar las contraseñas estáticas de los usuarios de base de datos. Con la autenticación de base de datos integrada en IAM de Google Cloud, tu usuario de base de datos es tu propia cuenta de correo corporativa (en Postgres o MySQL) o la Service Account del microservicio.
Al arrancar el proxy con la bandera --auto-iam-authn, el proxy intercepta el apretón de manos inicial y suministra un token OAuth2 de corta duración directamente al motor de base de datos, verificando tu identidad contra el directorio de Google Workspace/IAM:
# Ejecutar el proxy habilitando autenticación automática IAM
cloud-sql-proxy mi-proyecto-gcp-prod:europe-west1:mi-bd-postgres \
--port 5432 \
--auto-iam-authn
Para habilitar este modo en PostgreSQL, basta con crear el usuario en la instancia asociado al flag de autenticación IAM:
-- Crear un usuario de base de datos vinculado a una cuenta de Google Cloud IAM
CREATE USER "eduardo@tuempresa.com" WITH LOGIN;
GRANT rds_iam TO "eduardo@tuempresa.com"; -- En Postgres nativo Cloud SQL: cloudsqlproxy_iam
GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA public TO "eduardo@tuempresa.com";
Desde ese instante, en DBeaver simplemente introduces como usuario tu correo electrónico y dejas la contraseña en blanco o con cualquier valor ficticio; el proxy y Google Cloud se encargan de validar criptográficamente la sesión sin que existan credenciales compartidas en texto plano.
Patrón de Producción: Cloud SQL Auth Proxy como Sidecar en Kubernetes (GKE)
En entornos productivos contenerizados (como Google Kubernetes Engine), las aplicaciones no deben conectarse a través de IPs públicas ni lidiar con la descarga manual de certificados. El patrón de diseño recomendado por los arquitectos de Google Cloud es el contenedor Sidecar.
En este modelo, el pod de Kubernetes aloja dos contenedores que comparten la misma interfaz de red (localhost): el contenedor de tu aplicación y el contenedor de Cloud SQL Auth Proxy. La aplicación se conecta a 127.0.0.1:5432 y el proxy enruta el tráfico hacia la base de datos autenticándose mediante Workload Identity sin claves secretas en el cluster.
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend-api
namespace: produccion
labels:
app: backend-api
spec:
replicas: 3
selector:
matchLabels:
app: backend-api
template:
metadata:
labels:
app: backend-api
spec:
# Cuenta de servicio de Kubernetes vinculada a Google IAM vía Workload Identity
serviceAccountName: k8s-backend-sa
containers:
# 1. Contenedor de la Aplicación
- name: api-service
image: europe-west1-docker.pkg.dev/mi-proyecto-gcp-prod/repo/api:v1.2.0
env:
- name: DB_HOST
value: "127.0.0.1"
- name: DB_PORT
value: "5432"
- name: DB_NAME
value: "pedidos_db"
- name: DB_USER
value: "app_user"
resources:
requests:
cpu: "250m"
memory: "512Mi"
limits:
cpu: "500m"
memory: "1Gi"
# 2. Contenedor Sidecar: Cloud SQL Auth Proxy v2
- name: cloud-sql-proxy
image: gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.14.1
args:
- "--structured-logs"
- "--port=5432"
- "--max-sigterm-delay=30s"
- "--private-ip" # Fuerza la conexión a través de la VPC interna
- "mi-proyecto-gcp-prod:europe-west1:mi-bd-postgres"
securityContext:
runAsNonRoot: true
allowPrivilegeEscalation: false
resources:
requests:
cpu: "50m"
memory: "64Mi"
limits:
cpu: "200m"
memory: "256Mi"
Antipatrones Críticos en Producción y Optimización FinOps
Durante nuestras revisiones de arquitectura para clientes que escalan en Google Cloud, solemos detectar errores comunes al implementar proxies que provocan sobrecostes o caídas de rendimiento:
⚠️ Antipatrón 1: Creer que el Auth Proxy es un Connection Pooler
El Cloud SQL Auth Proxy NO multiplexa ni gestiona pools de conexiones. Cada conexión que abre tu cliente local o aplicación hacia el proxy se traduce en una conexión de red directa hacia la instancia de Cloud SQL. Si tu aplicación abre 500 conexiones concurrentes sin un pooler del lado de la aplicación (como HikariCP en Java, SQLAlchemy pool en Python o un cluster centralizado de PgBouncer), saturarás la memoria RAM de tu instancia de Cloud SQL y dispararás la factura de cómputo innecesariamente.
-
No sobredimensionar la CPU del Sidecar: El binario del proxy en Go es extremadamente eficiente. Asignar
requests: cpu: 50mymemory: 64Misuele ser suficiente para manejar cientos de consultas por segundo sin agotar los nodos de GKE. -
Evitar el Tráfico Inter-Región Innecesario (Costes de Egress): Si tu instancia de Cloud SQL está en
europe-west1(Bélgica) y lanzas el proxy desde un cluster eneurope-west4(Países Bajos) o desde una oficina remota sin compresión, incurrirás en costes de transferencia de red (Network Egress) que pueden disparar el gasto mensual en entornos de lectura intensiva. -
Controlar el Graceful Shutdown con
--max-sigterm-delay: En Kubernetes, cuando un pod entra en fase de terminación, el proxy debe esperar a que las conexiones abiertas de la aplicación finalicen antes de cerrarse bruscamente. Configura siempre una ventana razonable (ej. 30 segundos) para evitar transacciones abortadas en despliegues rodantes (*rolling updates*).
Preguntas Frecuentes sobre Cloud SQL Auth Proxy (FAQ)
cloudsql.instances.connect, el cual está incluido en el rol predefinido roles/cloudsql.client. Si utilizas autenticación de base de datos nativa con IAM (flag --auto-iam-authn), la identidad requerirá adicionalmente el rol roles/cloudsql.instanceUser.
