Configurar um 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

  • Você precisa ativar a API Service Networking no projeto.
  • 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 particulares, o usuário precisa ter as permissões do IAM a seguir. 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 VPC no projeto, é necessário 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 fornece um assistente para ajudar você a definir essa configuração.

Como configurar uma instância para usar 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.

Como 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. Acesse a página "Instâncias" do Cloud SQL no Console do Google Cloud.

    Acesse a página "Instâncias" do Cloud SQL

  2. Clique em CRIAR INSTÂNCIA.
  3. No assistente de criação, em Opções de configuração, expanda a seção Conectividade.
  4. Marque a caixa de seleção IP particular.

    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.

  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. Em 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 um ou clique em ALOCAR UM NOVO INTERVALO DE IP e inserir 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 VPN_NAME foi criado.
  7. Clique em Save.

gcloud

Se você ainda não tiver feito isso, siga as instruções abaixo para configurar o acesso a serviços particulares no Cloud SQL. Crie sua instância do Cloud SQL usando o parâmetro --network para especificar o nome da rede VPC escolhida e a sinalização --no-assign-ip para desativar o IP público. O valor do parâmetro --network estará no formato: projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME. O PROJECT_ID é o ID do projeto da rede VPC. Se a rede VPC for compartilhada, precisará ser o ID do projeto host da VPC compartilhada.
gcloud --project=[PROJECT_ID] beta sql instances create [INSTANCE_ID]
       --network=[VPC_NETWORK_NAME]
       --no-assign-ip

Como configurar o IP privado para uma instância atual

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

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

Console

  1. Acesse a página "Instâncias" do Cloud SQL no Console do Google Cloud.
    Acessar a página "Instâncias" do Cloud SQL
  2. Clique no nome da instância para abrir a página Visão geral correspondente.
  3. Selecione a guia Conexões.
  4. Marque a caixa de seleção IP particular.

    Uma lista suspensa exibirá as redes 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.

  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. Em 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 um ou clique em ALOCAR UM NOVO INTERVALO DE IP e inserir 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 VPN_NAME foi criado.
  7. Clique em Save.

gcloud

Se você ainda não tiver feito isso, siga as instruções abaixo para configurar o acesso a serviços particulares no Cloud SQL. Atualize a instância do Cloud SQL usando o parâmetro --network para especificar o nome da rede VPC escolhida.

VPC_NETWORK_NAME é o nome da rede VPC escolhida. Por exemplo: my-vpc-network. O valor do parâmetro --network estará no formato: https://www.googleapis.com/compute/alpha/projects/[PROJECT_ID]/global/networks/[VPC_NETWORK_NAME]

gcloud --project=[PROJECT_ID] beta sql instances patch [INSTANCE_ID]
       --network=[VPC_NETWORK_NAME]
       --no-assign-ip

Como se conectar a uma instância usando o IP privado 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).

Como se conectar de uma origem interna

Para se conectar a partir de uma origem no mesmo projeto do Google Cloud que sua 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 no mesma rede VPC da instância do Cloud SQL.

Como se conectar de uma origem externa

É possível se conectar de um cliente em uma rede externa (redes locais ou VPC) se a rede externa estiver conectada à rede VPC a qual a instância do Cloud SQL está conectada. 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. Identifique a conexão de peering produzida pela conexão de serviços particulares:
    • cloudsql-mysql-googleapis-com
    • cloudsql-postgres-googleapis-com
    • servicenetworking-googleapis-com
  3. Atualize todas as conexões de peering para ativar a opção Exportar rotas personalizadas.
  4. Identifique o intervalo alocado usado pela conexão de serviços particulares.
  5. 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).

Como se conectar usando o 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.

Como se conectar de 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.

Os intervalos de endereços não RFC 1918 (aqueles que não estão no espaço RFC 1918) precisam ser configurados como redes autorizadas.

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 grava as rotas de sub-rede não RFC 1918 da sua VPC. É necessário atualizar o peering de rede ao Cloud SQL para exportar rotas que não sejam RFC 1918.

gcloud compute networks peerings update cloudsql-postgres-googleapis-com --network=NETWORK --export-subnet-routes-with-public-ip --project=PROJECT
  • cloudsql-postgres-googleapis-com é um nome de Conexão de serviço particular da página da rede VPC.

    Selecione sua rede e procure a seção Conexão de serviço particular.

  • NETWORK é o nome da sua rede VPC.

Solução de problemas

Clique nos links da tabela para ver detalhes:

Para este problema... O problema pode ser... Tente o seguinte...
FATAL: database 'user' does not exist gcloud sql connect --user funciona apenas com o usuário "postgres" padrão. Conecte-se com o usuário padrão e mude os usuários.
SSL error: invalid padding Erro de certificado do servidor. Crie um novo certificado de servidor e alterne-o.
Você quer descobrir quem está conectado. N/A Veja aqui o que você pode tentar.
Erros Unauthorized to connect. Há muitas causas possíveis. Veja aqui o que você pode tentar.
Falha na associação de rede. Service Networking API não está ativado no projeto. Ative o Service Networking API no projeto.
Remaining connection slots are reserved. O número máximo de conexões foi atingido. Aumente a sinalização max_connections.
Set Service Networking service account as servicenetworking.serviceAgent role on consumer project A conta de serviço da Service Networking não está vinculada ao papel servicenetworking.serviceAgent. Vincule a conta de serviço da Service Networking ao papel servicenetworking.serviceAgent.
error x509: certificate is not valid for any names, but wanted to match project-name:db-name Problema conhecido: no momento, o Cloud SQL Proxy Dialer não é compatível com o Go 1.15. Até que o problema seja resolvido, confira esta discussão no GitHub, que inclui uma solução alternativa.
Não é possível analisar certificados em alguns sistemas operacionais. Os clientes que usam bibliotecas x509 pelo mac OS 11.0 (Big Sur) podem não conseguir analisar alguns certificados de instâncias postgres. Isso pode ser exibido ao cliente como um erro genérico, como "cancelado". A solução alternativa é alternar o certificado do servidor e criar novamente os certificados do cliente.
Cannot modify allocated ranges in CreateConnection. Please use UpdateConnection Os peerings de VPC não são atualizados depois que um intervalo alocado é modificado ou removido. Consulte O que fazer e veja mais detalhes sobre a atualização de peering de VPC.
Allocated IP range not found in network Os peerings de VPC não são atualizados depois que um intervalo alocado é modificado ou removido. Consulte O que fazer e veja mais detalhes sobre a atualização de peering 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. Você está tentando se conectar à sua instância de IP particular usando o Cloud Shell. A conexão do Cloud Shell a uma instância com apenas um endereço IP particular não é aceita atualmente.

Conexão cancelada

Você verá a mensagem de erro Got an error reading communication packets ou Aborted connection xxx to db: DB_NAME.

O problema pode ser

  • Instabilidade de rede.
  • Nenhuma resposta aos comandos de sinal de atividade TCP (o cliente ou o servidor não é responsivo, possivelmente sobrecarregado).
  • A vida útil da conexão do mecanismo de banco de dados foi excedida e o servidor encerrou a conexão.

O que você pode tentar

Os aplicativos devem tolerar falhas de rede e seguir as práticas recomendadas, como a repetição e o pooling de conexões. A maioria dos pools de conexão identifica esses erros sempre que possível. Caso contrário, o aplicativo precisará tentar novamente ou falhar normalmente.

Para novas tentativas de conexão, recomendamos os métodos a seguir:

  1. Espera exponencial. Aumente o intervalo de tempo entre cada nova tentativa, exponencialmente.
  2. Adicione também a espera aleatória.
Combinar esses métodos ajuda a reduzir a limitação.


FATAL: o banco de dados "usuário" não existe

Você verá a mensagem de erro FATAL: database 'user' does not exist ao tentar se conectar a uma instância PostgreSQL com gcloud sql connect --user.

Possível problema

O comando gcloud sql connect --user só funciona com o usuário padrão (postgres).

O que você pode tentar

A solução é se conectar usando o usuário padrão e, em seguida, usar o comando "\c" psql para se reconectar como o usuário diferente.


Erro de SSL: padding inválido

Você verá a mensagem de erro SSL error: invalid padding ao tentar se conectar a uma instância PostgreSQL por meio de SSL.

O problema pode ser

Um erro com o certificado de CA do servidor.

O que você pode tentar

Crie um novo certificado de CA do servidor e alterne os certificados do servidor.


Você quer descobrir quem está conectado

Você quer descobrir quem está conectado e por quanto tempo.

O problema pode ser

N/A

O que você pode tentar

Faça login no banco de dados e execute este comando: SELECT datname, usename, application_name as appname, client_addr, state, now() - backend_start as conn_age, now() - state_change as last_activity_age FROM pg_stat_activity WHERE backend_type = 'client backend' ORDER BY 6 DESC LIMIT 20</code>


Sem autorização para se conectar

Você vê a mensagem de erro Unauthorized to connect.

O problema pode ser

Pode haver muitas causas, já que a autorização ocorre em muitos níveis.

  • No nível do banco de dados, o usuário do banco de dados precisa existir e a senha precisa corresponder.
  • No nível do projeto, é possível que o usuário não tenha as permissões corretas do IAM.
  • No nível do Cloud SQL, a causa pode depender de como você se conecta à instância. Se você estiver se conectando diretamente a uma instância pelo IP público, o IP de origem da conexão precisará estar na rede autorizada da instância.

    A conectividade IP particular é permitida por padrão, exceto quando você está se conectando a partir de um endereço não RFC 1918. Os endereços de clientes que não são RFC 1918 precisam ser configurados como redes autorizadas.

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

    gcloud compute networks peerings update cloudsql-postgres-googleapis-com --network=NETWORK --export-subnet-routes-with-public-ip --project=PROJECT
    

    Se estiver se conectando pelo proxy do Cloud SQL Auth, verifique se as permissões do IAM estão configuradas corretamente.

  • No nível da rede, se a instância do Cloud SQL estiver usando IP público, o IP de origem da conexão precisa estar em uma rede autorizada.

O que você pode tentar

  • Confirme o nome de usuário e a senha.
  • Verifique os papéis e as permissões do IAM do usuário.
  • Se estiver usando IP público, verifique se a origem está nas redes autorizadas.

Falha na associação de rede

Você verá a mensagem de erro Error: Network association failed due to the following error: conceda o papel servicenetworking.serviceAgent à conta de serviço do Service Networking no projeto do consumidor.

O problema pode ser

A Service Networking API não está ativada no projeto.

O que você pode tentar

Ative a Service Networking API no seu projeto. Se você vir esse erro ao tentar atribuir um endereço IP particular a uma instância do Cloud SQL e estiver usando uma VPC compartilhada, também será necessário ativar a Service Networking API para o projeto host.


Os slots de conexão restantes estão reservados

Você vê a mensagem de erro FATAL: remaining connection slots are reserved for non-replication superuser connections.

O problema pode ser

O número máximo de conexões foi atingido.

O que você pode tentar

Edite o valor da sinalização max_connections.


Defina a conta de serviço do Service Networking com o papel servicenetworking.serviceAgent no projeto do consumidor

Você vê a mensagem de erro set Service Networking service account as servicenetworking.serviceAgent role on consumer project..

Possível problema

A conta de serviço da Service Networking não está vinculada ao papel servicenetworking.serviceAgent.

O que você pode tentar

Para atenuar esse problema, use estes comandos da gcloud para vincular a conta de serviço da Service Networking ao papel 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"

Erro x509: o certificado não é válido para nenhum nome

Você vê a mensagem de erro error x509: certificate is not valid for any names, but wanted to match project-name:db-name.

O problema pode ser…

Problema conhecido: no momento, o Cloud SQL Proxy Dialer não é compatível com o Go 1.15.

O que você pode tentar

Até que o bug seja corrigido, consulte esta discussão no GitHub, que inclui uma solução alternativa.


Não é possível analisar certificados em alguns sistemas operacionais

Quando você usar bibliotecas x509 pelo mac OS 11.0 (Big Sur), pode ser que não consiga analisar os certificados de instâncias postgres. Isso pode ser exibido como um erro genérico, como "cancelado".

O que você pode tentar

O bug foi corrigido e as novas instâncias não enfrentarão esse problema. Para instâncias antigas que enfrentarem esse problema, rotacione o certificado do servidor e recrie os certificados do cliente.


Não é possível modificar intervalos alocados em CreateConnection. Use UpdateConnection

Você verá a mensagem de erro Cannot modify allocated ranges in CreateConnection. Please use UpdateConnection ou The operation "operations/1234" resulted in a failure "Allocated IP range 'xyz' not found in network.

O problema pode ser…

Uma conexão de serviço particular foi modificada. Por exemplo, quando um intervalo foi reservado e removido, a conexão particular também é removida. Você recebe esse erro quando tenta fazer uma conexão usando um intervalo reservado diferente sem primeiro recriar a conexão particular. Você verá o segundo erro quando o intervalo alocado for modificado, mas vpc-peerings não tiver sido atualizado.

O que você pode tentar

É necessário recriar ou atualizar a conexão particular. Use o seguinte comando e certifique-se de usar o argumento --force:

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

A seguir