Como configurar a conectividade do IP público

Veja nesta página como configurar a conectividade IP pública para uma instância do Cloud SQL.

Introdução

É possível configurar sua instância do Cloud SQL para ter um endereço IPv4 público e aceitar conexões de endereços IP específicos ou de um intervalo de endereços, adicionando endereços autorizados à sua instância.

Para ajuda sobre como conectar um cliente de administração à instância por uma conexão IP, consulte Conectar o cliente psql usando endereços IP.

Se você configurar sua instância para aceitar conexões usando o endereço IP público, configure-a também para usar SSL e manter os dados seguros. Para ver mais informações, consulte Configurar SSL para instâncias.

Para configurar sua instância com um endereço IP que não esteja exposto à Internet pública, consulte Como configurar a conectividade IP privada.

Ativar o IP público e adicionar um endereço ou intervalo de endereços autorizados

Para ativar o IP público e adicionar um endereço autorizado:

Quando você ativa o IP público para sua instância, ele é configurado com um endereço IPv4 público e estático.

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 Detalhes da instância.
  3. Selecione a guia Conexões.
  4. Marque a caixa de seleção IP público.
  5. Clique em Adicionar rede.
  6. No campo Rede, insira o endereço IP ou o intervalo de endereços do qual quer permitir conexões.

    Use a notação CIDR.

  7. Como opção, insira um nome para essa entrada.
  8. Clique em Concluir.
  9. Clique em Salvar para atualizar a instância.

gcloud

  1. Se você ainda não fez isso, adicione um endereço IPv4 à instância:
    gcloud sql instances patch [INSTANCE_NAME] --assign-ip
    
  2. Mostre todos os endereços autorizados existentes descrevendo a instância:
    gcloud sql instances describe [INSTANCE_NAME]
    

    Procure as entradas authorizedNetwork em ipConfiguration e observe os endereços que quer manter.

  3. Atualize a lista de rede autorizada incluindo todos os endereços que você quiser.
    gcloud sql instances patch [INSTANCE_NAME] --authorized-networks=[IP_ADDR1],[IP_ADDR2]...
    

    Use a notação CIDR.

  4. Confirme as alterações:
    gcloud sql instances describe [INSTANCE_NAME]
    

REST v1beta4

  1. Mostre todos os endereços autorizados existentes descrevendo a instância:

    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
    • machine-type: o tipo de máquina da instância
    • zone: a zona da instância

    Método HTTP e URL:

    GET  https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=settings

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

    Você receberá uma resposta JSON semelhante a esta:

  2. Atualize a instância incluindo todos os endereços que quer definir na instância:

    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
    • network_range_1: um intervalo ou endereço IP autorizado
    • network_range_2: outro intervalo ou endereço IP autorizado

    Método HTTP e URL:

    PATCH https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

    Corpo JSON da solicitação:

    {
      "settings":
      {
        "ipConfiguration":
        {
          "authorizedNetworks":
            [{"value": "network_range_1"}, {"value": network_range_2"}]
        }
      }
    }
    

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

    Você receberá uma resposta JSON semelhante a esta:

    Use a notação CIDR.

  3. Confirme as alterações:

    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
    • ip-address1: o formulário CIDR do primeiro endereço IP
    • ip-address-name1: o nome do primeiro endereço IP
    • ip-address2: o formulário CIDR do segundo endereço IP
    • ip-address-name2: o nome do segundo endereço IP
    • machine-type: o tipo de máquina da instância
    • zone: a zona da instância

    Método HTTP e URL:

    GET  https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=settings

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

    Você receberá uma resposta JSON semelhante a esta:

Como remover um endereço ou intervalo de endereços autorizado

Para remover um endereço autorizado:

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 Detalhes da instância.
  3. Selecione a guia Conexões.
  4. Clique no ícone de exclusão Excluir. do endereço que você quer excluir.
  5. Clique em Salvar para atualizar a instância.

gcloud

  1. Mostre todos os endereços autorizados existentes descrevendo a instância:
    gcloud sql instances describe [INSTANCE_NAME]
    

    Procure as entradas authorizedNetwork em ipConfiguration e observe os endereços que quer manter.

  2. Atualize a lista de rede autorizada descartando os endereços que quiser remover.
    gcloud sql instances patch [INSTANCE_NAME] --authorized-networks=[IP_ADDR1],[IP_ADDR2]...
    
  3. Confirme as alterações:
    gcloud sql instances describe [INSTANCE_NAME]
    

REST v1beta4

  1. Mostre todos os endereços autorizados existentes descrevendo a instância:

    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
    • ip-address1: o formulário CIDR do primeiro endereço IP
    • ip-address-name1: o nome do primeiro endereço IP
    • ip-address2: o formulário CIDR do segundo endereço IP
    • ip-address-name2: o nome do segundo endereço IP
    • machine-type: o tipo de máquina da instância
    • zone: a zona da instância

    Método HTTP e URL:

    GET  https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=settings

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

    Você receberá uma resposta JSON semelhante a esta:

  2. Atualize a instância, incluindo todos os endereços que você quer manter e descartando os que quer remover:

    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
    • network_range_1: o endereço IP ou o intervalo de rede autorizado a ser removido

    Método HTTP e URL:

    PATCH https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

    Corpo JSON da solicitação:

    {
      "settings":
      {
        "ipConfiguration":
        {
          "authorizedNetworks":
            [{"value": "network_range_1"}]
        }
      }
    }
    
    

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

    Você receberá uma resposta JSON semelhante a esta:

  3. Confirme as alterações:

    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
    • ip-address: o formulário CIDR do endereço IP
    • ip-address-name: o nome do endereço IP
    • machine-type: o tipo de máquina da instância
    • zone: a zona da instância

    Método HTTP e URL:

    GET  https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=settings

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

    Você receberá uma resposta JSON semelhante a esta:

Configurar uma instância para recusar todas as conexões IP públicas

Para configurar uma instância para recusar todas as conexões IP públicas:

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 Detalhes da instância.
  3. Selecione a guia Conexões.
  4. Clique no ícone de exclusão Excluir. de todos os endereços autorizados.
  5. Clique em Salvar para atualizar a instância.

gcloud

  1. Limpe a lista de endereços autorizada:
    gcloud sql instances patch [INSTANCE_NAME] --clear-authorized-networks
    
  2. Confirme as alterações:
    gcloud sql instances describe [INSTANCE_NAME]
    

REST v1beta4

  1. Mostre todos os endereços autorizados existentes descrevendo a instância:

    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
    • ip-address1: o formulário CIDR do primeiro endereço IP
    • ip-address-name1: o nome do primeiro endereço IP
    • ip-address2: o formulário CIDR do segundo endereço IP
    • ip-address-name2: o nome do segundo endereço IP
    • machine-type: o tipo de máquina da instância
    • zone: a zona da instância

    Método HTTP e URL:

    GET  https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=settings

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

    Você receberá uma resposta JSON semelhante a esta:

  2. Atualize a instância com uma lista de endereços vazia:

    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

    Método HTTP e URL:

    PATCH https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

    Corpo JSON da solicitação:

    {
      "settings":
      {
        "ipConfiguration":
        {
          "authorizedNetworks": []
        }
      }
    }
    

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

    Você receberá uma resposta JSON semelhante a esta:

  3. Confirme as alterações:

    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
    • machine-type: o tipo de máquina da instância
    • zone: a zona da instância

    Método HTTP e URL:

    GET  https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=settings

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

    Você receberá uma resposta JSON semelhante a esta:

Desativar o IP público

É possível desativar o IP público, mas apenas se sua instância também estiver configurada para usar IP privado. Para ativar o IP privado, consulte Como configurar uma instância existente para usar IP privado.

Para desativar o IP público:

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 Detalhes da instância.
  3. Selecione a guia Conexões.
  4. Desmarque a caixa de seleção IP público.
  5. Clique em Salvar para atualizar a instância.

gcloud

  1. Atualize a instância:
    gcloud sql instances patch [INSTANCE_NAME] --no-assign-ip
    
  2. Confirme as alterações:
    gcloud sql instances describe [INSTANCE_NAME]
    

REST v1beta4

  1. Mostre todos os endereços autorizados existentes descrevendo a instância:

    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
    • ip-address1: o formulário CIDR do primeiro endereço IP
    • ip-address-name1: o nome do primeiro endereço IP
    • ip-address2: o formulário CIDR do segundo endereço IP
    • ip-address-name2: o nome do segundo endereço IP
    • machine-type: o tipo de máquina da instância
    • zone: a zona da instância

    Método HTTP e URL:

    GET  https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=settings

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

    Você receberá uma resposta JSON semelhante a esta:

  2. Atualize a instância:

    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

    Método HTTP e URL:

    PATCH https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

    Corpo JSON da solicitação:

    {
      "settings":
      {
        "ipConfiguration": {"ipv4Enabled": false}
      }
    }
    

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

    Você receberá uma resposta JSON semelhante a esta:

  3. Confirme as alterações:

    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
    • machine-type: o tipo de máquina da instância
    • zone: a zona da instância

    Método HTTP e URL:

    GET  https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=settings

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

    Você receberá uma resposta JSON semelhante a esta:

Solução de problemas

Clique nos links da tabela para ver detalhes:

Para este problema... O problema pode ser... Tente o seguinte...
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 As permissões de rede na conta de serviço estão incorretas ou ausentes. Desative e reative a API Service Networking.
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 (em inglês) não é compatível com o Go 1.15. Até que o problema seja resolvido, confira esta discussão no GitHub (em inglês), que inclui uma solução alternativa.

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.


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 você estiver se conectando pelo Cloud SQL Proxy, 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..

O problema pode ser

As permissões do usuário ou da conta de serviço estão incorretas. Isso pode acontecer durante scripts de configuração automatizados, como um script de configuração do Terraform.

O que você pode tentar

Para corrigir as permissões do serviço, desative a Service Networking API, aguarde cinco minutos e reative-o.

Ou tente usar esses comandos gcloud para atribuir o papel ao projeto.

gcloud beta services identity create --service=servicenetworking.googleapis.com --project=project-id
gcloud projects add-iam-policy-binding project-id --member="service-account-prefix@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 (em inglês) 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 (em inglês), que inclui uma solução alternativa.


A seguir