Configurar o acesso a serviços particulares e o Private Service Connect

Esta página descreve como configurar o Acesso privado a serviços e o Private Service Connect.

Ao configurar o acesso a serviços particulares, você pode alocar um intervalo de endereços IP e criar uma conexão de serviço particular para a rede de nuvem privada virtual (VPC) no seu projeto do Google Cloud. Isso permite que os recursos na rede VPC se conectem às suas instâncias do Cloud SQL.

Ao configurar o Private Service Connect, você pode se conectar a uma instância primária do Cloud SQL ou a qualquer uma das réplicas de leitura de várias redes VPC que pertencem a diferentes grupos, equipes, projetos ou organizações.

Criar uma instância compatível com o acesso a serviços privados e o Private Service Connect

Ao criar uma instância do Cloud SQL com suporte ao acesso a serviços privados e ao Private Service Connect, você aproveita os benefícios de ambos os serviços. Para mais informações, consulte Opções de conexão para instâncias.

Com o Private Service Connect, você pode se conectar a uma instância do Cloud SQL de várias redes VPC que pertencem a diferentes grupos, equipes, projetos ou organizações.

É possível criar uma instância do Cloud SQL com suporte para o Acesso a serviços privados e o Private Service Connect usando a gcloud CLI ou a API.

gcloud

Para criar uma instância compatível com o acesso a serviços particulares e o Private Service Connect, use o 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 \
--enable-google-private-path \
--tier=MACHINE_TYPE \
--database-version=DATABASE_VERSION \
--network=VPC_PSA_NETWORK_PATH \
--enable-bin-log \
--psc-auto-connections=network=VPC_PSC_NETWORK_PATH,project=SERVICE_PROJECT

Faça as seguintes substituições:

  • INSTANCE_NAME: o nome da instância.
  • PROJECT_ID: o ID ou número do projeto do Google Cloud que contém a instância.
  • REGION_NAME: o nome da região da instância.
  • ALLOWED_PROJECTS: uma lista de IDs ou números de projetos permitidos, separados por vírgulas. Se um projeto não estiver na lista, não será possível criar endpoints do Private Service Connect no projeto para se conectar à instância.

  • AVAILABILITY_TYPE: ativar a alta disponibilidade para a promovida. Para esse parâmetro, especifique um dos seguintes valores:
    • REGIONAL: ativa a alta disponibilidade e é recomendado para instâncias de produção. A instância faz o failover para outra zona na sua região selecionada.
    • ZONAL: não fornece capacidade de failover. Esse é o valor padrão.

    Para mais informações sobre como configurar e remover a alta disponibilidade de instâncias, consulte Configurar uma instância para alta disponibilidade e Desativar a alta disponibilidade de uma instância.

  • RANGE_NAME: para esse parâmetro opcional, defina um nome de intervalo para o qual um intervalo de IP é alocado. O nome do intervalo precisa obedecer a RFC 1035 e conter de 1 a 63 caracteres.
  • MACHINE_TYPE: o tipo de máquina da instância.
  • DATABASE_VERSION: a versão do banco de dados para a instância (por exemplo, MYSQL_8_0).
  • VPC_PSA_NETWORK_PATH: o nome e o caminho da rede VPC à qual a instância se conecta (por exemplo, "projects/PROJECT_ID/global/networks/default"). Essa rede é usada para conexões de acesso a serviços particulares e o endereço IP de acesso a serviços particulares para a instância do Cloud SQL.
  • VPC_PSC_NETWORK_PATH: o caminho para a rede VPC em que o endpoint do Private Service Connect precisa ser criado. Examplo:
    projects/my-host-project/global/networks/default.
  • SERVICE_PROJECT: o projeto em que o endpoint do Private Service Connect é criado. Se a rede VPC não for compartilhada, esse projeto só poderá ser o host da rede. Se for uma VPC compartilhada, ela pode ser o projeto host ou de serviço.

Para saber como se conectar a uma instância com o Private Service Connect ativado, consulte Conectar-se a uma instância do Cloud SQL.

Para desativar o IP público, use o parâmetro --no-assign-ip.

Como opção, use o parâmetro --enable-google-private-path para permitir que outros serviços Google Cloud , como o BigQuery, acessem dados no Cloud SQL e façam consultas nesses dados em uma conexão IP particular. Esse parâmetro só será válido se:

  • Use o parâmetro --no-assign-ip.
  • Use o parâmetro --network para especificar o nome da rede VPC que você quer usar para criar uma conexão particular.

Terraform

Para criar uma instância com o acesso a serviços particulares e o Private Service Connect ativado, use o recurso do Terraform google_sql_database_instance.


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             = "mysql-instance"
  region           = "us-central1"
  database_version = "MYSQL_8_0"

  depends_on = [google_service_networking_connection.default]

  settings {
    tier = "db-f1-micro"
    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
    }
  }
  # 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
}

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.43" # 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 a configuração do Terraform em um projeto do Google Cloud, conclua as etapas nas seções a seguir.

Preparar o Cloud Shell

  1. Inicie o Cloud Shell.
  2. Defina o projeto padrão do Google Cloud em que você quer aplicar as configurações do Terraform.

    Você só precisa executar esse comando uma vez por projeto, e ele pode ser executado em qualquer diretório.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    As variáveis de ambiente serão substituídas se você definir valores explícitos no arquivo de configuração do Terraform.

Preparar o diretório

Cada arquivo de configuração do Terraform precisa ter o próprio diretório, também chamado de módulo raiz.

  1. No Cloud Shell, crie um diretório e um novo arquivo dentro dele. O nome do arquivo precisa ter a extensão .tf, por exemplo, main.tf. Neste tutorial, o arquivo é chamado de main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Se você estiver seguindo um tutorial, poderá copiar o exemplo de código em cada seção ou etapa.

    Copie o exemplo de código no main.tf recém-criado.

    Se preferir, copie o código do GitHub. Isso é recomendado quando o snippet do Terraform faz parte de uma solução de ponta a ponta.

  3. Revise e modifique os parâmetros de amostra para aplicar ao seu ambiente.
  4. Salve as alterações.
  5. Inicialize o Terraform. Você só precisa fazer isso uma vez por diretório.
    terraform init

    Opcionalmente, para usar a versão mais recente do provedor do Google, inclua a opção -upgrade:

    terraform init -upgrade

Aplique as alterações

  1. Revise a configuração e verifique se os recursos que o Terraform vai criar ou atualizar correspondem às suas expectativas:
    terraform plan

    Faça as correções necessárias na configuração.

  2. Para aplicar a configuração do Terraform, execute o comando a seguir e digite yes no prompt:
    terraform apply

    Aguarde até que o Terraform exiba a mensagem "Apply complete!".

  3. Abra seu projeto do Google Cloud para ver os resultados. No console do Google Cloud, navegue até seus recursos na IU para verificar se foram criados ou atualizados pelo Terraform.

REST

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID ou número do projeto do Google Cloud que contém a instância.
  • INSTANCE_NAME: o nome da instância.
  • REGION_NAME: o nome da região da instância.
  • AVAILABILITY_TYPE: ativa a alta disponibilidade para a promovida. Para esse parâmetro, especifique um dos seguintes valores:
    • REGIONAL: ativa a alta disponibilidade e é recomendado para instâncias de produção. A instância faz o failover para outra zona na sua região selecionada.
    • ZONAL: não fornece capacidade de failover. Esse é o valor padrão.

    Para mais informações sobre como configurar e remover a alta disponibilidade de instâncias, consulte Configurar uma instância para alta disponibilidade e Desativar a alta disponibilidade de uma instância.

  • VPC_PSA_NETWORK_PATH: o caminho da rede VPC a que a instância se conecta (por exemplo, "projects/PROJECT_ID/global/networks/default"). Essa rede é usada para conexões de acesso a serviços particulares e o endereço IP de acesso a serviços particulares para a instância do Cloud SQL.
  • RANGE_NAME: para esse parâmetro opcional, defina um nome de intervalo para o qual um intervalo de IP é alocado. O nome do intervalo precisa obedecer a RFC 1035 e conter de 1 a 63 caracteres.
  • ALLOWED_PROJECTS: uma lista de IDs ou números de projetos permitidos, separados por vírgulas. Se um projeto não estiver na lista, não será possível criar endpoints do Private Service Connect no projeto para se conectar à instância.

  • VPC_PSC_NETWORK_PATH: o caminho para a rede VPC em que o endpoint do Private Service Connect precisa ser criado. Examplo:
    projects/my-host-project/global/networks/default.
  • SERVICE_PROJECT: o projeto em que o endpoint do Private Service Connect é criado. Se a rede VPC não for compartilhada, esse projeto só poderá ser o host da rede. Se for uma VPC compartilhada, ela pode ser o projeto host ou de serviço.

  • MACHINE_TYPE: o tipo de máquina da instância.

Para saber como se conectar a uma instância com o Private Service Connect ativado, consulte Conectar-se a uma instância do Cloud SQL.

Você definiu o parâmetro ipv4Enabled como false porque a instância tem um endereço IP interno.

Se você definir o parâmetro opcional enablePrivatePathForGoogleCloudServices como true, permitirá que outros serviços Google Cloud , como o BigQuery, acessem dados no Cloud SQL e façam consultas nesses dados em uma conexão IP interna. Ao definir esse parâmetro como false, outros serviços Google Cloud não podem acessar dados no Cloud SQL por uma conexão de IP interna.

Método HTTP e URL:

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

Corpo JSON da solicitação:

{
  "name": "INSTANCE_NAME",
  "project": PROJECT_ID",
  "region": "REGION_NAME",
  "databaseVersion": "MYSQL_8_0",
  "kind": "sql#instance",
  "settings": {
    "availabilityType": "AVAILABILITY_TYPE",
    "backupConfiguration": {
      "binaryLogEnabled": true,
      "enabled": true,
      "kind": "sql#backupConfiguration",
      "startTime": "00:00"
    },
    "ipConfiguration": {
      "ipv4Enabled": false,
      "privateNetwork": VPC_PSA_NETWORK_PATH,
      "allocatedIpRange": "RANGE_NAME",
      "enablePrivatePathForGoogleCloudServices": true,
      "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 a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "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"
}

Desativar o Private Service Connect para uma instância

É possível desativar o Private Service Connect em uma instância que tenha o acesso a serviços particulares e o Private Service Connect ativados.

Quando você desativa o Private Service Connect para a instância, essa operação leva 8 minutos com aproximadamente 45 segundos de tempo de inatividade na instância. Depois que a operação for concluída, o acesso a serviços particulares e os caminhos de conectividade do Private Service Connect não vão mais coexistir na mesma instância. Não é possível se conectar à instância usando o Private Service Connect.

É possível desativar o Private Service Connect para uma instância usando a gcloud CLI ou a API.

gcloud

Para desativar o Private Service Connect em uma instância, use o 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

Faça as seguintes substituições:

  • INSTANCE_NAME: o nome da instância.
  • PROJECT_ID: o ID ou número do projeto do Google Cloud que contém a instância

REST

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID ou número do projeto do Google Cloud que contém a instância
  • INSTANCE_NAME: o nome da instância

Método HTTP e URL:

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

Corpo JSON da solicitação:

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

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "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"
}

Ativar o Private Service Connect para uma instância

É possível ativar o Private Service Connect para uma instância que já tenha o acesso a serviços particulares ativado. Use o Private Service Connect para se conectar a uma instância do Cloud SQL de várias redes VPC.

Quando você ativa o Private Service Connect para a instância, essa operação leva 8 minutos com aproximadamente 45 segundos de tempo de inatividade na instância. Depois que a operação for concluída, o acesso a serviços particulares e os caminhos de conectividade do Private Service Connect vão coexistir na mesma instância.

É possível ativar o Private Service Connect para uma instância usando a gcloud CLI ou a API.

gcloud

Para ativar o Private Service Connect em uma instância, use o 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

Faça as seguintes substituições:

  • INSTANCE_NAME: o nome da instância.
  • PROJECT_ID: o ID ou número do projeto do Google Cloud que contém a instância
  • ALLOWED_PROJECTS: uma lista de IDs ou números de projetos permitidos, separados por vírgulas. Se um projeto não estiver na lista, não será possível criar endpoints do Private Service Connect no projeto para se conectar à instância.

  • VPC_PSC_NETWORK_PATH: o caminho para a rede VPC em que o endpoint do Private Service Connect é criado. Examplo:
    projects/my-host-project/global/networks/default.
  • SERVICE_PROJECT: o projeto em que o endpoint do Private Service Connect é criado. Se a rede VPC não for compartilhada, esse projeto só poderá ser o host da rede. Se for uma VPC compartilhada, ela pode ser o projeto host ou de serviço.

Para saber como se conectar a uma instância com o Private Service Connect ativado, consulte Conectar-se a uma instância do Cloud SQL.

REST

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID ou número do projeto do Google Cloud que contém a instância.
  • INSTANCE_NAME: o nome da instância.
  • ALLOWED_PROJECTS: uma lista de IDs ou números de projetos permitidos, separados por vírgulas. Eles substituem os projetos que já estão configurados para usar o Private Service Connect. Se um projeto não estiver na lista, não será possível criar endpoints do Private Service Connect no projeto para se conectar à instância.
  • VPC_PSC_NETWORK_PATH: o caminho para a rede VPC em que o endpoint do Private Service Connect é criado. Examplo:
    projects/my-host-project/global/networks/default.
  • SERVICE_PROJECT: o projeto em que o endpoint do Private Service Connect é criado. Se a rede VPC não for compartilhada, esse projeto só poderá ser o host da rede. Se for uma VPC compartilhada, ela pode ser o projeto host ou de serviço.

Método HTTP e URL:

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

Corpo JSON da solicitação:

{
  "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 a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "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 como se conectar a uma instância com o Private Service Connect ativado, consulte Conectar-se a uma instância do Cloud SQL.