Información acerca de Cloud SQL Proxy

En esta página se presenta brevemente Cloud SQL Proxy y se describen sus opciones.

Para conocer las instrucciones paso a paso sobre el uso de Cloud SQL Proxy, sigue el enlace correspondiente a tu entorno:

Qué proporciona el proxy

Cloud SQL Proxy proporciona acceso seguro a tus instancias de Cloud SQL de segunda generación sin tener que incluir en lista blanca las direcciones IP ni tener que configurar SSL.

Acceder a la instancia de Cloud SQL mediante Cloud SQL Proxy conlleva las siguientes ventajas:

  • Conexiones seguras: el proxy cifra de forma automática el tráfico que se genera hacia la base de datos y desde esta mediante TLS 1.2 con un algoritmo de cifrado AES de 128 bits. Los certificados SSL se usan para verificar las identidades de los clientes y servidores.
  • Administración de conexiones más sencilla: el proxy maneja la autenticación con Cloud SQL, de modo que ya no es necesario proporcionar direcciones IP estáticas.

El proxy utiliza la API de Cloud SQL para autenticar con GCP, de modo que es necesario habilitar la API antes de utilizar el proxy. También hay que proporcionar el proxy con credenciales de autenticación de GCP y una cuenta de usuario de la base de datos válida.

En el siguiente diagrama se muestra cómo se conecta el proxy a Cloud SQL:

Diagrama del proxy que se conecta desde el software del client con la instancia SQL

Cómo funciona Cloud SQL Proxy

Cloud SQL Proxy funciona a través de un cliente local, denominado proxy, que se ejecuta en el entorno local. Tu aplicación se comunica con el proxy mediante el protocolo de base de datos estándar que utiliza tu base de datos. El proxy utiliza un túnel seguro para comunicarse con su proceso compañero que se ejecuta en el servidor.

Cuando inicies el proxy, debes proporcionar la información siguiente:

  • Las instancias de Cloud SQL con las que el proxy debe establecer las conexiones.
  • Dónde escuchará los datos procedentes de la aplicación que se van a enviar a Cloud SQL.
  • Dónde encontrará las credenciales que utilizará el proxy para autenticar la aplicación en Cloud SQL.

Las opciones de inicio del proxy que proporciones determinarán si este escuchará en un puerto TCP o en un socket Unix. Si lo hace en un socket Unix, creará el socket en la ubicación que elijas; normalmente, el directorio /cloudsql/. En cambio, para TCP, el proxy escucha, de forma predeterminada, en el directorio localhost.

Puedes instalar el proxy en cualquier ubicación de tu entorno local. La ubicación de los binarios de proxy no afecta al lugar donde escucha los datos de la aplicación.

Instalación de Cloud SQL Proxy

Linux de 64 bits

  1. Descarga el proxy:
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
    
  2. Haz que el proxy sea ejecutable:
    chmod +x cloud_sql_proxy
    

Linux de 32 bits

  1. Descarga el proxy:
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.386 -O cloud_sql_proxy
    
  2. Haz que el proxy sea ejecutable:
    chmod +x cloud_sql_proxy
    

macOS de 64 bits

  1. Descarga el proxy:
    curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64
    
  2. Haz que el proxy sea ejecutable:
    chmod +x cloud_sql_proxy
    

macOS de 32 bits

  1. Descarga el proxy:
    curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.386
    
  2. Haz que el proxy sea ejecutable:
    chmod +x cloud_sql_proxy
    

Windows de 64 bits

Haz clic con el botón derecho en https://dl.google.com/cloudsql/cloud_sql_proxy_x64.exe y selecciona "Guardar vínculo como..." para descargar el proxy con el nombre nuevo cloud_sql_proxy.exe.

Windows de 32 bits

Haz clic con el botón derecho en https://dl.google.com/cloudsql/cloud_sql_proxy_x86.exe y selecciona "Guardar vínculo como..." para descargar el proxy con el nombre nuevo cloud_sql_proxy.exe.
Si el sistema operativo no se incluye aquí, también puedes compilar el proxy desde el origen.

Opciones para autenticar Cloud SQL Proxy

Cloud SQL Proxy proporciona varias alternativas de autenticación según el entorno. El proxy comprueba cada uno de los elementos siguientes, en este orden, y utiliza el primero que encuentre para intentar la autenticación:

  1. Credenciales proporcionadas en el comando de invocación del proxy
  2. Credenciales que proporciona el entorno local
  3. Credenciales asociadas con la instancia de Compute Engine
  4. Credenciales de un cliente del SDK de Google Cloud autenticado

Consulta las invocaciones y cadenas de conexión de ejemplo.

Credenciales proporcionadas en el comando de invocación del proxy

Puedes crear un archivo de credenciales con la consola de Google Cloud Platform y proporcionarlo en la línea de comandos cuando inicies Cloud SQL Proxy con el parámetro -credential_file. La cuenta de servicio debe tener los permisos obligatorios para la instancia de Cloud SQL.

La ventaja de este método de autenticación es que se puede crear un archivo de credenciales específico del proxy y que esté enlazado de forma explícita y permanente al proxy mientras dure su ejecución. Por este motivo, se trata del método recomendado para las instancias de producción que no se ejecutan en una instancia de Compute Engine.

Si lo necesitas para invocar Cloud SQL Proxy desde varios equipos, puedes duplicar el archivo de credenciales en una imagen del sistema.

Para utilizar este método, es necesario crear y administrar el archivo de credenciales. Solo pueden crear la cuenta de servicio aquellos usuarios que tengan el permiso resourcemanager.projects.setIamPolicy (por ejemplo, los propietarios de proyectos). Si tu usuario de GCP no dispone de este permiso, debes pedirle a otro usuario que te cree una cuenta de servicio o tendrás que usar otro método para autenticar el proxy.

Si necesitas ayuda para crear un archivo de credenciales, consulta la sección sobre cómo crear cuentas de servicio.

Credenciales que proporciona el entorno local

Este método es idéntico al del archivo de credenciales en la línea de comandos, excepto en que la ubicación de dicho archivo se proporciona con la variable de entorno GOOGLE_APPLICATION_CREDENTIALS.

Credenciales asociadas con la instancia de Compute Engine

Si te conectas a Cloud SQL desde una instancia de Compute Engine, el proxy puede utilizar la cuenta de servicio asociada con dicha instancia. Si la cuenta de servicio tiene los permisos obligatorios para la instancia de Cloud SQL, la autenticación del proxy se realizará correctamente.

Si la instancia de Compute Engine se encuentra en el mismo proyecto que la instancia de Cloud SQL, la cuenta de servicio predeterminada de la instancia de Compute Engine tiene los permisos necesarios para autenticar el proxy. En cambio, si las dos instancias están en proyectos distintos, deberás agregar la cuenta de servicio de la instancia de Compute Engine al proyecto que contenga la instancia de Cloud SQL.

Credenciales de un cliente del SDK de Google Cloud autenticado

Si has instalado el SDK de Google Cloud y los has utilizado para autenticar en GCP, Cloud SQL Proxy puede utilizar las mismas credenciales. Este método es especialmente útil para activar un entorno de desarrollo con rapidez. En cambio, para un entorno de producción debes utilizar uno de los otros métodos de autenticación.

Puedes determinar cuáles son tus credenciales del SDK de Google Cloud actuales con el comando gcloud auth list.

Permisos obligatorios para las cuentas de servicio

Cuando utilices una cuenta de servicio para proporcionar las credenciales para el proxy, deberás crearla con los permisos suficientes. Si utilizas las funciones más detalladas de gestión de identidades y accesos (IAM) para administrar los permisos de Cloud SQL, deberás otorgar a la cuenta de servicio la función de cliente de Cloud SQL.

Si utilizas las funciones antiguas (Lector, Editor o Propietario), la cuenta de servicio deberá tener al menos la función de editor).

Opciones para especificar instancias de Cloud SQL

Existen varias maneras de indicar al proxy a qué instancias quieres conectarte. Algunas son explícitas y otras, implícitas. En algunas configuraciones, no es necesario indicar esto con antelación, ya que el proxy se conecta en función de las peticiones de conexión.

Las opciones para especificar la instancia dependen del sistema operativo y del entorno:

Opción Ventajas Advertencias y requisitos Linux/macOS
(Sockets Unix)
Java Windows Notas
Detección automática de instancias No es necesario especificar las instancias, se crean los sockets para todas las instancias en el proyecto predeterminado. Aumenta el uso de la API de proxy. Debes tener el SDK de Google Cloud instalado, autenticado y con un conjunto de proyectos predeterminado. Debes reiniciar el proxy para añadir instancias. Compatible No No No se recomienda para instancias de producción.
Detección de proyectos No es necesario especificar las instancias, se crean los sockets para todas las instancias en los proyectos especificados. Aumenta el uso de la API de proxy. Debes tener el SDK de Google Cloud instalado y autenticado. Debes reiniciar el proxy para añadir instancias. Compatible No No Utiliza el parámetro -projects. No se recomienda para instancias de producción.
Instancias especificadas en la invocación del proxy Se conoce la lista de instancias y esta es estática. Debes reiniciar el proxy para añadir instancias. Compatible Compatible con sockets TCP Compatible con sockets TCP Utiliza el parámetro -instances. Para varias instancias, utiliza una lista con los elementos separados por comas y sin espacios. Más información
Instancias especificadas con los metadatos de Compute Engine La lista de instancias se puede actualizar tan solo con cambiar el valor de los metadatos, sin reiniciar el proxy. Disponible solo en Compute Engine. Compatible Compatible con sockets TCP Compatible con sockets TCP Utiliza el indicador -instances_metadata. Más información

Consulta las invocaciones y cadenas de conexión de ejemplo.

Consejos para trabajar con Cloud SQL Proxy

Invocar Cloud SQL Proxy

Todas las invocaciones de proxy de ejemplo inician el proxy en segundo plano, de modo que se devuelve un mensaje. Es mejor reservar ese terminal para el proxy para evitar que se mezcle su resultado con los resultados de otros programas. Además, el resultado del proxy puede ayudar a conocer los problemas de conexión, de modo que puede resultar útil capturarlo en un archivo de registro.

No tienes que utilizar /cloudsql como el directorio para los sockets de proxy. (Ese nombre de directorio se eligió para que no hubiera apenas diferencias con las cadenas de conexión de App Engine). Sin embargo, si cambias el nombre del directorio, procura que sea lo más corto posible, ya que se incorpora a una cadena más larga que tiene un límite de longitud impuesto por el sistema operativo.

Uso del proxy para conectar a varias instancias

Puedes utilizar un cliente de proxy local para conectarte a varias instancias de Cloud SQL. La forma de hacerlo dependerá de si utilizar sockets Unix o TCP.

Sockets Unix

Para conectar el proxy a varias instancias, proporciona los nombres de conexión de instancias con el parámetro -instances, en una lista de elementos separados por comas y sin espacios. El proxy se conecta a cada instancia cuando se inicia.

Con este socket te conectas a cada instancia, en el directorio especificado.

Por ejemplo:

./cloud_sql_proxy -dir=/cloudsql -instances=myProject:us-central1:myInstance,myProject:us-central1:myInstance2 &
psql -U myUser -h /cloudsql/myProject:us-central1:myInstance2

TCP

Cuando te conectes mediante TCP, deberás especificar el puerto del equipo que vas a utilizar para conectarte a la instancia y cada instancia debe tener su propio puerto. La herramienta psql utiliza el puerto 5432 de forma predeterminada, pero puedes especificar otro.

Por ejemplo:

./cloud_sql_proxy -instances=myProject:us-central1:myInstance=tcp:5432,myProject:us-central1:myInstance2=tcp:5433 &
psql -U myUser -h 127.0.0.1  --port 5433

Mantener Cloud SQL Proxy actualizado

Google publica de vez en cuanto versiones nuevas del proxy. Puedes determinar la versión actual si consultas la página de lanzamientos de GitHub de Cloud SQL Proxy. Las futuras versiones de proxy también se comunicarán en el foro de anuncios de Cloud SQL de Google Groups.

Uso de la API

Cloud SQL Proxy emite peticiones a la API de Google Cloud SQL que se incluyen en la cuota de API del proyecto.

El máximo uso de la API se produce cuando se inicia el proxy; en especial, si se utiliza la detección automática de instancias o el parámetro -projects. Mientras se ejecuta el proxy, se emiten dos llamadas de API a la hora por cada instancia conectada.

Parámetros e indicadores de Cloud SQL Proxy

Cloud SQL Proxy acepta varios indicadores y parámetros cuando se inicia. Estas opciones determinan dónde y cómo crea Cloud SQL Proxy los sockets que utiliza para comunicarse con Cloud SQL y cómo realiza las autenticaciones.

Si necesitas ayuda con las opciones de proxy, consulta la información siguiente:

Invocaciones de proxy de ejemplo y cadenas de conexión del cliente de psql

En los ejemplos siguientes se muestran invocaciones del proxy y cadenas de conexión para un usuario de PostgreSQL myUser, para la instancia myInstance, que se encuentra en us-central1, en el proyecto myProject.

Uso de detección automática de instancias con credenciales de gcloud:

./cloud_sql_proxy -dir=/cloudsql &
 psql -U myUser -h /cloudsql/myProject:us-central1:myInstance
Uso de detección de proyectos con credenciales de gcloud:

./cloud_sql_proxy -dir=/cloudsql -projects=myProject &
psql -U myUser -h /cloudsql/myProject:us-central1:myInstance
Para una instancia de Compute Engine, con especificación de instancias explícita:

./cloud_sql_proxy -dir=/cloudsql -instances=myProject:us-central1:myInstance &
psql -U myUser -h /cloudsql/myProject:us-central1:myInstance
Para Unix, con TCP:

./cloud_sql_proxy -instances=myProject:us-central1:myInstance=tcp:5432 &
psql -U myUser -h 127.0.0.1
Para Windows (en el símbolo de la línea de comandos):

cloud_sql_proxy.exe -instances=myProject:us-central1:myInstance=tcp:5432
psql -U myUser -h 127.0.0.1

Más información sobre las opciones de Cloud SQL Proxy y las cadenas de conexión en la página GitHub de Cloud SQL Proxy.

Creación de cuentas de servicio

Para crear una cuenta de servicio, efectúa este procedimiento:

  1. Accede a la página sobre cuentas de servicio de Cloud SQL de la consola de Google Cloud Platform.

    Ir a la página sobre cuentas de servicio

  2. Si fuera necesario, selecciona el proyecto que contiene la instancia de Cloud SQL.
  3. Haz clic en Crear cuenta de servicio.
  4. En el cuadro de diálogo Crear cuenta de servicio, introduce un nombre descriptivo para la cuenta de servicio.
  5. Como función, selecciona Cloud SQL > Cliente de Cloud SQL.

    También puedes usar la función básica de editor al seleccionar Proyecto > Editor, aunque esta función incluye permisos de Google Cloud Platform.

    Si no ves estas funciones, puede que tu usuario de Google Cloud Platform no cuente con el permiso resourcemanager.projects.setIamPolicy. Puedes consultar tus permisos mediante una búsqueda de tu ID de usuario en la página sobre gestión de identidades y accesos de la consola de Google Cloud Platform.

  6. Cambia el ID de la cuenta de servicio a un valor único que reconozcas para que puedas encontrar fácilmente esta cuenta de servicio en otro momento si fuera necesario.
  7. Haz clic en Suministrar una nueva clave privada.
  8. El tipo de clave predeterminado es JSON, que es el valor correcto que se debe usar.
  9. Haz clic en Crear.

    El archivo de clave privada se descargará en la máquina. Puedes cambiar la ubicación en la que se encuentra. Debes proteger el archivo de clave.

Más información sobre las cuentas de servicio en la documentación sobre autenticación.

Uso de Cloud SQL Proxy en un entorno de producción

Cuando uses Cloud SQL Proxy en un entorno de producción, deberás seguir determinados pasos para asegurarte de que el proxy proporciona la disponibilidad necesaria para la aplicación.

Asegurar que Cloud SQL Proxy se ejecuta como un servicio persistente

Si el servicio proxy termina, se caen todas las conexiones existentes que pasan por él y la aplicación no puede crear más conexiones a la instancia de Cloud SQL con el proxy. Para evitar todo esto, asegúrate de que el proxy se ejecuta como un servicio persistente, de modo que si el proxy termina por cualquier motivo, se reiniciará de forma automática. Esto se puede lograra con un servicio como systemd, upstart o supervisor. Para el sistema operativo Windows, ejecuta el proxy como un servicio de Windows. En general, el proxy debería tener los mismos requisitos de tiempo de funcionamiento que el proceso de la aplicación.

Número de copias de Cloud SQL Proxy que la aplicación necesita

No hay que crear un proceso proxy para cada proceso de aplicación, ya que varios procesos de aplicación pueden compartir un solo proceso de proxy. En general, deberías ejecutar un proceso cliente de proxy por cada estación de trabajo o máquina virtual.

Si utilizas el autoescalado para las máquinas virtuales, asegúrate de que el proxy está incluido en la configuración de la máquina virtual para que cuando se inicie una máquina virtual nueva, esta tenga su propio proceso de proxy.

Tú decides cuántas conexiones necesita la aplicación limitándolas o agrupándolas. El proxy no limita el número de conexiones nuevas ni el de conexiones persistentes.

Reducir el resultado de Cloud SQL Proxy

Si necesitas reducir el tamaño del registro del proxy, establece -verbose=false cuando inicies el proxy. Sin embargo, ten en cuenta que esto reducirá la eficacia del resultado para el diagnóstico de problemas de conexión.

Solución de problemas de conexiones de Cloud SQL Proxy

Si tienes problemas para conectarte a la instancia de Cloud SQL con Cloud SQL Proxy, prueba estas sugerencias para encontrar la causa del problema.

  • Consulta el resultado registrado del proxy.

    Con el resultado que se registre del proxy es bastante probable que puedas saber el origen del problema y cómo solucionarlo. Envía el resultado a un archivo u observa el terminal donde iniciaste el proxy.

  • Si obtienes un error 403 notAuthorized y utilizas una cuenta de servicio para autenticar el proxy, asegúrate de que esta cuenta tiene los permisos correctos.

    Puedes consultar la cuenta de servicio buscándola por su ID en la página de gestión de identidades y accesos. Debería tener el permiso cloudsql.instances.connect, por ejemplo con la función Cloud SQL Client o la función antigua Editor.

  • Asegúrate de que la API de Cloud SQL está habilitada.

    Si no lo está, verás algo como Error 403: Access Not Configured en los registros del proxy.

  • Si incluyes varias instancias en la lista de instancias, asegúrate de utilizar comas para separar los elementos, sin espacios. Si utilizas TCP, asegúrate de que especificas distintos puertos para cada instancia.

  • Si intentas conectarte desde una aplicación, hazlo primero con un cliente administrativo para eliminar los posibles problemas con la aplicación.

  • Si te conectas mediante sockets de UNIX, confirma que estos se crearon mediante el directorio proporcionado cuando se inició el proxy.

  • Si dispones de política cortafuegos saliente, asegúrate de que esta permite las conexiones con el puerto 3307 en la máquina de destino.

Siguientes pasos