Configura la conectividad de IP pública

En esta página, se describe cómo configurar la conectividad de IP pública para una instancia de Cloud SQL.

Introducción

Puedes configurar tu instancia de Cloud SQL para que tenga una dirección IPv4 pública y acepte conexiones de direcciones IP específicas o de un rango de direcciones si agregas direcciones autorizadas a tu instancia.

No puedes especificar una red privada (por ejemplo, 10.x.x.x) como red autorizada.

Direcciones IP públicas para Instancias de SQL Server:

  • IPv6: Las instancias no admiten IPv6.
  • IPv4: Las instancias tienen una dirección IPv4 estática que se les asigna automáticamente. Se realiza un cobro menor por la dirección IP cada vez que se apaga tu instancia (se desactiva).

Para aprender a conectar un cliente de administración a tu instancia a través de una conexión IP, consulta Conecta el cliente sqlcmd mediante direcciones IP.

Si configuras tu instancia para que acepte conexiones mediante su dirección IP pública, configúrala también para que use SSL a fin de proteger tus datos. Si deseas obtener más información, consulta Configura SSL para instancias.

Para configurar tu instancia con una dirección IP que no esté expuesta a la Internet pública, consulta Configura la conectividad de IP privada.

Habilita la IP pública y agrega una dirección o rango de direcciones autorizadas

Cuando habilitas una IP pública para tu instancia, Cloud SQL la configura con una dirección IPv4 estática y pública. Después de habilitar la IP pública, debes configurar la autorización para las conexiones de la base de datos. Consulta las Opciones de autorización para obtener más información.

Para habilitar una IP pública y agregar una dirección autorizada, sigue estos pasos:

Console

  1. Ve a la página Instancias de Cloud SQL en Google Cloud Console.

    Ir a la página Instancias de Cloud SQL

  2. Haz clic en el nombre de la instancia para abrir la página Detalles de la instancia.
  3. Selecciona la pestaña Conexiones.
  4. Selecciona la casilla de verificación IP pública.
  5. Haz clic en Agregar red.
  6. En el campo Red, ingresa la dirección o rango de direcciones IP para las cuales quieres permitir las conexiones.

    Usa la notación CIDR.

  7. Puedes ingresar un nombre para esta entrada.
  8. Haz clic en Listo.
  9. Haz clic en Guardar para actualizar la instancia.

gcloud

  1. Si aún no lo hiciste, agrega una dirección IPv4 a la instancia:
    gcloud sql instances patch [INSTANCE_NAME] --assign-ip
    
  2. Muestra todas las direcciones autorizadas existentes mediante la descripción de la instancia:
    gcloud sql instances describe [INSTANCE_NAME]
    

    Busca entradas de authorizedNetwork en ipConfiguration y anota las direcciones autorizadas que deseas conservar.

  3. Actualiza la lista de redes autorizadas con las direcciones que deseas incluir.
    gcloud sql instances patch [INSTANCE_NAME] --authorized-networks=[IP_ADDR1],[IP_ADDR2]...
    

    Usa la notación CIDR.

  4. Confirma tus cambios:
    gcloud sql instances describe [INSTANCE_NAME]
    

REST v1beta4

  1. Describe la instancia para que se muestren todas las direcciones autorizadas existentes:

    Antes de usar cualquiera de los siguientes datos de solicitud, realiza estos reemplazos:

    • project-id: El ID del proyecto
    • instance-id: El ID de la instancia
    • machine-type: El tipo de máquina de la instancia
    • zone: La zona de la instancia

    Método HTTP y URL:

    GET  https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=settings

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

  2. Actualiza la instancia con todas las direcciones que deseas configurar en ella:

    Antes de usar cualquiera de los siguientes datos de solicitud, realiza estos reemplazos:

    • project-id: El ID del proyecto
    • instance-id: El ID de la instancia
    • network_range_1: Un rango o una dirección IP autorizados
    • network_range_2: Otro rango o dirección IP autorizados

    Método HTTP y URL:

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

    Cuerpo JSON de la solicitud:

    {
      "settings":
      {
        "ipConfiguration":
        {
          "authorizedNetworks":
            [{"value": "network_range_1"}, {"value": network_range_2"}]
        }
      }
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

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

    Usa la notación CIDR.

  3. Confirma tus cambios:

    Antes de usar cualquiera de los siguientes datos de solicitud, realiza estos reemplazos:

    • project-id: El ID del proyecto
    • instance-id: El ID de la instancia
    • ip-address1: El formulario de CIDR de la primera dirección IP
    • ip-address-name1: El nombre de la primera dirección IP
    • ip-address2: El formulario de CIDR de la segunda dirección IP
    • ip-address-name2: El nombre de la segunda dirección IP
    • machine-type: El tipo de máquina de la instancia
    • zone: La zona de la instancia

    Método HTTP y URL:

    GET  https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=settings

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

Quita una dirección o rango de direcciones autorizadas

Para quitar una dirección autorizada, sigue estos pasos:

Console

  1. Ve a la página Instancias de Cloud SQL en Google Cloud Console.

    Ir a la página Instancias de Cloud SQL

  2. Haz clic en el nombre de la instancia para abrir la página Detalles de la instancia.
  3. Selecciona la pestaña Conexiones.
  4. Haz clic en el ícono de borrar Delete. para la dirección que deseas borrar.
  5. Haz clic en Guardar para actualizar la instancia.

gcloud

  1. Describe la instancia para que muestre todas las direcciones autorizadas existentes:
    gcloud sql instances describe [INSTANCE_NAME]
    

    Busca entradas de authorizedNetwork en ipConfiguration y anota las direcciones autorizadas que deseas conservar.

  2. Actualiza la lista de redes autorizadas y descarta las direcciones que deseas quitar.
    gcloud sql instances patch [INSTANCE_NAME] --authorized-networks=[IP_ADDR1],[IP_ADDR2]...
    
  3. Confirma tus cambios:
    gcloud sql instances describe [INSTANCE_NAME]
    

REST v1beta4

  1. Describe la instancia para que se muestren todas las direcciones autorizadas existentes:

    Antes de usar cualquiera de los siguientes datos de solicitud, realiza estos reemplazos:

    • project-id: El ID del proyecto
    • instance-id: El ID de la instancia
    • ip-address1: El formulario de CIDR de la primera dirección IP
    • ip-address-name1: El nombre de la primera dirección IP
    • ip-address2: El formulario de CIDR de la segunda dirección IP
    • ip-address-name2: El nombre de la segunda dirección IP
    • machine-type: El tipo de máquina de la instancia
    • zone: La zona de la instancia

    Método HTTP y URL:

    GET  https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=settings

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

  2. Para actualizar la instancia, incluye todas las direcciones que deseas conservar y descarta las direcciones que quieras quitar:

    Antes de usar cualquiera de los siguientes datos de solicitud, realiza estos reemplazos:

    • project-id: El ID del proyecto
    • instance-id: El ID de la instancia
    • network_range_1: La dirección IP autorizada o el rango de red autorizado que se quitará

    Método HTTP y URL:

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

    Cuerpo JSON de la solicitud:

    {
      "settings":
      {
        "ipConfiguration":
        {
          "authorizedNetworks":
            [{"value": "network_range_1"}]
        }
      }
    }
    
    

    Para enviar tu solicitud, expande una de estas opciones:

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

  3. Confirma tus cambios:

    Antes de usar cualquiera de los siguientes datos de solicitud, realiza estos reemplazos:

    • project-id: El ID del proyecto
    • instance-id: El ID de la instancia
    • ip-address: El formulario de CIDR de la dirección IP
    • ip-address-name: El nombre de la dirección IP
    • machine-type: El tipo de máquina de la instancia
    • zone: La zona de la instancia

    Método HTTP y URL:

    GET  https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=settings

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

Configura una instancia para que rechace todas las conexiones de IP públicas

Para configurar una instancia de forma que rechace todas las conexiones de IP públicas, sigue estos pasos:

Console

  1. Ve a la página Instancias de Cloud SQL en Google Cloud Console.

    Ir a la página Instancias de Cloud SQL

  2. Haz clic en el nombre de la instancia para abrir la página Detalles de la instancia.
  3. Selecciona la pestaña Conexiones.
  4. Haz clic en el ícono de borrar Delete. para todas las direcciones autorizadas.
  5. Haz clic en Guardar para actualizar la instancia.

gcloud

  1. Borra la lista de direcciones autorizadas:
    gcloud sql instances patch [INSTANCE_NAME] --clear-authorized-networks
    
  2. Confirma tus cambios:
    gcloud sql instances describe [INSTANCE_NAME]
    

REST v1beta4

  1. Describe la instancia para que se muestren todas las direcciones autorizadas existentes:

    Antes de usar cualquiera de los siguientes datos de solicitud, realiza estos reemplazos:

    • project-id: El ID del proyecto
    • instance-id: El ID de la instancia
    • ip-address1: El formulario de CIDR de la primera dirección IP
    • ip-address-name1: El nombre de la primera dirección IP
    • ip-address2: El formulario de CIDR de la segunda dirección IP
    • ip-address-name2: El nombre de la segunda dirección IP
    • machine-type: El tipo de máquina de la instancia
    • zone: La zona de la instancia

    Método HTTP y URL:

    GET  https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=settings

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

  2. Actualiza la instancia con una lista de direcciones vacía:

    Antes de usar cualquiera de los siguientes datos de solicitud, realiza estos reemplazos:

    • 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":
      {
        "ipConfiguration":
        {
          "authorizedNetworks": []
        }
      }
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

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

  3. Confirma tus cambios:

    Antes de usar cualquiera de los siguientes datos de solicitud, realiza estos reemplazos:

    • project-id: El ID del proyecto
    • instance-id: El ID de la instancia
    • machine-type: El tipo de máquina de la instancia
    • zone: La zona de la instancia

    Método HTTP y URL:

    GET  https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=settings

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

Inhabilita una IP pública

Puedes inhabilitar la IP pública, pero solo si tu instancia también está configurada para usar IP privadas. Para habilitar la IP privada, consulta cómo configurar una instancia existente para que use una IP privada.

Para inhabilitar una IP pública, sigue estos pasos:

Console

  1. Ve a la página Instancias de Cloud SQL en Google Cloud Console.

    Ir a la página Instancias de Cloud SQL

  2. Haz clic en el nombre de la instancia para abrir la página Detalles de la instancia.
  3. Selecciona la pestaña Conexiones.
  4. Anula la selección de la casilla de verificación IP pública.
  5. Haz clic en Guardar para actualizar la instancia.

gcloud

  1. Actualiza la instancia:
    gcloud sql instances patch [INSTANCE_NAME] --no-assign-ip
    
  2. Confirma los cambios:
    gcloud sql instances describe [INSTANCE_NAME]
    

REST v1beta4

  1. Describe la instancia para que se muestren todas las direcciones autorizadas existentes:

    Antes de usar cualquiera de los siguientes datos de solicitud, realiza estos reemplazos:

    • project-id: El ID del proyecto
    • instance-id: El ID de la instancia
    • ip-address1: El formulario de CIDR de la primera dirección IP
    • ip-address-name1: El nombre de la primera dirección IP
    • ip-address2: El formulario de CIDR de la segunda dirección IP
    • ip-address-name2: El nombre de la segunda dirección IP
    • machine-type: El tipo de máquina de la instancia
    • zone: La zona de la instancia

    Método HTTP y URL:

    GET  https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=settings

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

  2. Actualiza la instancia:

    Antes de usar cualquiera de los siguientes datos de solicitud, realiza estos reemplazos:

    • 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":
      {
        "ipConfiguration": {"ipv4Enabled": false}
      }
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

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

  3. Confirma tus cambios:

    Antes de usar cualquiera de los siguientes datos de solicitud, realiza estos reemplazos:

    • project-id: El ID del proyecto
    • instance-id: El ID de la instancia
    • machine-type: El tipo de máquina de la instancia
    • zone: La zona de la instancia

    Método HTTP y URL:

    GET  https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=settings

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

Soluciona problemas

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

Situación Posible problema Solución
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. La cuenta de servicio de Service Networking no está vinculada a la función servicenetworking.serviceAgent. Vincula la cuenta de servicio de Service Networking a la función servicenetworking.serviceAgent.
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.
No se pueden analizar los certificados en algunos sistemas operativos. Es posible que los clientes que usan bibliotecas x509 de mac OS 11.0 (Big Sur) no puedan analizar algunos certificados de las instancias de sqlserver. Es posible que se muestre al cliente como un error genérico, como “cancelado”. La solución alternativa es rotar el certificado de servidor y volver a crear los certificados de cliente.
Cannot modify allocated ranges in CreateConnection. Please use UpdateConnection. Los intercambios de tráfico de VPC no se actualizaron después de modificar o quitar un rango asignado. Consulta estas alternativas para solucionarlo a fin de obtener información detallada sobre la actualización del intercambio de tráfico de VPC.
Allocated IP range not found in network. Los intercambios de tráfico de VPC no se actualizaron después de modificar o quitar un rango asignado. Consulta estas alternativas para solucionarlo a fin de obtener información detallada sobre la actualización del intercambio de tráfico de VPC.
ERROR: (gcloud.sql.connect) It seems your client does not have ipv6 connectivity and the database instance does not have an ipv4 address. Please request an ipv4 address for this database instance.. Intentas conectarte a tu instancia de IP privada con Cloud Shell. Por el momento, no se admite la conexión desde Cloud Shell a una instancia con solo una dirección IP privada.

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 autenticación 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.


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

La cuenta de servicio de Service Networking no está vinculada a la función servicenetworking.serviceAgent.

Solución

A fin de mitigar este problema, intenta usar estos comandos de gcloud para vincular la cuenta de servicio de Service Networking a la función servicenetworking.serviceAgent.

gcloud beta services identity create --service=servicenetworking.googleapis.com --project=PROJECT_ID
gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:service-PROJECT_NUMBER@service-networking.iam.gserviceaccount.com" --role="roles/servicenetworking.serviceAgent"

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.


No se pueden analizar los certificados en algunos sistemas operativos

Cuando usas bibliotecas x509 de mac OS 11.0 (Big Sur), es posible que no se analicen los certificados de las instancias de sqlserver. Esto puede aparecer como un error genérico, como “cancelado”.

Solución

El error se corrigió y las nuevas instancias no presentarán este problema. En el caso de las instancias antiguas con este problema, rota el certificado de servidor y vuelve a crear los certificados de cliente.


No se pueden modificar los rangos asignados en CreateConnection. Usa UpdateConnection

Verás el mensaje de error Cannot modify allocated ranges in CreateConnection. Please use UpdateConnection o The operation "operations/1234" resulted in a failure "Allocated IP range 'xyz' not found in network.

Posible problema

El primer error se produce cuando intentas establecer una conexión de nuevo con un rango reservado diferente.

El segundo error aparece cuando se modificó el rango asignado, pero vpc-peerings no se actualizó.

Solución

Debes modificar la conexión privada. Usa el siguiente comando y asegúrate de usar el argumento --force:

gcloud services vpc-peerings update --network=VPC_NETWORK --ranges=ALLOCATED_RANGES --service=servicenetworking.googleapis.com --force

¿Qué sigue?