Configurar IP privado

Nesta página, você verá como configurar uma instância do Cloud SQL para usar IP particular.

Para informações sobre como o IP particular funciona, bem como sobre os requisitos de ambiente e gerenciamento, consulte IP particular.

Antes de começar

Requisitos de API e IAM

  • Ative a API Service Networking no projeto do Google Cloud.
  • Se você estiver usando uma rede VPC compartilhada, também precisará ativar essa API no projeto host.

  • Para gerenciar uma conexão de acesso a serviços privados, o usuário precisa ter as seguintes permissões de gerenciamento de identidade e acesso. Se você não tiver as permissões necessárias, é possível que receba erros de permissões insuficientes.
    • compute.networks.list
    • compute.addresses.create
    • compute.addresses.list
    • servicenetworking.services.addPeering

    Se você estiver usando uma rede VPC compartilhada, também precisará adicionar seu usuário ao projeto host e atribuir as mesmas permissões a ele no projeto host.

Acesso privado a serviços

Ao criar uma nova rede de nuvem privada virtual (VPC) no projeto, você precisa configurar o acesso a serviços particulares para alocar um intervalo de endereços IP e criar uma conexão de serviço particular. Isso permite que os recursos na rede VPC se conectem às instâncias do Cloud SQL. O console do Google Cloud oferece um assistente para ajudar você a definir essa configuração.

Configurar uma instância para usar o IP particular

Ao criar uma instância do Cloud SQL, é possível configurá-la para usar o IP particular. Essa configuração também pode ser feita em uma instância atual.

Configurar o IP particular para uma nova instância

Para configurar uma instância do Cloud SQL para usar IP particular ao criar uma instância:

Console

  1. No console do Google Cloud, acesse a página Instâncias do Cloud SQL.

    Acesse Instâncias do Cloud SQL

  2. Clique em Criar instância.
  3. Expanda Mostrar opções de configuração.
  4. Expanda Conexões.
  5. Selecione IP privado.

    Uma lista suspensa exibirá as redes VPC disponíveis no projeto. Se o projeto for o de serviço de uma VPC compartilhada, as redes VPC do projeto host também serão exibidas.

  6. Selecione a rede VPC a ser usada.
  7. Se você vir uma mensagem indicando que precisa configurar uma conexão de serviço particular, faça o seguinte:

    1. Clique em Configurar conexão.
    2. Na seção Alocar um intervalo de IP, selecione uma destas opções:
      • Selecione um ou mais intervalos de IP ou crie um novo no menu suspenso. A lista suspensa inclui intervalos alocados anteriormente. Selecione Alocar um novo intervalo de IP e insira um novo intervalo e nome.
      • Use um intervalo de IP alocado automaticamente na sua rede..
    3. Clique em Continuar.
    4. Clique em Criar conexão.
    5. Verifique se você vê a mensagem Private service connection for network VPC_NETWORK_NAME has been successfully created.
  8. Opcionalmente, é possível especificar um intervalo de IP alocado para as suas instâncias usarem em conexões.
    1. Expanda Mostrar opção de intervalo de IP alocado.
    2. Selecione um intervalo de IP no menu suspenso.
  9. Conclua a configuração da instância.
  10. Clique em Criar instância.

gcloud

Antes de criar uma instância usando um endereço IP particular, verifique se o projeto está configurado para acesso a serviços privados.

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

  • INSTANCE_ID: o ID da instância
  • PROJECT_ID: o ID do projeto
  • NETWORK_PROJECT_ID: o ID do projeto da rede VPC

  • VPC_NETWORK_NAME: o nome da rede VPC
  • RANGE_NAME: opcional. Se especificado, define um nome de intervalo para o qual um intervalo de IP é alocado. O nome do intervalo precisa estar em conformidade com RFC-1035 e conter de 1 a 63 caracteres.
  • REGION_NAME: o nome da região
Para especificar o nome da sua rede VPC, use o parâmetro --network. Para desativar o IP público, use a sinalização --no-assign-ip.

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

Terraform

Para configurar o IP privado para uma nova instância, use os seguintes recursos do 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" "instance" {
  name             = "private-ip-sql-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 {
      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
}

## Uncomment this block after adding a valid DNS suffix

# resource "google_service_networking_peered_dns_domain" "default" {
#   name       = "example-com"
#   network    = google_compute_network.peering_network.id
#   dns_suffix = "example.com."
#   service    = "servicenetworking.googleapis.com"
# }

Aplique as alterações

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.

Excluir as alterações

Para excluir as mudanças, faça o seguinte:

  1. Para desativar a proteção contra exclusão, no arquivo de configuração do Terraform, defina o argumento deletion_protection como false.
    deletion_protection =  "false"
  2. Para aplicar a configuração atualizada do Terraform, execute o comando a seguir e digite yes no prompt:
    terraform apply
  1. Remova os recursos aplicados anteriormente com a configuração do Terraform executando o seguinte comando e inserindo yes no prompt:

    terraform destroy

REST v1

Crie uma instância nova com um endereço IP privado:

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

  • PROJECT_ID:: o ID do projeto
  • INSTANCE_ID:: o ID da instância
  • VPC_NETWORK_NAME:: especifique o nome da rede de nuvem privada virtual (VPC) que você quer usar para essa instância. O acesso a serviços particulares já precisa estar configurado na rede.
  • RANGE_NAME: Opcional. Se especificado, define um nome de intervalo para o qual um intervalo de IP é alocado. O nome do intervalo precisa estar em conformidade com RFC-1035 e conter de 1 a 63 caracteres.
  • AUTHORIZED_NETWORKS:: para conexões de IP público, especifique as conexões de redes autorizadas que podem se conectar à instância.

Para o parâmetro ipv4Enabled, defina o valor como true se estiver usando um endereço IP público para a instância ou como false se a instância tiver um endereço IP particular.

Método HTTP e URL:

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

Corpo JSON da solicitação:

{
  "name": "INSTANCE_ID",
  "region": "region",
  "databaseVersion": "database-version",
  "settings": {
    "tier": "machine-type",
    "ipConfiguration": {
      "ipv4Enabled": false,
      "privateNetwork": "projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME",
      "allocatedIpRange": "RANGE_NAME"
      "authorizedNetworks": [AUTHORIZED_NETWORKS],

    }
  }
}

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

Você receberá uma resposta JSON semelhante a esta:

REST v1beta4

Crie uma instância nova com um endereço IP privado:

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

  • PROJECT_ID:: o ID do projeto
  • INSTANCE_ID:: o ID da instância
  • VPC_NETWORK_NAME:: especifique o nome da rede de nuvem privada virtual (VPC) que você quer usar para essa instância. O acesso a serviços particulares já precisa estar configurado na rede.
  • RANGE_NAME: Opcional. Se especificado, define um nome de intervalo para o qual um intervalo de IP é alocado. O nome do intervalo precisa estar em conformidade com RFC-1035 e conter de 1 a 63 caracteres.
  • AUTHORIZED_NETWORKS:: para conexões de IP público, especifique as conexões de redes autorizadas que podem se conectar à instância.

Para o parâmetro ipv4Enabled, defina o valor como true se estiver usando um endereço IP público para a instância ou como false se a instância tiver um endereço IP particular.

Método HTTP e URL:

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

Corpo JSON da solicitação:

{
  "name": "INSTANCE_ID",
  "region": "region",
  "databaseVersion": "database-version",
  "settings": {
    "tier": "machine-type",
    "ipConfiguration": {
      "ipv4Enabled": false,
      "privateNetwork": "projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME",
      "allocatedIpRange": "RANGE_NAME"
      "authorizedNetworks": [AUTHORIZED_NETWORKS],

    }
  }
}

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

Você receberá uma resposta JSON semelhante a esta:

Configurar o IP particular para uma instância atual

Configurar uma instância atual do Cloud SQL para usar IP privado faz com que ela seja reiniciada, resultando em tempo de inatividade.

Configurar o uso de IP privado em uma instância atual:

Console

  1. No console do Google Cloud, acesse a página Instâncias do Cloud SQL.

    Acesse "Instâncias do Cloud SQL"

  2. Para abrir a página Visão geral de uma instância, clique no nome da instância.
  3. Selecione Conexões no menu de navegação do Cloud SQL.
  4. Na guia Rede, marque a caixa de seleção IP particular.

    Uma lista suspensa exibirá as redes disponíveis no projeto.

  5. Selecione a rede VPC a ser usada:
  6. Se você vir a mensagem Conexão de serviço particular obrigatória, siga estas instruções:

    1. Clique em Configurar conexão.
    2. Na seção Alocar um intervalo de IP, escolha uma destas opções:
      • Selecione um ou mais intervalos de IP ou crie um novo no menu suspenso. A lista suspensa inclui intervalos alocados anteriormente. Selecione Alocar um novo intervalo de IP e insira um novo intervalo e nome.
      • Use um intervalo de IP alocado automaticamente na sua rede.
    3. Clique em Continuar.
    4. Clique em Criar conexão.
    5. Verifique se o status da Conexão de serviço particular da rede VPC_NETWORK_NAME foi criado.
  7. Clique em Salvar.

gcloud

Verifique se o projeto está configurado para acesso a serviços particulares.

Atualize a instância do Cloud SQL usando o parâmetro --network para especificar o nome da rede VPC selecionada.

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

REST v1

Crie uma instância nova com um endereço IP privado:

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

  • PROJECT_ID:: o ID do projeto
  • INSTANCE_ID:: o ID da instância
  • VPC_NETWORK_NAME:: especifique o nome da rede de nuvem privada virtual (VPC) que você quer usar para essa instância. O acesso a serviços particulares já precisa estar configurado na rede.
  • RANGE_NAME: Opcional. Se especificado, define um nome de intervalo para o qual um intervalo de IP é alocado. O nome do intervalo precisa estar em conformidade com RFC-1035 e conter de 1 a 63 caracteres.
  • AUTHORIZED_NETWORKS:: para conexões de IP público, especifique as conexões de redes autorizadas que podem se conectar à instância.

Para o parâmetro ipv4Enabled, defina o valor como true se estiver usando um endereço IP público para a instância ou como false se a instância tiver um endereço IP particular.

Método HTTP e URL:

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

Corpo JSON da solicitação:

{
  "settings":
  {
    "ipConfiguration": {
      "ipv4Enabled": false,
      "privateNetwork": "projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME",
      "allocatedIpRange": "RANGE_NAME"
      "authorizedNetworks": [AUTHORIZED_NETWORKS],

    }
  }
}

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

Você receberá uma resposta JSON semelhante a esta:

REST v1beta4

Crie uma instância nova com um endereço IP privado:

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

  • PROJECT_ID:: o ID do projeto
  • INSTANCE_ID:: o ID da instância
  • VPC_NETWORK_NAME:: especifique o nome da rede de nuvem privada virtual (VPC) que você quer usar para essa instância. O acesso a serviços particulares já precisa estar configurado na rede.
  • RANGE_NAME: Opcional. Se especificado, define um nome de intervalo para o qual um intervalo de IP é alocado. O nome do intervalo precisa estar em conformidade com RFC-1035 e conter de 1 a 63 caracteres.
  • AUTHORIZED_NETWORKS: para conexões de IP público, especifique as conexões de redes autorizadas que podem se conectar à instância.

Para o parâmetro ipv4Enabled, defina o valor como true se estiver usando um endereço IP público para a instância ou como false se a instância tiver um endereço IP particular.

Método HTTP e URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID

Corpo JSON da solicitação:

{
  "settings":
  {
    "ipConfiguration": {
      "ipv4Enabled": false,
      "privateNetwork": "projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME",
      "allocatedIpRange": "RANGE_NAME"
      "authorizedNetworks": [AUTHORIZED_NETWORKS],

    }
  }
}

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

Você receberá uma resposta JSON semelhante a esta:

Conectar-se a uma instância usando o IP particular dela

Use o acesso a serviços particulares para se conectar a instâncias do Cloud SQL do Compute Engine ou do Google Kubernetes Engine na mesma rede VPC (definida aqui como origens internas) ou de fora dessa rede (uma origem externa).

Conectar-se usando uma fonte interna

Para se conectar por meio de uma origem no mesmo projeto do Google Cloud que a instância do Cloud SQL, como o proxy do Cloud SQL Auth em execução em um recurso do Compute Engine, esse recurso precisa estar na mesma rede VPC em que o acesso a serviços particulares foi estabelecido para a instância do Cloud SQL.

Para se conectar por meio de uma origem sem servidor, como o ambiente padrão do App Engine, o Cloud Run, ou o Cloud Functions, o aplicativo ou a função se conecta diretamente à instância pelo acesso VPC sem servidor sem o proxy do Cloud SQL Auth.

Conectar-se usando uma fonte externa

Se uma rede externa (por exemplo, uma rede local ou VPC) estiver conectada à rede VPC a que sua instância do Cloud SQL está conectada, será possível usar a Cloud VPN ou o Cloud Interconnect para se conectar à instância de um cliente na rede externa.

Para permitir conexões de uma rede externa, faça o seguinte:

  1. Verifique se a rede VPC está conectada à rede externa usando um Túnel do Cloud VPN ou um anexo da VLAN para Interconexão dedicada ou Interconexão por parceiro.
  2. Verifique se as sessões do protocolo de gateway de borda (BGP) nos Cloud Routers que gerenciam os túneis do Cloud VPN e os anexos do Cloud Interconnect (VLANs) receberam prefixos específicos (destinos) da rede local.

    Não é possível importar rotas padrão (destino 0.0.0.0/0) para a rede VPC do Cloud SQL porque essa rede tem uma rota padrão local própria. As rotas locais de um destino são sempre usadas, mesmo que o peering do Cloud SQL esteja configurado para importar rotas personalizadas da rede VPC.

  3. Identifique as conexões de peering produzidas pela conexão de serviços particulares: Dependendo do serviço, ela pode criar uma ou mais das seguintes conexões de peering, mas não necessariamente todas elas:
    • cloudsql-mysql-googleapis-com
    • cloudsql-postgres-googleapis-com
    • servicenetworking-googleapis-com
  4. Atualize todas as conexões de peering para ativar a opção Exportar rotas personalizadas.
  5. Identifique o intervalo alocado usado pela conexão de serviços particulares.
  6. Crie uma divulgação de rota personalizada do Cloud Router para o intervalo alocado nos Cloud Routers que gerencia sessões do BGP para os túneis do Cloud VPN ou anexos do Cloud Interconnect (VLANs).

Conectar a partir do Cloud Shell

No momento, o Cloud Shell não aceita se conectar a uma instância do Cloud SQL que tenha apenas um endereço IP particular.

Conectar-se usando endereços que não sejam RFC 1918

RFC 1918 especifica os endereços IP que são atribuídos para uso interno (ou seja, em uma organização) e não são roteados na Internet. São eles:

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

As conexões com uma instância do Cloud SQL usando um endereço IP privado são autorizadas automaticamente para intervalos de endereços RFC 1918. Dessa forma, todos os clientes particulares podem acessar o banco de dados sem passar pelo proxy.

Para se conectar a partir de um endereço que não seja RFC 1918, você precisa definir a autorização de IP por instância para permitir o tráfego de intervalos de endereços não RFC 1918.

Por exemplo, use um comando gcloud como este:

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

Por padrão, o Cloud SQL não aprende as rotas de sub-rede não RFC 1918 da sua rede VPC. É necessário atualizar o peering de rede para o Cloud SQL para exportar rotas que não sejam RFC 1918.

gcloud compute networks peerings update PEERING_CONNECTION \
--network=VPC_NETWORK_NAME \
--export-subnet-routes-with-public-ip \
--project=PROJECT_ID

    Substitua:

  • PEERING_CONNECTION é o nome da conexão de peering produzida pela conexão de serviços particulares entre sua rede VPC e a rede produtora de serviços.
  • VPC_NETWORK_NAME é o nome da sua rede VPC.
  • PROJECT_ID é o ID do projeto da rede VPC. Se você estiver usando a VPC compartilhada, use o ID do projeto host.

Para reduzir o esgotamento de endereços IP, use endereços IP públicos utilizados de modo privado.

Conectar-se a partir de endereços IP públicos usados de modo privado

Se você quiser configurar a instância em um intervalo de endereços IP públicos usado de maneira particular, ative export-subnet-routes-with-public-ip no peering de rede entre sua rede e a rede do Cloud SQL.

gcloud compute networks peerings update PEERING_CONNECTION \
--network=VPC_NETWORK_NAME \
--export-subnet-routes-with-public-ip \
--project=PROJECT_ID

    Substitua:

  • PEERING_CONNECTION é o nome da conexão de peering produzida pela conexão de serviços particulares entre sua rede VPC e a rede produtora de serviços. Para saber o nome da conexão de peering, acesse a página Peering de redes VPC.
  • VPC_NETWORK_NAME é o nome da sua rede VPC.
  • PROJECT_ID é o ID do projeto da rede VPC. Se você estiver usando a VPC compartilhada, use o ID do projeto host.

Conectar-se a uma instância configurada com endereços IP públicos usados de maneira particular

Se a instância estiver configurada em um intervalo de endereços IP públicos usado de maneira privada e você quiser se conectar a ela, ative import-subnet-routes-with-public-ip no peering de rede entre sua rede e a rede do Cloud SQL.

gcloud compute networks peerings update PEERING_CONNECTION \
--network=VPC_NETWORK_NAME \
--import-subnet-routes-with-public-ip \
--project=PROJECT_ID

    Substitua:

  • PEERING_CONNECTION é o nome da conexão de peering produzida pela conexão de serviços particulares entre sua rede VPC e a rede produtora de serviços. Para saber o nome da conexão de peering, acesse a página Peering de redes VPC.
  • VPC_NETWORK_NAME é o nome da sua rede VPC.
  • PROJECT_ID é o ID do projeto da rede VPC. Use o ID do projeto de host se você estiver usando a VPC compartilhada.

Resolver problemas

Consulte solução de problemas para problemas de conectividade conhecidos e depuração de problemas de conexão para receber ajuda com o autodiagnóstico.

A seguir