Configurar IP privadas

En esta página, se describe cómo configurar una instancia de Cloud SQL para usar una IP privada.

Para obtener más información sobre cómo funcionan las IP privadas, así como los requisitos de administración y del entorno, consulta IP privada.

Antes de comenzar

Requisitos de API y de IAM

  • Debes habilitar la API de Service Networking para tu proyecto.
  • Si usas una red de VPC compartida, también debes habilitar esta API para el proyecto host.

  • Para administrar una conexión de acceso a servicios privados, el usuario debe tener los siguientes permisos de IAM. Si no cuentas con los permisos necesarios, puedes recibir errores de permisos insuficientes.
    • compute.networks.list
    • compute.addresses.create
    • compute.addresses.list
    • servicenetworking.services.addPeering

    Si usas una red de VPC compartida, también debes agregar el usuario al proyecto host y asignarle los mismos permisos al usuario en el proyecto host.

Acceso privado a servicios

Cuando creas una nueva red de VPC en el proyecto, debes configurar el acceso privado a los servicios para asignar un rango de direcciones IP y crear una conexión privada a los servicios. Esto permite que los recursos en la red de VPC se conecten a instancias de Cloud SQL. La consola proporciona un asistente para ayudarte a establecer esta configuración.

Configura una instancia para que use una IP privada

Puedes configurar el uso de IP privada cuando creas una instancia de Cloud SQL o para una instancia ya existente.

Configura una IP privada en una instancia nueva

Si quieres configurar una instancia de Cloud SQL para usar una IP privada en el momento de su creación, realiza los siguientes pasos:

Console

  1. En Google Cloud Console, ve a la página Instancias de Cloud SQL.

    Ir a Instancias de Cloud SQL

  2. Haga clic en Crear instancia.
  3. Expanda Mostrar opciones de configuración.
  4. Expande Conexiones.
  5. Seleccione IP privada.

    En una lista desplegable, se muestran las redes de VPC disponibles en tu proyecto. Si tu proyecto es el proyecto de servicio de una VPC compartida, también se muestran las redes de VPC del proyecto host.

  6. Selecciona la red de VPC que deseas usar.
  7. Si ves un mensaje que indica que necesitas configurar una conexión privada a servicios, haz lo siguiente:

    1. Haz clic en Configurar conexión.
    2. En la sección Asignar un rango de IP, elige una de las siguientes opciones:
      • Selecciona uno o más rangos de IP existentes o crea uno nuevo desde el menú desplegable. El menú desplegable incluye los rangos asignados previamente, si hay alguno, o puedes seleccionar Asignar un rango de IP nuevo e ingresar un rango y un nombre nuevos.
      • Usa un rango de IP asignado automáticamente en tu red.
    3. Haz clic en Continuar.
    4. Haz clic en Crear conexión (Create connection).
    5. Verifica que ves el mensaje: Private service connection for network VPN_NAME has been successfully created.
  8. De manera opcional, puedes especificar un rango de IP asignado para que tus instancias las usen en las conexiones.
    1. Expande la opción Mostrar la opción de rango de IP asignado.
    2. Selecciona un rango de IP en el menú desplegable.
  9. Termina de configurar tu instancia.
  10. Haga clic en Crear instancia.

gcloud

Asegúrate de que tu proyecto esté configurado para el acceso privado a servicios.

Crea tu instancia de Cloud SQL con el parámetro --network para especificar el nombre de la red de VPC elegida y la marca --no-assign-ip a fin de inhabilitar la IP pública.

El valor del parámetro --network tiene el siguiente formato: projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME. El PROJECT_ID es el ID del proyecto de la red de VPC. Si la red de VPC es una VPC compartida, debe ser el ID del proyecto host de la VPC compartida.

De forma opcional, especifica el nombre de un rango de direcciones privado con el parámetro --allocated-ip-range-name. Si se especifica, establece un nombre de rango asignado y se crea un rango de direcciones privado para la instancia principal. Por ejemplo, google-managed-services-default El nombre del rango debe cumplir con RFC-1035 y tener entre 1 y 63 caracteres. (gcloud alpha sql instances create).

Si la red de VPC es una VPC compartida, en el siguiente comando de gcloud, PROJECT_ID debe ser el ID del proyecto de servicio de la VPC compartida.

gcloud beta sql instances create INSTANCE_ID \
--project=PROJECT_ID \
--network=projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME \
--no-assign-ip \
--allocated-ip-range-name=RANGE_NAME

Terraform

A fin de configurar la IP privada para una instancia nueva, usa los siguientes recursos de Terraform:


resource "google_compute_network" "private_network" {
  name                    = "private-network"
  auto_create_subnetworks = "false"
}

resource "google_compute_global_address" "private_ip_address" {
  name          = "private-ip-address"
  purpose       = "VPC_PEERING"
  address_type  = "INTERNAL"
  prefix_length = 16
  network       = google_compute_network.private_network.id
}

resource "google_service_networking_connection" "private_vpc_connection" {
  network                 = google_compute_network.private_network.id
  service                 = "servicenetworking.googleapis.com"
  reserved_peering_ranges = [google_compute_global_address.private_ip_address.name]
}

resource "google_sql_database_instance" "default" {
  name             = "private-ip-sql-instance"
  region           = "us-central1"
  database_version = "POSTGRES_14"

  depends_on = [google_service_networking_connection.private_vpc_connection]

  settings {
    tier = "db-custom-2-7680"
    ip_configuration {
      ipv4_enabled    = "false"
      private_network = google_compute_network.private_network.id
    }
  }
  deletion_protection = "false"
}

Aplique los cambios

Para aplicar tu configuración de Terraform en un proyecto de Google Cloud, completa los siguientes pasos:

  1. Iniciar Cloud Shell
  2. Establece el proyecto de Google Cloud en el que deseas aplicar la configuración de Terraform:
        export GOOGLE_CLOUD_PROJECT=PROJECT_ID
        
  3. Crea un directorio y abre un archivo nuevo en ese directorio. El nombre del archivo debe tener la extensión .tf, por ejemplo main.tf:
        mkdir DIRECTORY && cd DIRECTORY && nano main.tf
        
  4. Copia la muestra en main.tf.
  5. Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
  6. Para guardar los cambios, presiona Ctrl-x y, luego, y.
  7. Inicializa Terraform mediante este comando:
    terraform init
  8. Revisa la configuración y verifica que los recursos que creará o actualizará Terraform coincidan con tus expectativas:
    terraform plan

    Realiza correcciones en la configuración según sea necesario.

  9. Para aplicar la configuración de Terraform, ejecuta el siguiente comando y, luego, ingresa yes cuando se te solicite:
    terraform apply

    Espera hasta que Terraform muestre el mensaje “Apply complete!”.

  10. Abre tu proyecto de Google Cloud para ver los resultados. En la consola de Google Cloud, navega a tus recursos en la IU para asegurarte de que Terraform los haya creado o actualizado.

Borra los cambios

Para borrar tus cambios, haz lo siguiente:

  1. Para inhabilitar la protección contra la eliminación, en tu archivo de configuración de Terraform, establece el argumento deletion_protection en false.
    deletion_protection =  "false"
  2. Para aplicar la configuración actualizada de Terraform, ejecuta el siguiente comando y, luego, ingresa yes cuando se te solicite:
    terraform apply
  1. Quita los recursos que se aplicaron antes con tu configuración de Terraform mediante la ejecución del siguiente comando y, luego, ingresa yes cuando se te solicite:

    terraform destroy

REST v1

Crea una instancia nueva con una dirección IP privada:

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • project-id: El ID del proyecto
  • instance-id: El ID de la instancia
  • vpc-name: El nombre de la red de VPC que deseas usar para la instancia.
  • allocated-ip-range: Opcional Si se especifica, establece un nombre de rango para el que se asigna un rango de IP. El nombre del rango debe cumplir con RFC-1035 y tener entre 1 y 63 caracteres.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
  "name": "instance-id",
  "region": "region",
  "databaseVersion": "database-version",
  "settings": {
    "tier": "machine-type",
    "ipConfiguration": {
      "ipv4Enabled": false,
      "privateNetwork": "projects/project-id/global/networks/vpc-name",
      "allocatedIpRange": "allocated-ip-range"
    }
  }
}

Para enviar tu solicitud, expande una de estas opciones:

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

REST v1beta4

Crea una instancia nueva con una dirección IP privada:

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • project-id: El ID del proyecto
  • instance-id: El ID de la instancia
  • vpc-name: El nombre de la red de VPC que deseas usar para la instancia.
  • allocated-ip-range: Opcional Si se especifica, establece un nombre de rango para el que se asigna un rango de IP. El nombre del rango debe cumplir con RFC-1035 y tener entre 1 y 63 caracteres.

Método HTTP y URL:

POST https://sqladmin.googleapis.com/v1beta4/projects/project-id/instances

Cuerpo JSON de la solicitud:

{
  "name": "instance-id",
  "region": "region",
  "databaseVersion": "database-version",
  "settings": {
    "tier": "machine-type",
    "ipConfiguration": {
      "ipv4Enabled": false,
      "privateNetwork": "projects/project-id/global/networks/vpc-name",
      "allocatedIpRange": "allocated-ip-range"
    }
  }
}

Para enviar tu solicitud, expande una de estas opciones:

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

Configura una IP privada en una instancia existente

Configurar una instancia de Cloud SQL existente para que use una IP privada hace que la instancia se reinicie, lo que causa un tiempo de inactividad.

A fin de configurar una instancia existente para que use una IP privada, sigue estos pasos:

Console

  1. En Google Cloud Console, ve a la página Instancias de Cloud SQL.

    Ir a Instancias de Cloud SQL

  2. Para abrir la página de Descripción general de una instancia, haz clic en su nombre.
  3. Selecciona Conexiones en el menú de navegación de SQL.
  4. Selecciona la casilla de verificación IP privada.

    En una lista desplegable, se muestran las redes disponibles en tu proyecto.

  5. Selecciona la red de VPC que deseas usar:
  6. Si ves Se requiere conexión privada a servicio:

    1. Haz clic en Configurar conexión.
    2. En la sección Asignar un rango de IP, elige una de las siguientes opciones:
      • Selecciona uno o más rangos de IP existentes o crea uno nuevo desde el menú desplegable. El menú desplegable incluye los rangos asignados previamente, si hay alguno, o puedes seleccionar Asignar un rango de IP nuevo e ingresar un rango y un nombre nuevos.
      • Usa un rango de IP asignado automáticamente en tu red.
    3. Haz clic en Continuar.
    4. Haz clic en Crear conexión (Create connection).
    5. Verifica que veas el estado Se creó correctamente la conexión privada a servicio para la red VPC_NETWORK_NAME.
  7. Haz clic en Guardar.

gcloud

Asegúrate de que tu proyecto esté configurado para el acceso privado a servicios.

Actualiza tu instancia de Cloud SQL con el parámetro --network para especificar el nombre de la red de VPC seleccionada.

gcloud beta sql instances patch INSTANCE_ID \
--project=PROJECT_ID \
--network=projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME \
--no-assign-ip

REST v1

Crea una instancia nueva con una dirección IP privada:

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • project-id: El ID del proyecto
  • instance-id: El ID de la instancia
  • vpc-name: El nombre de la red de VPC que deseas usar para la instancia.
  • allocated-ip-range: Opcional Si se especifica, establece un nombre de rango para el que se asigna un rango de IP. El nombre del rango debe cumplir con RFC-1035 y tener entre 1 y 63 caracteres.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
  "settings":
  {
    "ipConfiguration": {
      "ipv4Enabled": false,
      "privateNetwork": "vpc-name",
      "allocatedIpRange": "allocated-ip-range"
    }
  }
}

Para enviar tu solicitud, expande una de estas opciones:

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

REST v1beta4

Crea una instancia nueva con una dirección IP privada:

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • project-id: El ID del proyecto
  • instance-id: El ID de la instancia
  • vpc-name: El nombre de la red de VPC que deseas usar para la instancia.
  • allocated-ip-range: Opcional Si se especifica, establece un nombre de rango para el que se asigna un rango de IP. El nombre del rango debe cumplir con RFC-1035 y tener entre 1 y 63 caracteres.

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,
      "privateNetwork": "vpc-name",
      "allocatedIpRange": "allocated-ip-range"
    }
  }
}

Para enviar tu solicitud, expande una de estas opciones:

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

Conéctate a una instancia mediante su IP privada

Debes usar el acceso privado a servicios para conectarte a instancias de Cloud SQL desde instancias de Compute Engine o Google Kubernetes Engine en la misma red de VPC (definidas aquí como fuentes internas) o fuera de esa red (con una fuente externa).

Conéctate desde una fuente interna

Si deseas conectarte desde una fuente en el mismo proyecto de Google Cloud que tu instancia de Cloud SQL, como el proxy de autenticación de Cloud SQL que se ejecuta en un recurso de Compute Engine, ese recurso debe estar en la misma red de VPC en el que se estableció el acceso privado a servicios para la instancia de Cloud SQL.

Para conectarse desde una fuente sin servidor, como el Entorno estándar de App Engine, Cloud Run o Cloud Functions, la aplicación o función se conecta directamente a la instancia a través Acceso a VPC sin servidores sin el proxy de Cloud SQL Auth.

Conéctate desde una fuente externa

Puedes conectarte desde un cliente en una red externa (red local o red de VPC) si la red externa está conectada a la red de VPC a la que está conectada tu instancia de Cloud SQL. Para permitir conexiones desde una red externa, haz lo siguiente:

  1. Asegúrate de que tu red de VPC esté conectada a la red externa mediante un túnel de Cloud VPN o un adjunto de VLAN para la interconexión dedicada o la interconexión de socio.
  2. Asegúrate de que las sesiones de BGP en los Cloud Routers que administran los túneles de Cloud VPN y los adjuntos de Cloud Interconnect (VLAN) hayan recibido prefijos específicos (destinos) de tu red local.

    Las rutas predeterminadas (destino 0.0.0.0/0) no se pueden importar a la red de VPC de Cloud SQL porque esa red tiene su propia ruta predeterminada local. Siempre se usan las rutas locales para un destino, aunque el intercambio de tráfico de Cloud SQL esté configurado para importar rutas personalizadas desde tu red de VPC.

  3. Identifica las conexiones de intercambio de tráfico que produce la conexión privada a los servicios. Según el servicio, la conexión privada a servicios puede crear una o más de las siguientes conexiones de intercambio de tráfico, pero no necesariamente todas:
    • cloudsql-mysql-googleapis-com
    • cloudsql-postgres-googleapis-com
    • servicenetworking-googleapis-com
  4. Actualiza todas las conexiones de intercambio de tráfico para habilitar la exportación de rutas personalizadas.
  5. Identifica el rango asignado que usa la conexión de servicios privados.
  6. Crea un anuncio de ruta personalizado de Cloud Router para el rango asignado en los Cloud Routers que administran sesiones de BGP para los túneles de Cloud VPN o los adjuntos de Cloud Interconnect (VLAN).

Conectarse desde Cloud Shell

En la actualidad, Cloud Shell no es compatible con la conexión a una instancia de Cloud SQL que solo tiene una dirección IP privada.

Conéctate desde direcciones que no sean RFC 1918

RFC 1918 especifica las direcciones IP que se asignan para usar de manera interna (es decir, dentro de una organización) y que no se enrutarán en Internet. En concreto, las siguientes:

  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16

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 (direcciones que no están dentro del espacio de direcciones RFC 1918) deben configurarse como redes autorizadas.

Para conectarte desde una dirección que no sea RFC 1918, debes configurar la autorización de IP por instancia a fin de permitir el tráfico de rangos de direcciones que no sean RFC 1918.

Por ejemplo, usa un comando de gcloud como el siguiente:

gcloud sql instances patch INSTANCE_NAME \
--authorized-networks=192.88.99.0/24,11.0.0.0/24

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.

gcloud compute networks peerings update cloudsql-postgres-googleapis-com \
--network=NETWORK \
--export-subnet-routes-with-public-ip \
--project=PROJECT_ID
  • cloudsql-postgres-googleapis-com es un nombre de conexión privada a servicio de tu página de red de VPC.

    Selecciona tu red y busca la sección Conexión privada a servicio.

  • NETWORK es el nombre de tu red de VPC.
  • PROJECT_ID es el ID del proyecto de la red de VPC. Usa el ID del proyecto host si usas una VPC compartida.

Solucionar problemas

Consulta la solución de problemas a fin de obtener más información sobre problemas conocidos de conectividad y la depuración de problemas de conexión para obtener ayuda con los diagnósticos automáticos.

¿Qué sigue?