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

Você pode 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.

Não é possível especificar uma rede particular (por exemplo, 10.x.x.x) como uma rede autorizada.

Endereços IP públicos para instâncias do SQL Server:

  • IPv6: as instâncias não são compatíveis com IPv6.
  • IPv4: as instâncias têm um endereço IPv4 estático atribuído automaticamente. Há uma pequena cobrança pelo endereço IP sempre que a instância é desativada.

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

Se você configurar sua instância para aceitar conexões usando o endereço IP público, configure-a para usar SSL e manter seus 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

Quando você ativa o IP público para sua instância, o Cloud SQL configura a instância com um endereço IPv4 público e estático. Depois de ativar o IP público, é necessário configurar a autorização para as conexões de banco de dados. Consulte as Opções de autorização para mais informações.

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

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 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.

    Acesse 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.

    Acesse 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.

    Acesse 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...
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 sqlserver. 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.


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-mysql-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 sqlserver. 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