Configurar tanto el acceso privado a servicios como Private Service Connect

En esta página se describe cómo configurar tanto el acceso privado a servicios como Private Service Connect.

Si configuras el acceso a servicios privados, puedes asignar un intervalo de direcciones IP y crear una conexión de servicio privada para la red de nube privada virtual (VPC) de tu proyecto Google Cloud . De esta forma, los recursos de la red de VPC pueden conectarse a tus instancias de Cloud SQL.

Si configuras Private Service Connect, puedes conectarte a una instancia principal de Cloud SQL o a cualquiera de sus réplicas de lectura desde varias redes de VPC que pertenezcan a diferentes grupos, equipos, proyectos u organizaciones.

Crea una instancia que admita el acceso privado a servicios y Private Service Connect

Si creas una instancia de Cloud SQL que admita tanto el acceso a servicios privados como Private Service Connect, podrás disfrutar de las ventajas de ambos servicios. Para obtener más información, consulta Opciones de conexión para instancias.

Con Private Service Connect, puedes conectarte a una instancia de Cloud SQL desde varias redes de VPC que pertenezcan a diferentes grupos, equipos, proyectos u organizaciones.

Puedes crear una instancia de Cloud SQL que admita el acceso a servicios privados y Private Service Connect mediante la CLI de gcloud o la API.

gcloud

Para crear una instancia que admita tanto el acceso a servicios privados como Private Service Connect, usa el comando gcloud beta sql instances create:

gcloud beta sql instances create INSTANCE_NAME \
--project=PROJECT_ID \
--region=REGION_NAME \
--enable-private-service-connect \
--allowed-psc-projects=ALLOWED_PROJECTS \
--availability-type=AVAILABILITY_TYPE \
--no-assign-ip \
--allocated-ip-range-name=RANGE_NAME \
--database-version=DATABASE_VERSION \
--cpu=NUMBER_OF_vCPUs \
--memory=MEMORY_SIZE \
--root-password=ROOT_PASSWORD \
--network=VPC_PSA_NETWORK_PATH \
--psc-auto-connections=network=VPC_PSC_NETWORK_PATH,project=SERVICE_PROJECT

Haz las siguientes sustituciones:

  • INSTANCE_NAME: el nombre de la instancia.
  • PROJECT_ID: el ID o el número de proyecto del Google Cloud proyecto que contiene la instancia.
  • REGION_NAME: el nombre de la región de la instancia.
  • ALLOWED_PROJECTS: lista de IDs o números de proyecto permitidos, separados por comas. Si un proyecto no está en esta lista, no puedes crear puntos finales de Private Service Connect en el proyecto para conectarte a la instancia.

  • AVAILABILITY_TYPE: habilita la alta disponibilidad en la instancia. En este parámetro, especifica uno de los siguientes valores:
    • REGIONAL: habilita la alta disponibilidad y se recomienda para las instancias de producción. La instancia se conmuta por error a otra zona de la región seleccionada.
    • ZONAL: no proporcionan ninguna función de conmutación por error. Este es el valor predeterminado.

    Para obtener más información sobre cómo configurar y quitar la alta disponibilidad de las instancias, consulta los artículos Configurar una instancia para alta disponibilidad y Desactivar la alta disponibilidad de una instancia.

  • RANGE_NAME: en este parámetro opcional, defina un nombre de intervalo para el que se asigna un intervalo de IPs. El nombre del intervalo debe cumplir las reglas de RFC 1035 y tener entre 1 y 63 caracteres.
  • DATABASE_VERSION: la versión de la base de datos de la instancia (por ejemplo, SQLSERVER_2019_STANDARD).
  • NUMBER_OF_vCPUs: el número de núcleos de la instancia.
  • MEMORY_SIZE: la cantidad de memoria de la instancia.
  • ROOT_PASSWORD: la contraseña del usuario de root Cloud SQL.
  • VPC_PSA_NETWORK_PATH: el nombre y la ruta de la red VPC a la que se conecta la instancia (por ejemplo, "projects/PROJECT_ID/global/networks/default"). Esta red se usa para las conexiones de acceso a servicios privados y la dirección IP de acceso a servicios privados de la instancia de Cloud SQL.
  • VPC_PSC_NETWORK_PATH: la ruta a la red de VPC desde la que se debe crear el punto final de Private Service Connect. Por ejemplo:
    projects/my-host-project/global/networks/default.
  • SERVICE_PROJECT: proyecto en el que se crea el endpoint de Private Service Connect. Si la red de VPC no es una VPC compartida, solo puede ser el proyecto del host de la red. Si se trata de una VPC compartida, puede ser el proyecto host o el proyecto de servicio.

Para saber cómo conectarte a una instancia que tiene habilitado Private Service Connect, consulta Conectarse a una instancia de Cloud SQL.

Para desactivar la IP pública, usa el parámetro --no-assign-ip.

Terraform

Para crear una instancia con acceso a servicios privados y Private Service Connect habilitados, usa el google_sql_database_instance recurso de Terraform.


resource "google_compute_network" "peering_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.peering_network.id
}

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

resource "google_sql_database_instance" "default" {
  name             = "sqlserver-instance"
  region           = "us-central1"
  database_version = "SQLSERVER_2019_STANDARD"
  root_password    = "INSERT-PASSWORD-HERE"

  depends_on = [google_service_networking_connection.default]

  settings {
    tier = "db-custom-2-7680"
    ip_configuration {
      psc_config {
        psc_enabled               = true
        allowed_consumer_projects = [] # Add consumer project IDs here.
      }
      ipv4_enabled    = false
      private_network = google_compute_network.peering_network.id
    }
  }
}

resource "google_compute_network_peering_routes_config" "peering_routes" {
  peering              = google_service_networking_connection.default.peering
  network              = google_compute_network.peering_network.name
  import_custom_routes = true
  export_custom_routes = true
}

resource "google_compute_address" "default" {
  name         = "psc-compute-address-${google_sql_database_instance.default.name}"
  region       = "us-central1"
  address_type = "INTERNAL"
  subnetwork   = "default"      # Replace value with the name of the subnet here.
  address      = "192.168.0.44" # Replace value with the IP address to reserve.
}

data "google_sql_database_instance" "default" {
  name = resource.google_sql_database_instance.default.name
}

resource "google_compute_forwarding_rule" "default" {
  name                  = "psc-forwarding-rule-${google_sql_database_instance.default.name}"
  region                = "us-central1"
  network               = "default"
  ip_address            = google_compute_address.default.self_link
  load_balancing_scheme = ""
  target                = data.google_sql_database_instance.default.psc_service_attachment_link
}

Para aplicar la configuración de Terraform en un proyecto, sigue los pasos que se indican en las siguientes secciones. Google Cloud

Preparar Cloud Shell

  1. Abre Cloud Shell.
  2. Define el Google Cloud proyecto Google Cloud predeterminado en el que quieras aplicar tus configuraciones de Terraform.

    Solo tiene que ejecutar este comando una vez por proyecto y puede hacerlo en cualquier directorio.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Las variables de entorno se anulan si defines valores explícitos en el archivo de configuración de Terraform.

Preparar el directorio

Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).

  1. En Cloud Shell, crea un directorio y un archivo nuevo en ese directorio. El nombre del archivo debe tener la extensión .tf. Por ejemplo, main.tf. En este tutorial, nos referiremos al archivo como main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Si estás siguiendo un tutorial, puedes copiar el código de ejemplo de cada sección o paso.

    Copia el código de ejemplo en el archivo main.tf que acabas de crear.

    También puedes copiar el código de GitHub. Se recomienda cuando el fragmento de Terraform forma parte de una solución integral.

  3. Revisa y modifica los parámetros de ejemplo para aplicarlos a tu entorno.
  4. Guarda los cambios.
  5. Inicializa Terraform. Solo tienes que hacerlo una vez por directorio.
    terraform init

    Si quieres usar la versión más reciente del proveedor de Google, incluye la opción -upgrade:

    terraform init -upgrade

Aplica los cambios

  1. Revisa la configuración y comprueba que los recursos que va a crear o actualizar Terraform se ajustan a tus expectativas:
    terraform plan

    Haga las correcciones necesarias en la configuración.

  2. Aplica la configuración de Terraform ejecutando el siguiente comando e introduciendo yes en la petición:
    terraform apply

    Espera hasta que Terraform muestre el mensaje "Apply complete!".

  3. Abre tu Google Cloud proyecto para ver los resultados. En la Google Cloud consola, ve a tus recursos en la interfaz de usuario para asegurarte de que Terraform los ha creado o actualizado.

REST

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: el ID o el número de proyecto del Google Cloud proyecto que contiene la instancia.
  • INSTANCE_NAME: el nombre de la instancia.
  • REGION_NAME: el nombre de la región de la instancia.
  • ROOT_PASSWORD: la contraseña del usuario de root Cloud SQL.
  • AVAILABILITY_TYPE: habilita la alta disponibilidad en la instancia. En este parámetro, especifica uno de los siguientes valores:
    • REGIONAL: habilita la alta disponibilidad y se recomienda para las instancias de producción. La instancia se conmuta por error a otra zona de la región seleccionada.
    • ZONAL: no proporcionan ninguna función de conmutación por error. Este es el valor predeterminado.

    Para obtener más información sobre cómo configurar y quitar la alta disponibilidad de las instancias, consulta los artículos Configurar una instancia para alta disponibilidad y Desactivar la alta disponibilidad de una instancia.

  • VPC_PSA_NETWORK_PATH: la ruta de la red VPC a la que se conecta la instancia (por ejemplo, "projects/PROJECT_ID/global/networks/default"). Esta red se usa para las conexiones de acceso a servicios privados y la dirección IP de acceso a servicios privados de la instancia de Cloud SQL.
  • RANGE_NAME: en este parámetro opcional, defina un nombre de intervalo para el que se asigna un intervalo de IPs. El nombre del intervalo debe cumplir las reglas de RFC 1035 y tener entre 1 y 63 caracteres.
  • ALLOWED_PROJECTS: lista de IDs o números de proyecto permitidos, separados por comas. Si un proyecto no está en esta lista, no puedes crear puntos finales de Private Service Connect en el proyecto para conectarte a la instancia.

  • VPC_PSC_NETWORK_PATH: la ruta a la red de VPC desde la que se debe crear el punto final de Private Service Connect. Por ejemplo:
    projects/my-host-project/global/networks/default.
  • SERVICE_PROJECT: proyecto en el que se crea el endpoint de Private Service Connect. Si la red de VPC no es una VPC compartida, solo puede ser el proyecto del host de la red. Si se trata de una VPC compartida, puede ser el proyecto host o el proyecto de servicio.

  • MACHINE_TYPE: valor de cadena enumerado que representa el tipo de máquina de la instancia. Por ejemplo: db-custom-NUMBER_OF_vCPUs-MEMORY_SIZE, donde NUMBER_OF_vCPUs y MEMORY_SIZE son el número de núcleos y la cantidad de memoria que quieres que tenga la instancia.

Para saber cómo conectarte a una instancia que tiene habilitado Private Service Connect, consulta Conectarse a una instancia de Cloud SQL.

Has definido el parámetro ipv4Enabled como false porque tu instancia tiene una dirección IP interna.

Método HTTP y URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances

Cuerpo JSON de la solicitud:

{
  "name": "INSTANCE_NAME",
  "project": PROJECT_ID",
  "region": "REGION_NAME",
  "databaseVersion": "SQLSERVER_2019_STANDARD",
  "rootPassword": "ROOT_PASSWORD",
  "kind": "sql#instance",
  "settings": {
    "availabilityType": "AVAILABILITY_TYPE",
    "ipConfiguration": {
      "ipv4Enabled": false,
      "privateNetwork": VPC_PSA_NETWORK_PATH,
      "allocatedIpRange": "RANGE_NAME",
      "pscConfig": {
        "allowedConsumerProjects": [
          "ALLOWED_PROJECTS"
        ],
        "pscAutoConnections": [
          {
            "consumerProject":"SERVICE_PROJECT",
            "consumerNetwork":"projects/SERVICE_PROJECT/global/networks/VPC_PSC_NETWORK_PATH"
          }
        ],
        "pscEnabled": true
      }
    },
    "kind": "sql#settings",
    "pricingPlan": "PER_USE",
    "replicationType": "SYNCHRONOUS",
    "tier": "MACHINE_TYPE"
  }
}

Para enviar tu solicitud, despliega una de estas opciones:

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME",
  "status": "RUNNING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "startTime": "2023-06-14T18:48:35.499Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

Desactivar Private Service Connect en una instancia

Puedes desactivar Private Service Connect en una instancia que tenga habilitados tanto el acceso a servicios privados como Private Service Connect.

Cuando desactives Private Service Connect en la instancia, esta operación tardará 8 minutos y tu instancia estará inactiva durante unos 45 segundos. Una vez completada la operación, las rutas de acceso a servicios privados y de conectividad de Private Service Connect ya no coexistirán en la misma instancia. No puedes conectarte a la instancia mediante Private Service Connect.

Para desactivar Private Service Connect en una instancia, puedes usar la CLI de gcloud o la API.

gcloud

Para desactivar Private Service Connect en una instancia, usa el comando gcloud beta sql instances patch:

gcloud beta sql instances patch INSTANCE_NAME \
--project=PROJECT_ID \
--no-enable-private-service-connect \
--clear-allowed-psc-projects

Haz las siguientes sustituciones:

  • INSTANCE_NAME: el nombre de la instancia
  • PROJECT_ID: el ID o el número de proyecto del Google Cloud proyecto que contiene la instancia

Terraform

Para desactivar Private Service Connect en una instancia, usa el google_sql_database_instance recurso de Terraform.

resource "google_sql_database_instance" "disable_psc_example" {
  name             = "sqlserver-disable-psc-example"
  region           = "us-central1"
  database_version = "SQLSERVER_2019_STANDARD"
  root_password    = "INSERT-PASSWORD-HERE"

  depends_on = [google_service_networking_connection.default]

  settings {
    tier = "db-custom-2-7680"
    ip_configuration {
      psc_config {
        psc_enabled               = false
        allowed_consumer_projects = [] # clear consumer projects
      }
      ipv4_enabled    = false
      private_network = google_compute_network.peering_network.id
    }
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

REST

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: el ID o el número de proyecto del Google Cloud proyecto que contiene la instancia
  • INSTANCE_NAME: el nombre de la instancia

Método HTTP y URL:

PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME

Cuerpo JSON de la solicitud:

{
  "kind": "sql#instance",
  "name": "INSTANCE_NAME",
  "project": "PROJECT_ID",
  "settings": {
    "ipConfiguration": {
      "pscConfig": {
        "pscEnabled": "false",
        "allowedConsumerProjects": [{}]
      }
    },
    "kind": "sql#settings"
  }
}

Para enviar tu solicitud, despliega una de estas opciones:

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME",
  "status": "RUNNING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "startTime": "2023-06-14T18:48:35.499Z",
  "operationType": "UPDATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

Habilitar Private Service Connect en una instancia

Puedes habilitar Private Service Connect en una instancia que ya tenga habilitado el acceso a servicios privados. Puedes usar Private Service Connect para conectarte a una instancia de Cloud SQL desde varias redes VPC.

Cuando habilites Private Service Connect en la instancia, esta operación tardará 8 minutos y la instancia tendrá un tiempo de inactividad de unos 45 segundos. Una vez completada la operación, las rutas de acceso a servicios privados y de conectividad de Private Service Connect coexistirán en la misma instancia.

Puedes habilitar Private Service Connect en una instancia mediante la CLI de gcloud o la API.

gcloud

Para habilitar Private Service Connect en una instancia, usa el comando gcloud beta sql instances patch:

gcloud beta sql instances patch INSTANCE_NAME \
--project=PROJECT_ID \
--enable-private-service-connect \
--allowed-psc-projects=ALLOWED_PROJECTS \
--psc-auto-connections=network=VPC_PSC_NETWORK_PATH,project=SERVICE_PROJECT

Haz las siguientes sustituciones:

  • INSTANCE_NAME: el nombre de la instancia
  • PROJECT_ID: el ID o el número de proyecto del Google Cloud proyecto que contiene la instancia
  • ALLOWED_PROJECTS: lista de IDs o números de proyecto permitidos, separados por comas. Si un proyecto no está en esta lista, no puedes crear puntos finales de Private Service Connect en el proyecto para conectarte a la instancia.

  • VPC_PSC_NETWORK_PATH: la ruta a la red de VPC desde la que se crea el endpoint de Private Service Connect. Por ejemplo:
    projects/my-host-project/global/networks/default.
  • SERVICE_PROJECT: proyecto en el que se crea el endpoint de Private Service Connect. Si la red de VPC no es una VPC compartida, solo puede ser el proyecto del host de la red. Si se trata de una VPC compartida, puede ser el proyecto host o el proyecto de servicio.

Para saber cómo conectarte a una instancia que tiene habilitado Private Service Connect, consulta Conectarse a una instancia de Cloud SQL.

Terraform

Para habilitar Private Service Connect en una instancia, usa el google_sql_database_instance recurso de Terraform.

resource "google_sql_database_instance" "default" {
  name             = "sqlserver-instance"
  region           = "us-central1"
  database_version = "SQLSERVER_2019_STANDARD"
  root_password    = "INSERT-PASSWORD-HERE"

  depends_on = [google_service_networking_connection.default]

  settings {
    tier = "db-custom-2-7680"
    ip_configuration {
      psc_config {
        psc_enabled               = true
        allowed_consumer_projects = [] # Add consumer project IDs here.
      }
      ipv4_enabled    = false
      private_network = google_compute_network.peering_network.id
    }
  }
}

REST

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: el ID o el número de proyecto del Google Cloud proyecto que contiene la instancia.
  • INSTANCE_NAME: el nombre de la instancia.
  • ALLOWED_PROJECTS: lista de IDs o números de proyecto permitidos, separados por comas. Estos proyectos anulan los que ya estén configurados para usar Private Service Connect. Si un proyecto no está en esta lista, no puedes crear puntos finales de Private Service Connect en el proyecto para conectarte a la instancia.
  • VPC_PSC_NETWORK_PATH: la ruta a la red de VPC desde la que se crea el endpoint de Private Service Connect. Por ejemplo:
    projects/my-host-project/global/networks/default.
  • SERVICE_PROJECT: proyecto en el que se crea el endpoint de Private Service Connect. Si la red de VPC no es una VPC compartida, solo puede ser el proyecto del host de la red. Si se trata de una VPC compartida, puede ser el proyecto host o el proyecto de servicio.

Método HTTP y URL:

PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME

Cuerpo JSON de la solicitud:

{
  "kind": "sql#instance",
  "name": "INSTANCE_NAME",
  "project": "PROJECT_ID",
  "settings": {
    "ipConfiguration": {
      "pscConfig": {
        "pscAutoConnections": [
          {
            "consumerProject":"SERVICE_PROJECT",
            "consumerNetwork":"projects/SERVICE_PROJECT/global/networks/VPC_PSC_NETWORK_PATH"
          }
        ],
        "pscEnabled": "true",
        "allowedConsumerProjects": [ALLOWED_PROJECTS]
      }
    },
    "kind": "sql#settings"
  }
}

Para enviar tu solicitud, despliega una de estas opciones:

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME",
  "status": "RUNNING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "startTime": "2023-06-14T18:48:35.499Z",
  "operationType": "UPDATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

Para saber cómo conectarte a una instancia que tiene habilitado Private Service Connect, consulta Conectarse a una instancia de Cloud SQL.