Conectarse mediante el proxy de autenticación de Cloud SQL

Esta página describe cómo conectarse a su instancia de Cloud SQL mediante el proxy de autenticación de Cloud SQL.

Para obtener más información sobre cómo funciona el proxy de autenticación de Cloud SQL, consulte Acerca del proxy de autenticación de Cloud SQL .

Descripción general

El proxy de autenticación de Cloud SQL es el método recomendado para conectarse a una instancia de Cloud SQL. El proxy de autenticación de Cloud SQL:

  • Funciona con puntos finales de IP públicos y privados
  • Valida las conexiones utilizando credenciales para una cuenta de usuario o servicio
  • Envuelve la conexión en una capa SSL/TLS autorizada para una instancia de Cloud SQL

Alguno Google Cloud Los servicios y aplicaciones utilizan Cloud SQL Auth Proxy para proporcionar conexiones para rutas de IP públicas con cifrado y autorización, incluidos:

Las aplicaciones que se ejecutan en Google Kubernetes Engine pueden conectarse mediante el proxy de autenticación de Cloud SQL.

Consulta la Guía de inicio rápido para usar el proxy de autenticación de Cloud SQL para obtener una introducción básica a su uso.

También puede conectarse, con o sin el proxy de autenticación de Cloud SQL, utilizando un cliente psql desde una máquina local o Compute Engine .

Antes de empezar

Antes de poder conectarse a una instancia de Cloud SQL, haga lo siguiente:

    • Para una cuenta de usuario o servicio, asegúrese de que tenga el rol de cliente de Cloud SQL. Este rol contiene el permiso cloudsql.instances.connect , que autoriza a una entidad de seguridad a conectarse a todas las instancias de Cloud SQL de un proyecto.

      Ir a la página de IAM

    • Opcionalmente, puede incluir una condición de IAM en el enlace de la política de IAM que otorgue a la cuenta permiso para conectarse solo a una instancia específica de Cloud SQL.
  1. Enable the Cloud SQL Admin API.

    Enable the API

  2. Instalar e inicializar la CLI de gcloud .
  3. Opcional. Instale el cliente Docker del proxy de autenticación de Cloud SQL .

Descargar el proxy de autenticación de Cloud SQL

Linux de 64 bits

  1. Descargar el proxy de autenticación de Cloud SQL:
    curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.16.0/cloud-sql-proxy.linux.amd64
  2. Hacer que el proxy de autenticación de Cloud SQL sea ejecutable:
    chmod +x cloud-sql-proxy

Linux de 32 bits

  1. Descargar el proxy de autenticación de Cloud SQL:
    curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.16.0/cloud-sql-proxy.linux.386
  2. Si no se encuentra el comando curl , ejecute sudo apt install curl y repita el comando de descarga.
  3. Hacer que el proxy de autenticación de Cloud SQL sea ejecutable:
    chmod +x cloud-sql-proxy

macOS de 64 bits

  1. Descargar el proxy de autenticación de Cloud SQL:
    curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.16.0/cloud-sql-proxy.darwin.amd64
  2. Hacer que el proxy de autenticación de Cloud SQL sea ejecutable:
    chmod +x cloud-sql-proxy

Mac M1

  1. Descargar el proxy de autenticación de Cloud SQL:
      curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.16.0/cloud-sql-proxy.darwin.arm64
      
  2. Hacer que el proxy de autenticación de Cloud SQL sea ejecutable:
      chmod +x cloud-sql-proxy
      

Windows de 64 bits

Haga clic con el botón derecho en https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.16.0/cloud-sql-proxy.x64.exe y seleccione "Guardar enlace como" para descargar el proxy de autenticación de Cloud SQL. Cambie el nombre del archivo a cloud-sql-proxy.exe .

Windows de 32 bits

Haga clic con el botón derecho en https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.16.0/cloud-sql-proxy.x86.exe y seleccione "Guardar enlace como" para descargar el proxy de autenticación de Cloud SQL. Cambie el nombre del archivo a cloud-sql-proxy.exe .

Imagen de Docker del proxy de autenticación de Cloud SQL

El proxy de autenticación de Cloud SQL tiene diferentes imágenes de contenedor, como distroless , alpine y buster . La imagen de contenedor predeterminada del proxy de autenticación de Cloud SQL usa distroless , que no contiene shell. Si necesita un shell o herramientas relacionadas, descargue una imagen basada en alpine o buster . Para obtener más información, consulte Imágenes de contenedor del proxy de autenticación de Cloud SQL .

Puede extraer la última imagen a su máquina local usando Docker usando el siguiente comando:

docker pull gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.16.0

Otros sistemas operativos

Para otros sistemas operativos no incluidos aquí, puedes compilar el proxy de autenticación de Cloud SQL desde la fuente .

Iniciar el proxy de autenticación de Cloud SQL

Según su idioma y entorno, puede iniciar el proxy de autenticación de Cloud SQL mediante sockets TCP, sockets Unix o la imagen Docker del proxy de autenticación de Cloud SQL. El binario del proxy de autenticación de Cloud SQL se conecta a una o más instancias de Cloud SQL especificadas en la línea de comandos y abre una conexión local como TCP o socket Unix. Otras aplicaciones y servicios, como el código de su aplicación o las herramientas cliente de administración de bases de datos, pueden conectarse a las instancias de Cloud SQL a través de esas conexiones TCP o sockets Unix.

sockets TCP

Para las conexiones TCP, el proxy de autenticación de Cloud SQL escucha en localhost ( 127.0.0.1 ) de forma predeterminada. Por lo tanto, al especificar --port PORT_NUMBER para una instancia, la conexión local se establece en 127.0.0.1:PORT_NUMBER .

Como alternativa, puede especificar una dirección diferente para la conexión local. Por ejemplo, aquí se explica cómo hacer que el proxy de autenticación de Cloud SQL escuche en 0.0.0.0:1234 la conexión local:

./cloud-sql-proxy --address 0.0.0.0 --port 1234 INSTANCE_CONNECTION_NAME
  1. Copia tu INSTANCE_CONNECTION_NAME . Puedes encontrarlo en la página de descripción general de tu instancia en Google Cloud consola o ejecutando el siguiente comando:

        gcloud sql instances describe INSTANCE_NAME --format='value(connectionName)'

    Por ejemplo: myproject:myregion:myinstance .

  2. Si la instancia tiene configurada una IP pública y una privada, y desea que el proxy de autenticación de Cloud SQL use la dirección IP privada , debe proporcionar la siguiente opción al iniciar el proxy de autenticación de Cloud SQL:
    --private-ip
  3. Si está utilizando una cuenta de servicio para autenticar el proxy de autenticación de Cloud SQL, anote la ubicación en su equipo cliente del archivo de clave privada que se creó cuando creó la cuenta de servicio.
  4. Inicie el proxy de autenticación de Cloud SQL.

    Algunas posibles cadenas de invocación de proxy de autenticación de Cloud SQL:

    • Uso de la autenticación del SDK de Cloud:
      ./cloud-sql-proxy --port 5432 INSTANCE_CONNECTION_NAME
      El puerto especificado no debe estar ya en uso, por ejemplo, por un servidor de base de datos local.
    • Usar una cuenta de servicio e incluir explícitamente el nombre de la conexión de la instancia (recomendado para entornos de producción):
      ./cloud-sql-proxy \
      --credentials-file PATH_TO_KEY_FILE INSTANCE_CONNECTION_NAME &

    Para obtener más información sobre las opciones del proxy de autenticación de Cloud SQL, consulte Opciones para autenticar el proxy de autenticación de Cloud SQL .

Sockets de Unix

El proxy de autenticación de Cloud SQL puede escuchar en un socket Unix, un mecanismo estándar de Posix que permite usar una carpeta para gestionar la comunicación entre dos procesos que se ejecutan en el mismo host. Las ventajas de usar sockets Unix son una mayor seguridad y una menor latencia; sin embargo, no se puede acceder a un socket Unix desde una máquina externa.

Para crear y usar un socket Unix, el directorio de destino debe existir y tanto el proxy de autenticación de Cloud SQL como la aplicación deben tener acceso de lectura y escritura en él.

  1. Copia tu INSTANCE_CONNECTION_NAME . Puedes encontrarlo en la página de descripción general de tu instancia en Google Cloud consola o ejecutando el siguiente comando:

        gcloud sql instances describe INSTANCE_NAME --format='value(connectionName)'

    Por ejemplo: myproject:myregion:myinstance .

  2. Cree el directorio donde residirán los sockets del proxy de autenticación de Cloud SQL:
    sudo mkdir /cloudsql; sudo chmod 777 /cloudsql
  3. Si está utilizando una cuenta de servicio para autenticar el proxy de autenticación de Cloud SQL, anote la ubicación en su equipo cliente del archivo de clave privada que se creó cuando creó la cuenta de servicio.
  4. Abra una nueva ventana de terminal de Cloud Shell e inicie el proxy de autenticación de Cloud SQL.

    Algunas posibles cadenas de invocación de proxy de autenticación de Cloud SQL:

    • Uso de la autenticación del SDK de Google Cloud:
      ./cloud-sql-proxy --unix-socket /cloudsql INSTANCE_CONNECTION_NAME &
    • Usando una cuenta de servicio:
        ./cloud-sql-proxy --unix-socket /cloudsql
        --credentials-file PATH_TO_KEY_FILE INSTANCE_CONNECTION_NAME &

    Inicie el proxy de autenticación de Cloud SQL en su propia terminal de Cloud Shell para poder supervisar su salida sin que se mezcle con la salida de otros programas.

    Para obtener más información sobre las opciones del proxy de autenticación de Cloud SQL, consulte Opciones para autenticar el proxy de autenticación de Cloud SQL .

Estibador

Para ejecutar el proxy de autenticación de Cloud SQL en un contenedor Docker, utilice la imagen Docker del proxy de autenticación de Cloud SQL disponible en Google Container Registry .

Puede iniciar el proxy de autenticación de Cloud SQL mediante sockets TCP o Unix con los comandos que se muestran a continuación. Las opciones utilizan INSTANCE_CONNECTION_NAME como cadena de conexión para identificar una instancia de Cloud SQL. Puede encontrar INSTANCE_CONNECTION_NAME en la página de descripción general de su instancia en Google Cloud consola . o ejecutando el siguiente comando:

gcloud sql instances describe INSTANCE_NAME
.

Por ejemplo: myproject:myregion:myinstance .

Según su idioma y entorno, puede iniciar el proxy de autenticación de Cloud SQL mediante sockets TCP o sockets Unix. Los sockets Unix no son compatibles con aplicaciones escritas en Java ni con el entorno Windows.

Uso de sockets TCP

docker run -d \\
  -v PATH_TO_KEY_FILE:/path/to/service-account-key.json \\
  -p 127.0.0.1:5432:5432 \\
  gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.16.0 \\
  --address 0.0.0.0 --port 5432 \\
  --credentials-file /path/to/service-account-key.json INSTANCE_CONNECTION_NAME

Si está utilizando las credenciales proporcionadas por su instancia de Compute Engine, no incluya el parámetro --credentials-file ni la línea -v PATH_TO_KEY_FILE :/path/to/service-account-key.json .

Especifique siempre el prefijo 127.0.0.1 en -p para que el proxy de autenticación de Cloud SQL no quede expuesto fuera del host local. El valor "0.0.0.0" en el parámetro "instances" es necesario para que el puerto sea accesible desde fuera del contenedor Docker.

Uso de sockets Unix

docker run -d -v /cloudsql:/cloudsql \\
  -v PATH_TO_KEY_FILE:/path/to/service-account-key.json \\
  gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.16.0 --unix-socket=/cloudsql \\
  --credentials-file /path/to/service-account-key.json INSTANCE_CONNECTION_NAME

Si está utilizando las credenciales proporcionadas por su instancia de Compute Engine, no incluya el parámetro --credentials-file ni la línea -v PATH_TO_KEY_FILE :/path/to/service-account-key.json .

Si está utilizando una imagen optimizada para contenedores, utilice un directorio en el que se pueda escribir en lugar de /cloudsql , por ejemplo:

-v /mnt/stateful_partition/cloudsql:/cloudsql

Puede especificar más de una instancia, separadas por comas. También puede usar los metadatos de Compute Engine para determinar dinámicamente las instancias a las que conectarse. Obtenga más información sobre los parámetros del proxy de autenticación de Cloud SQL.

Conectarse con el cliente psql

Debian/Ubuntu

Instale el cliente psql desde el administrador de paquetes:

sudo apt-get update
sudo apt-get install postgresql-client

CentOS/RHEL

Instale el cliente psql desde el administrador de paquetes:

sudo yum install postgresql

openSUSE

Instale el cliente psql desde el administrador de paquetes:

sudo zypper install postgresql

Otras plataformas

  1. Descargue la distribución principal de PostgreSQL para su plataforma desde la página de descargas de PostgreSQL .
    La distribución principal incluye el cliente psql.
  2. Instale la base de datos PostgreSQL, siguiendo las instrucciones de la página de descarga.

La cadena de conexión que utilice dependerá de si inició el proxy de autenticación de Cloud SQL mediante un socket TCP, un socket UNIX o Docker.

sockets TCP

  1. Inicie el cliente psql:
    psql "host=127.0.0.1 sslmode=disable dbname=DB_NAME user=USERNAME"

    Aunque el parámetro sslmode está configurado para disable , el proxy de autenticación de Cloud SQL proporciona una conexión cifrada.

    Cuando se conecta mediante sockets TCP, se accede al proxy de autenticación de Cloud SQL a través de 127.0.0.1 .

  2. Si se le solicita, ingrese la contraseña.
  3. Aparece el indicador psql.

Uso de sockets Unix

  1. Inicie el cliente psql:
    psql "sslmode=disable host=/cloudsql/INSTANCE_CONNECTION_NAME dbname=DB_NAME user=USERNAME"

    Aunque el parámetro sslmode está configurado para disable , el proxy de autenticación de Cloud SQL proporciona una conexión cifrada.

  2. Introduzca la contraseña.
  3. Aparece el indicador psql.

¿Necesitas ayuda? Para solucionar problemas con el proxy, consulta "Solucionar problemas de conexión con el proxy de autenticación de Cloud SQL" o nuestra página de soporte de Cloud SQL .

Conectarse con una aplicación

Puedes conectarte al proxy de autenticación de Cloud SQL desde cualquier lenguaje que te permita conectarte a un socket Unix o TCP. A continuación, encontrarás fragmentos de código de ejemplos completos en GitHub para ayudarte a comprender cómo funcionan juntos en tu aplicación.

Temas adicionales

Argumentos de la línea de comandos del proxy de autenticación de Cloud SQL

Los ejemplos anteriores abarcan los casos de uso más comunes, pero el proxy de autenticación de Cloud SQL también ofrece otras opciones de configuración que pueden configurarse mediante argumentos de línea de comandos. Para obtener ayuda sobre los argumentos de línea de comandos, utilice el indicador --help para consultar la documentación más reciente:

./cloud-sql-proxy --help

Consulte el archivo README en el repositorio de GitHub de Cloud SQL Auth Proxy para obtener ejemplos adicionales de cómo usar las opciones de la línea de comandos de Cloud SQL Auth Proxy.

Opciones para autenticar el proxy de autenticación de Cloud SQL

Todas estas opciones utilizan un INSTANCE_CONNECTION_NAME como cadena de conexión para identificar una instancia de Cloud SQL. Puede encontrar el INSTANCE_CONNECTION_NAME en la página de descripción general de su instancia en Google Cloud consola . o ejecutando el siguiente comando:

gcloud sql instances describe --project PROJECT_ID INSTANCE_CONNECTION_NAME .

Por ejemplo: gcloud sql instances describe --project myproject myinstance .

Algunas de estas opciones utilizan un archivo de credenciales JSON que incluye la clave privada RSA de la cuenta. Para obtener instrucciones sobre cómo crear un archivo de credenciales JSON para una cuenta de servicio, consulte "Crear una cuenta de servicio" .

El proxy de autenticación de Cloud SQL ofrece varias alternativas de autenticación, según el entorno. El proxy de autenticación de Cloud SQL comprueba cada uno de los siguientes elementos, en el orden indicado, utilizando el primero que encuentra para intentar la autenticación:

  1. Credenciales proporcionadas por el indicador de archivo de credenciales.

    Use una cuenta de servicio para crear y descargar el archivo JSON asociado y configure el indicador --credentials-file en la ruta del archivo al iniciar el proxy de autenticación de Cloud SQL. La cuenta de servicio debe tener los permisos necesarios para la instancia de Cloud SQL.

    Para usar esta opción en la línea de comandos, invoque el comando cloud-sql-proxy con el indicador --credentials-file establecido en la ruta y el nombre de un archivo de credenciales JSON. La ruta puede ser absoluta o relativa al directorio de trabajo actual. Por ejemplo:

    ./cloud-sql-proxy --credentials-file PATH_TO_KEY_FILE \
    INSTANCE_CONNECTION_NAME
      

    Para obtener instrucciones detalladas sobre cómo agregar roles de IAM a una cuenta de servicio, consulte Otorgar roles a cuentas de servicio .

    Para obtener más información sobre los roles que admite Cloud SQL, consulte Roles de IAM para Cloud SQL .

  2. Credenciales proporcionadas por un token de acceso.

    Cree un token de acceso e invoque el comando cloud-sql-proxy con el indicador --token establecido en un token de acceso OAuth 2.0. Por ejemplo:
    ./cloud-sql-proxy --token ACCESS_TOKEN \
    INSTANCE_CONNECTION_NAME
      
  3. Credenciales proporcionadas por una variable de entorno.

    Esta opción es similar a usar el indicador --credentials-file , excepto que especifica el archivo de credenciales JSON que configuró en la variable de entorno GOOGLE_APPLICATION_CREDENTIALS en lugar de usar el argumento de línea de comandos --credentials-file .
  4. Credenciales de un cliente CLI de gcloud autenticado.

    Si instaló la CLI de gcloud y se autenticó con su cuenta personal, el proxy de autenticación de Cloud SQL puede usar las mismas credenciales. Este método es especialmente útil para poner en marcha un entorno de desarrollo.

    Para permitir que el proxy de autenticación de Cloud SQL use sus credenciales de gcloud CLI, use el siguiente comando para autenticar gcloud CLI:

    gcloud auth application-default login
  5. Credenciales asociadas con la instancia de Compute Engine.

    Si se conecta a Cloud SQL desde una instancia de Compute Engine, el proxy de autenticación de Cloud SQL puede usar la cuenta de servicio asociada a dicha instancia. Si la cuenta de servicio tiene los permisos necesarios para la instancia de Cloud SQL, el proxy de autenticación de Cloud SQL se autenticará correctamente.

    Si la instancia de Compute Engine está 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 de autenticación de Cloud SQL. Si ambas instancias están en proyectos diferentes, debe agregar la cuenta de servicio de la instancia de Compute Engine al proyecto que contiene la instancia de Cloud SQL.

  6. Cuenta de servicio predeterminada del entorno

    Si el proxy de autenticación de Cloud SQL no encuentra credenciales en ninguno de los lugares mencionados anteriormente, sigue la lógica documentada en Configuración de la autenticación para aplicaciones de producción de servidor a servidor . Algunos entornos (como Compute Engine, App Engine, etc.) proporcionan una cuenta de servicio predeterminada que la aplicación puede usar para autenticarse de forma predeterminada. Si usa una cuenta de servicio predeterminada, debe tener los permisos descritos en roles y permisos. Para obtener más información sobre el enfoque de autenticación de Google Cloud, consulte Descripción general de la autenticación .

Crear una cuenta de servicio

  1. En el Google Cloud consola, vaya a la página Cuentas de servicio .

    Ir a Cuentas de servicio

  2. Seleccione el proyecto que contiene su instancia de Cloud SQL.
  3. Haga clic en Crear cuenta de servicio .
  4. En el campo Nombre de la cuenta de servicio , ingrese un nombre descriptivo para la cuenta de servicio.
  5. Cambie el ID de la cuenta de servicio a un valor único y reconocible y luego haga clic en Crear y continuar .
  6. Haga clic en el campo Seleccionar un rol y seleccione uno de los siguientes roles:
    • Cloud SQL > Cliente de Cloud SQL
    • Cloud SQL > Editor de Cloud SQL
    • Cloud SQL > Administrador de Cloud SQL
  7. Haga clic en Listo para finalizar la creación de la cuenta de servicio.
  8. Haga clic en el menú de acciones de su nueva cuenta de servicio y luego seleccione Administrar claves .
  9. Haga clic en el menú desplegable Agregar clave y luego haga clic en Crear nueva clave .
  10. Confirme que el tipo de clave sea JSON y luego haga clic en Crear .

    El archivo de clave privada se descarga en tu equipo. Puedes moverlo a otra ubicación. Mantén el archivo de clave seguro.

Utilice el proxy de autenticación de Cloud SQL con IP privada

Para conectarse a una instancia de Cloud SQL mediante una IP privada, el proxy de autenticación de Cloud SQL debe estar en un recurso con acceso a la misma red de VPC que la instancia.

El proxy de autenticación de Cloud SQL usa la dirección IP para establecer una conexión con su instancia de Cloud SQL. De forma predeterminada, intenta conectarse mediante una dirección IPv4 pública.

Si su instancia de Cloud SQL solo tiene una IP privada o tiene configuradas una IP pública y una privada, y desea que el proxy de autenticación de Cloud SQL use la dirección IP privada, debe proporcionar la siguiente opción cuando inicie el proxy de autenticación de Cloud SQL:

--private-ip

Utilice el proxy de autenticación de Cloud SQL con instancias que tengan habilitada la Conexión de servicio privado

Puede usar el proxy de autenticación de Cloud SQL para conectarse a una instancia de Cloud SQL con la conexión de servicio privado habilitada.

El proxy de autenticación de Cloud SQL es un conector que proporciona acceso seguro a esta instancia sin necesidad de redes autorizadas ni de configurar SSL.

Para permitir conexiones de cliente de Cloud SQL Auth Proxy, debe configurar un registro DNS que coincida con el nombre DNS recomendado proporcionado para la instancia. El registro DNS es una correspondencia entre un recurso DNS y un nombre de dominio.

Para obtener más información sobre cómo usar el proxy de autenticación de Cloud SQL para conectarse a instancias con Private Service Connect habilitado, consulte Conectarse mediante el proxy de autenticación de Cloud SQL .

Ejecute el proxy de autenticación de Cloud SQL en un proceso separado

Ejecutar el proxy de autenticación de Cloud SQL en un proceso de terminal de Cloud Shell independiente puede ser útil para evitar mezclar la salida de la consola con la de otros programas. Utilice la sintaxis que se muestra a continuación para invocar el proxy de autenticación de Cloud SQL en un proceso independiente.

Linux

En Linux o macOS, use un & final en la línea de comando para iniciar el proxy de autenticación de Cloud SQL en un proceso separado:

./cloud-sql-proxy INSTANCE_CONNECTION_NAME
  --credentials-file PATH_TO_KEY_FILE &

Ventanas

En Windows PowerShell, use el comando Start-Process para iniciar el proxy de autenticación de Cloud SQL en un proceso separado:

Start-Process --filepath "cloud-sql-proxy.exe"
  --ArgumentList "
  --credentials-file PATH_TO_KEY_FILEINSTANCE_CONNECTION_NAME"

Ejecute el proxy de autenticación de Cloud SQL en un contenedor Docker

Para ejecutar el proxy de autenticación de Cloud SQL en un contenedor Docker, use la imagen Docker del proxy de autenticación de Cloud SQL disponible en Google Container Registry . Puede instalar la imagen Docker del proxy de autenticación de Cloud SQL con el siguiente comando:

docker pull gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.16.0

Puede iniciar el proxy de autenticación de Cloud SQL mediante sockets TCP o sockets Unix, con los comandos que se muestran a continuación.

sockets TCP

    docker run -d \
      -v PATH_TO_KEY_FILE:/path/to/service-account-key.json \
      -p 127.0.0.1:5432:5432 \
      gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.16.0 \
      --address 0.0.0.0 \
      --credentials-file /path/to/service-account-key.json \
      INSTANCE_CONNECTION_NAME

Sockets de Unix

    docker run -d \
      -v /PATH_TO_HOST_TARGET:/PATH_TO_GUEST_TARGET \
      -v PATH_TO_KEY_FILE:/path/to/service-account-key.json \
      gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.16.0 --unix-socket /cloudsql \
      --credentials-file /path/to/service-account-key.json/PATH_TO_KEY_FILE \
      INSTANCE_CONNECTION_NAME

Si está utilizando una imagen optimizada para contenedores, utilice un directorio en el que se pueda escribir en lugar de /cloudsql , por ejemplo:

v /mnt/stateful_partition/cloudsql:/cloudsql

Si está utilizando las credenciales proporcionadas por su instancia de Compute Engine, no incluya el parámetro credential_file ni la línea -v PATH_TO_KEY_FILE :/path/to/service-account-key.json .

Ejecución del proxy de autenticación de Cloud SQL como servicio

Ejecutar el proxy de autenticación de Cloud SQL como servicio en segundo plano es una opción para cargas de trabajo de desarrollo y producción locales. Durante el desarrollo, cuando necesite acceder a su instancia de Cloud SQL, puede iniciar el servicio en segundo plano y detenerlo al finalizar.

Para cargas de trabajo de producción, el proxy de autenticación de Cloud SQL actualmente no ofrece compatibilidad integrada para ejecutarse como servicio de Windows, pero se pueden usar administradores de servicios de terceros para ejecutarlo como tal. Por ejemplo, puede usar NSSM para configurar el proxy de autenticación de Cloud SQL como servicio de Windows, y NSSM lo monitoriza y lo reinicia automáticamente si deja de responder. Consulte la documentación de NSSM para obtener más información.

Imponer el uso del proxy de autenticación de Cloud SQL

Habilite el uso del proxy de autenticación de Cloud SQL en Cloud SQL mediante ConnectorEnforcement .

Si utiliza una instancia con Private Service Connect habilitado , existe una limitación. Si la instancia tiene habilitada la aplicación de conectores, no podrá crear réplicas de lectura para ella. De igual forma, si la instancia tiene réplicas de lectura, tampoco podrá habilitar la aplicación de conectores para ella.

nube g

El siguiente comando impone el uso de conectores de Cloud SQL.

    gcloud sql instances patch INSTANCE_NAME \
    --connector-enforcement REQUIRED
  

Para deshabilitar la aplicación, utilice la siguiente línea de código: --connector-enforcement NOT_REQUIRED La actualización no activa un reinicio.

REST versión 1

El siguiente comando impone el uso de conectores de Cloud SQL

Antes de utilizar cualquiera de los datos solicitados, realice las siguientes sustituciones:

  • project-id : El ID del proyecto.
  • instance-id : El ID de la instancia.

Método HTTP y URL:

PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id

Cuerpo JSON de la solicitud:

{
  "settings": {                     
    "connectorEnforcement": "REQUIRED"    
  }                                             
}   

Para enviar su solicitud, expanda una de estas opciones:

Debería recibir una respuesta JSON similar a la siguiente:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "[email protected]",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "UPDATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

Para desactivar la aplicación, utilice "connectorEnforcement": "NOT_REQUIRED" . La actualización no activa el reinicio.

REST v1beta4

El siguiente comando impone el uso de conectores de Cloud SQL.

Antes de utilizar cualquiera de los datos solicitados, realice las siguientes sustituciones:

  • project-id : El ID del proyecto.
  • instance-id : El ID de la instancia.

Método HTTP y URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

Cuerpo JSON de la solicitud:

{
  "settings": {
    "connectorEnforcement": "REQUIRED"
  }
}

Para enviar su solicitud, expanda una de estas opciones:

Debería recibir una respuesta JSON similar a la siguiente:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "[email protected]",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "UPDATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

Para desactivar la aplicación, utilice "connectorEnforcement": "NOT_REQUIRED" . La actualización no activa el reinicio.

Consejos para trabajar con Cloud SQL Auth Proxy

Invocar el proxy de autenticación de Cloud SQL

Todas las invocaciones de proxy de ejemplo inician el proxy de autenticación de Cloud SQL en segundo plano, por lo que se devuelve un mensaje. Reserve esa terminal de Cloud Shell para el proxy de autenticación de Cloud SQL para evitar que su salida se mezcle con la de otros programas. Además, la salida del proxy de autenticación de Cloud SQL puede ayudarle a diagnosticar problemas de conexión, por lo que puede ser útil capturarla en un archivo de registro. Si no inicia el proxy de autenticación de Cloud SQL en segundo plano, la salida se envía a la salida estándar a menos que se redirija.

No es necesario usar /cloudsql como directorio para los sockets del proxy de autenticación de Cloud SQL. (Ese nombre de directorio se eligió para minimizar las diferencias con las cadenas de conexión de App Engine). Sin embargo, si cambia el nombre del directorio, minimice la longitud total; se incorpora en una cadena más larga con un límite de longitud impuesto por el sistema operativo. Depende del sistema, pero suele tener entre 91 y 108 caracteres. En Linux, la longitud suele ser de 108 caracteres; puede usar el siguiente comando para comprobarlo:

cat /usr/include/linux/un.h | grep "define UNIX_PATH_MAX"

Utilice el proxy de autenticación de Cloud SQL para conectarse a varias instancias

Puedes usar un cliente proxy de autenticación de Cloud SQL local para conectarte a varias instancias de Cloud SQL. La forma de hacerlo depende de si usas sockets Unix o TCP.

Sockets de Unix

Para conectar el proxy de autenticación de Cloud SQL a varias instancias, proporcione el nombre de conexión de cada instancia como argumento al proxy de autenticación de Cloud SQL, en una lista separada por espacios. El proxy de autenticación de Cloud SQL se conecta a cada instancia al iniciarse.

Te conectas a cada instancia utilizando su socket, en el directorio especificado.

Por ejemplo:

      ./cloud-sql-proxy --unix-socket /cloudsql \
      myProject:us-central1:myInstance myProject:us-central1:myInstance2 &
      psql -U myUser -h /cloudsql/myProject:us-central1:myInstance2
  

sockets TCP

Al conectarse mediante TCP, se especifica un puerto en el equipo para que el proxy de autenticación de Cloud SQL escuche cada instancia de Cloud SQL. Al conectarse a varias instancias de Cloud SQL, cada puerto especificado debe ser único y estar disponible en el equipo.

Por ejemplo:

    # Start the Cloud SQL Auth Proxy to connect to two different Cloud SQL instances
    # Give the Cloud SQL Auth Proxy a unique port on your machine to use for each Cloud SQL instance.

    ./cloud-sql-proxy "myProject:us-central1:myInstance?port=5432" \
    "myProject:us-central1:myInstance2?port=1234"

    # Connect to "myInstance" using port 5432 on your machine:
    psql -U myUser -h 127.0.0.1  --port 5432

    # Connect to "myInstance2" using port 1234 on your machine:
    psql -U myUser -h 127.0.0.1  --port 1234
  

Solucionar problemas de conexión del proxy de autenticación de Cloud SQL

La imagen Docker del proxy de autenticación de Cloud SQL se basa en una versión específica del mismo. Cuando esté disponible una nueva versión, descargue la imagen Docker del proxy de autenticación de Cloud SQL para mantener su entorno actualizado. Puede consultar la versión actual del proxy de autenticación de Cloud SQL en la página de versiones de GitHub del proxy de autenticación de Cloud SQL .

Si tiene problemas para conectarse a su instancia de Cloud SQL mediante el proxy de autenticación de Cloud SQL, aquí hay algunas cosas que puede intentar para encontrar la causa del problema.

  • Verifique que esté utilizando la dirección IP para conectarse a la instancia y no el punto final de escritura .

  • Verifique la salida del proxy de autenticación de Cloud SQL.

    A menudo, la salida del proxy de autenticación de Cloud SQL puede ayudarte a determinar el origen del problema y cómo solucionarlo. Transfiere la salida a un archivo o consulta la terminal de Cloud Shell donde iniciaste el proxy de autenticación de Cloud SQL.

  • Si recibe un error 403 notAuthorized y está usando una cuenta de servicio para autenticar el proxy de autenticación de Cloud SQL, asegúrese de que la cuenta de servicio tenga los permisos correctos.

    Puede comprobar la cuenta de servicio buscando su ID en la página IAM . Debe tener el permiso cloudsql.instances.connect . Los roles predefinidos de administrador, Client y Editor Cloud SQL Admin tienen este permiso.

  • Si te conectas desde App Engine y recibes un error 403 notAuthorized , revisa el valor cloud_sql_instances app.yaml para ver si el nombre de la conexión de instancia está mal escrito o es incorrecto. Los nombres de las conexiones de instancia siempre tienen el formato PROJECT:REGION:INSTANCE .

    Además, verifique que la cuenta de servicio de App Engine (por ejemplo, [email protected]) tiene el rol de IAM de cliente de Cloud SQL.

    Si el servicio de App Engine reside en un proyecto (proyecto A) y la base de datos reside en otro (proyecto B), este error significa que a la cuenta del servicio de App Engine no se le ha otorgado el rol de IAM de cliente de Cloud SQL en el proyecto con la base de datos (proyecto B).

  • Asegúrese de habilitar la API de administración de Cloud SQL.

    Si no es así, verá un resultado como Error 403: Access Not Configured en los registros del proxy de autenticación de Cloud SQL.

  • Si incluye varias instancias en su lista, asegúrese de usar una coma como delimitador, sin espacios. Si usa TCP, asegúrese de especificar puertos diferentes para cada instancia.

  • Si se conecta mediante sockets UNIX, confirme que los sockets se crearon indicando el directorio que proporcionó cuando inició el proxy de autenticación de Cloud SQL.

  • Si tiene una política de firewall de salida, asegúrese de que permita conexiones al puerto 3307 en la instancia de Cloud SQL de destino.

  • Puede confirmar que el proxy de autenticación de Cloud SQL se inició correctamente consultando los registros en la sección Operaciones > Registro > Explorador de registros delGoogle Cloud consola. Una operación exitosa se ve así:

    2021/06/14 15:47:56 Listening on /cloudsql/$PROJECT_ID:$REGION:$INSTANCE_NAME/5432 for $PROJECT_ID:$REGION:$INSTANCE_NAME
    2021/06/14 15:47:56 Ready for new connections
    
  • Problemas de cuota: cuando se supera la cuota de la API de administración de Cloud SQL, el proxy de autenticación de Cloud SQL se inicia con el siguiente mensaje de error:

    There was a problem when parsing a instance configuration but ignoring due
    to the configuration. Error: googleapi: Error 429: Quota exceeded for quota
    metric 'Queries' and limit 'Queries per minute per user' of service
    'sqladmin.googleapis.com' for consumer 'project_number:$PROJECT_ID.,
    rateLimitExceeded
    

    Una vez que una aplicación se conecta al proxy, este informa el siguiente error:

    failed to refresh the ephemeral certificate for $INSTANCE_CONNECTION_NAME:
    googleapi: Error 429: Quota exceeded for quota metric 'Queries' and limit
    'Queries per minute per user' of service 'sqladmin.googleapis.com' for
    consumer 'project_number:$PROJECT_ID., rateLimitExceeded
    

    Solución: Identifique el origen del problema de cuota (por ejemplo, si una aplicación está haciendo un mal uso del conector y creando nuevas conexiones innecesarias) o contacte con el equipo de soporte para solicitar un aumento de la cuota de la API de administración de Cloud SQL. Si el error de cuota aparece al iniciar, debe volver a implementar la aplicación para reiniciar el proxy. Si el error de cuota aparece después del inicio, no es necesario volver a implementarla.

¿Qué sigue?