Descripción general de las conexiones

En esta página, se proporciona un resumen de las opciones disponibles para conectarte a tu instancia de Cloud SQL.

Descripción general

Para conectarte a la instancia de Cloud SQL, debes considerar estos dos aspectos:

  • Cómo conectarse: Se refiere a qué ruta de red usas para llegar a la instancia, ya sea una dirección IP externa, accesible a través de Internet (pública), o una dirección IP interna, solo de VPC (privada).
  • Cómo autenticar: Se refiere a qué conexiones están autorizadas y pueden conectarse a la instancia de Cloud SQL.

Usa la siguiente información para decidir qué opciones de conexión y autenticación te resultan más útiles.

Opciones de conexión

IP privada

Una IP privada es una dirección IPv4 o IPv6 a la que se puede acceder en una nube privada virtual (VPC). Puedes usar esta dirección para conectarte desde otros recursos con acceso a la VPC. Las conexiones mediante IP privadas suelen proporcionar una latencia más baja y vectores de ataque limitados, ya que no requieren el desvío a Internet.

Las conexiones a una instancia de Cloud SQL mediante una dirección IP privada se autorizan de forma automática para los rangos de direcciones RFC 1918. De esta manera, todos los clientes privados pueden acceder a la base de datos sin pasar por el proxy. Los rangos de direcciones que no son RFC 1918 deben configurarse como redes autorizadas.

Es posible requerir que todas las conexiones usen el proxy de Cloud SQL o los certificados SSL autoadministrados (opcional).

Es preferible conectarse con una IP privada cuando la conexión se establece desde un cliente en un recurso que tiene acceso a una VPC. Para obtener más información sobre qué recursos pueden usar una IP privada, consulta Requisitos de IP privada. Si deseas obtener instrucciones para agregar una IP privada a la instancia, consulta Configura la conectividad de IP privada.

IP pública

Una IP pública es una dirección IPv4 o IPv6 que está disponible de forma externa en la Internet pública. Esta dirección puede recibir conexiones de dispositivos dentro y fuera de la red de Google, incluso desde ubicaciones como una oficina o tu casa.

Para contribuir a la seguridad de tu instancia, cualquier conexión con una instancia de Cloud SQL mediante una IP pública debe estar autorizada mediante el proxy de Cloud SQL o la autorización redes.

Es preferible conectarse mediante una IP pública cuando la conexión se establece desde un cliente que no cumple con los requisitos de una VPC.

Si deseas obtener instrucciones para agregar una IP pública a una instancia, consulta la sección sobre cómo configurar la conectividad de IP pública.

Opciones de autenticación

Proxy de Cloud SQL

El proxy de Cloud SQL te permite autenticarte y proteger tus conexiones mediante los permisos de la administración de identidades y accesos (IAM). El proxy valida las conexiones mediante un usuario de credenciales o una cuenta de servicio, y une la conexión en una capa SSL/TLS que se autentica para una instancia de Cloud SQL. Para obtener más detalles sobre cómo funciona el proxy de Cloud SQL, consulta Información sobre el proxy de Cloud SQL.

El uso del proxy de Cloud SQL es el método recomendado para autenticar conexiones a una instancia de Cloud SQL, ya que es el más seguro.

El proxy de cliente es una biblioteca de código abierto que se distribuye como un objeto binario ejecutable. El proxy de cliente actúa como un servidor intermediario que escucha las conexiones entrantes, las une en SSL/TLS y, luego, las pasa a una instancia de Cloud SQL.

Para comenzar a usar el proxy de Cloud SQL como objeto binario, consulta la sección sobre cómo autorizar mediante el proxy de Cloud SQL.

Además, algunos lenguajes tienen la opción de usar una biblioteca cliente. Puedes usar estas bibliotecas directamente desde el entorno de lenguaje. Proporcionan la misma autenticación que el proxy sin la necesidad de un proceso externo. Para comenzar, consulta las siguientes páginas:

Por último, algunos entornos, como Cloud Run, Cloud Functions y App Engine, proporcionan un mecanismo que se conecta mediante el proxy de Cloud SQL. A fin de obtener instrucciones para conectarte mediante estos entornos, consulta una de las siguientes secciones:

Certificados SSL/TLS autoadministrados

En lugar de usar el proxy de Cloud SQL para encriptar las conexiones, es posible configurar certificados SSL/TLS de cliente o servidor que sean específicos de una instancia de Cloud SQL. Estos certificados se usan para validar el cliente y el servidor entre sí, y encriptar las conexiones entre ellos.

Se recomienda usar certificados SSL/TLS autoadministrados para proporcionar encriptación cuando no se usa el proxy de Cloud SQL. Si no lo haces, tus datos se transmiten de forma insegura y un tercero podría interceptarlos o inspeccionarlos.

Para comenzar a usar los certificados SSL/TLS autoadministrados, consulta la sección sobre cómo autorizar con certificados SSL/TLS.

Redes autorizadas

A menos que uses el proxy de Cloud SQL, las conexiones a la dirección IP pública de una instancia solo se permiten si la conexión proviene de una red autorizada. Las redes autorizadas son direcciones IP o rangos a los que el usuario especificó que tiene permiso para conectarse.

Para comenzar a usar las redes autorizadas, consulta Autoriza mediante redes autorizadas.

Soluciona problemas

Haz clic en los vínculos de la tabla para obtener más información:

Situación Posible problema Solución
Aborted connection. Se produjo un error durante la lectura de los paquetes o se anuló la conexión. Consulta estas alternativas para solucionarlo.
Se generan errores Unauthorized to connect. Puede haber muchas causas principales. Consulta estas alternativas para solucionarlo.
No se pudo asociar la red. Service Networking API no está habilitada en el proyecto. Habilita Service Networking API en el proyecto.
Remaining connection slots are reserved. Se alcanzó la cantidad máxima de conexiones. Aumenta la marca max_connections.
Set Service Networking service account as servicenetworking.serviceAgent role on consumer project. Faltan permisos de Herramientas de redes en la cuenta de servicio o los permisos que hay son incorrectos. Inhabilita y vuelve a habilitar la API de Herramientas de redes de servicios.
error x509: certificate is not valid for any names, but wanted to match project-name:db-name. Problema conocido: En este momento, el marcador del proxy de Cloud SQL no es compatible con Go 1.15. Hasta que este problema se corrija, consulta este debate en GitHub, en el que se incluye una solución alternativa.

Conexión anulada

Verás el mensaje de error Got an error reading communication packets o Aborted connection xxx to db: DB_NAME.

Posible problema

  • Hay inestabilidad en las herramientas de redes.
  • No hay respuesta a los comandos keep-alive de TCP (el cliente o el servidor no responden, es posible que estén sobrecargados).
  • Se excedió el ciclo de vida de la conexión del motor de base de datos y el servidor finalizó la conexión.

Solución

Las aplicaciones deben tolerar fallas de red y seguir prácticas recomendadas, como la agrupación de conexiones y los reintentos. La mayoría de los agrupadores de conexiones detectan estos errores siempre que sea posible. De lo contrario, la aplicación debe reintentar o fallar de manera controlada.

Para los reintentos de conexión, recomendamos los siguientes métodos:

  1. Realiza una retirada exponencial. Aumenta el intervalo de tiempo entre cada reintento de manera exponencial.
  2. Agrega una retirada aleatoria.
La combinación de estos métodos ayuda a reducir la limitación.


No estás autorizado para establecer la conexión

Verás el mensaje de error Unauthorized to connect.

Posible problema

Puede haber muchas causas, ya que la autorización ocurre en muchos niveles.

  • A nivel de la base de datos, el usuario de la base de datos debe existir y su contraseña debe coincidir.
  • A nivel del proyecto, es posible que el usuario no tenga los permisos de IAM correctos.
  • A nivel de Cloud SQL, es posible que la causa principal dependa de cómo te conectes a tu instancia. Si te conectas directamente a una instancia a través de la IP pública, la IP de origen de la conexión debe estar en la red autorizada de la instancia.

    La conectividad de IP privada está permitida de forma predeterminada, excepto cuando te conectas desde una dirección que no es RFC 1918. Las direcciones de clientes que no son RFC 1918 deben configurarse como redes autorizadas.

    De forma predeterminada, Cloud SQL no procesa rutas de subred de tu VPC que no son RFC 1918. Debes actualizar el intercambio de tráfico entre redes a Cloud SQL para exportar cualquier ruta que no sea RFC 1918. Por ejemplo:

    gcloud compute networks peerings update cloudsql-mysql-googleapis-com --network=NETWORK --export-subnet-routes-with-public-ip --project=PROJECT
    

    Si te conectas a través del proxy de Cloud SQL, asegúrate de que los permisos de IAM estén configurados de forma correcta.

  • A nivel de red, si la instancia de Cloud SQL usa una IP pública, la IP de origen de la conexión debe estar en una red autorizada.

Solución

  • Verifica el nombre de usuario y la contraseña.
  • Verifica las funciones y los permisos de IAM del usuario.
  • Si usas una IP pública, asegúrate de que el origen esté en las redes autorizadas.

No se pudo asociar la red

Verás el mensaje de error Error: Network association failed due to the following error: configura la cuenta de servicio de las Herramientas de redes de servicios con la función servicenetworking.serviceAgent en el proyecto consumidor.

Posible problema

La Service Networking API no está habilitada en el proyecto.

Solución

Habilita la Service Networking API en tu proyecto. Si ves este error cuando intentas asignar una dirección IP privada a una instancia de Cloud SQL y usas una VPC compartida, también debes habilitar la Service Networking API para el proyecto host.


Las ranuras de conexión restantes están reservadas

Verás el mensaje de error FATAL: remaining connection slots are reserved for non-replication superuser connections.

Posible problema

Se alcanzó la cantidad máxima de conexiones.

Solución

Edita el valor de la marca max_connections. Si se aumenta max_connections por encima de un valor determinado, es posible que se pierda la compatibilidad con el ANS.


Configura la cuenta de servicio de las Herramientas de redes de servicios como servicenetworking.serviceAgent en el proyecto del consumidor

Verás el mensaje de error set Service Networking service account as servicenetworking.serviceAgent role on consumer project..

Posible problema

Los permisos de la cuenta de servicio o del usuario no son correctos. Esto puede suceder durante las secuencias de comandos de configuración automáticas, como una secuencia de comandos de configuración de Terraform.

Solución

Para reparar los permisos del servicio, inhabilita la Service Networking API, espera cinco minutos y vuelve a habilitarla.


Error x509: el certificado no es válido para ningún nombre

Verás el mensaje de error error x509: certificate is not valid for any names, but wanted to match project-name:db-name.

Posible problema

Problema conocido: En este momento, el marcador del proxy de Cloud SQL no es compatible con Go 1.15.

Solución

Hasta que este error se corrija, consulta este debate en GitHub, en el que se incluye una solución alternativa.


Próximos pasos