Configurar o acesso a serviços privados

Nesta página, você verá como configurar o Acesso privado a serviços na sua rede VPC.

O acesso a serviços particulares é implementado como uma conexão de peering de VPC entre sua rede VPC e a rede VPC subjacente do Google que contém a instância do Cloud SQL. A conexão particular permite que as instâncias de VM na sua rede VPC e os serviços que você acessa se comuniquem exclusivamente usando endereços IP internos. As instâncias de VM não precisam de acesso à Internet ou de endereços IP externos para alcançar serviços disponíveis através do acesso a serviços privados.

Antes de começar

O Cloud SQL requer acesso a serviços particulares para cada rede VPC usada em conexões de IP particulares. Para gerenciar uma conexão de acesso a serviços particulares, o usuário precisa ter as seguintes permissões de IAM:

  • compute.networks.list
  • compute.addresses.create
  • compute.addresses.list
  • servicenetworking.services.addPeering

Se você não tiver essas permissões, verá um erro de permissões insuficientes.

Se você estiver usando uma rede VPC compartilhada, será necessário fazer o seguinte:

  • Adicionar o usuário ao projeto host
  • Atribuir as mesmas quatro permissões ao usuário no projeto host
  • Conceder a permissão compute.globalAddresses.list do IAM ao usuário

Configurar o acesso a serviços particulares para o Cloud SQL

Há duas partes no processo de configuração do acesso privado a serviços:

  • Selecionar um intervalo atual ou alocar um novo intervalo de endereços IP.

    Também é possível permitir que o Google aloque o intervalo para você. Nesse caso, o Google vai alocar automaticamente um intervalo de IP com tamanho de prefixo /20 e usar o nome default-ip-range.

    Para criar instâncias em várias regiões ou para diferentes tipos de banco de dados, é preciso ter um intervalo mínimo /24 de endereços IP disponíveis para cada região ou tipo de banco de dados. Isso inclui outros aplicativos, como o Filestore ou o Memorystore. Para uma nova região ou tipo de banco de dados, o Cloud SQL precisa ter um intervalo /24 livre.

  • Criar uma conexão privada pela sua rede VPC à rede do produtor de serviços.

Alocar um intervalo de endereços IP

Console

  1. No Console do Google Cloud, acesse a página Redes VPC.

    Acessar redes VPC

  2. Selecione a rede VPC que você quer usar.
  3. Selecione a guia Conexão de serviço particular.
  4. Selecione a guia Intervalos de IP alocados para serviços.
  5. Clique em Alocar intervalo de IP.
  6. Para o Nome do intervalo alocado, especifique google-managed-services-VPC_NETWORK_NAME, em que VPC_NETWORK_NAME é o nome da rede VPC que você está conectando (por exemplo, google-managed-services-default). A Descrição é opcional.
  7. Na notação CIDR, selecione a opção Personalizado e insira o intervalo de endereços IP a ser alocado.
  8. Clique em Alocar para criar o intervalo alocado.

gcloud

Escolha uma destas opções:

  • Para especificar um intervalo de endereços e um tamanho de prefixo (máscara de sub-rede), use os sinalizadores addresses e prefix-length. Por exemplo, para alocar o bloco CIDR 192.168.0.0/16, especifique 192.168.0.0 como endereço e 16 como tamanho de prefixo.
  •         gcloud compute addresses create google-managed-services-VPC_NETWORK_NAME \
            --global \
            --purpose=VPC_PEERING \
            --addresses=192.168.0.0 \
            --prefix-length=16 \
            --network=projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME
            
  • Para especificar apenas um tamanho de prefixo (máscara de sub-rede), use a sinalização prefix-length. Quando você omitir o intervalo de endereços, o Google Cloud selecionará automaticamente um intervalo de endereços não utilizado na sua rede VPC. No exemplo a seguir, é selecionado um intervalo de endereços IP não utilizado com um tamanho de prefixo de 16 bits.
  •         gcloud compute addresses create google-managed-services-VPC_NETWORK_NAME \
            --global \
            --purpose=VPC_PEERING \
            --prefix-length=16 \
            --network=projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME
            

Substitua VPC_NETWORK_NAME pelo nome da sua rede VPC, como my-vpc-network.

O exemplo a seguir aloca um intervalo de IP que permite aos recursos na rede VPC my-vpc-network conectarem-se a instâncias do Cloud SQL usando IP privado.

    gcloud compute addresses create google-managed-services-my-vpc-network \
    --global \
    --purpose=VPC_PEERING \
    --prefix-length=16 \
    --network=projects/myprojectid/global/networks/myvpcnetwork \
    --project=my-project
    

Terraform

Para alocar um intervalo de endereços IP, use um recurso do Terraform.

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
}

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

Remova os recursos aplicados anteriormente com a configuração do Terraform executando o seguinte comando e inserindo yes no prompt:

terraform destroy

Crie uma conexão privada

Console

  1. No Console do Google Cloud, acesse a página Redes VPC.

    Acessar redes VPC

  2. Selecione a rede VPC que você quer usar.
  3. Selecione a guia Conexão de serviço particular.
  4. Selecione a guia Conexões particulares com os serviços.
  5. Clique em Criar conexão para criar uma conexão particular entre sua rede e um produtor de serviços.
  6. Em Alocação atribuída, selecione um ou mais intervalos alocados que não estejam sendo usados por outros fornecedores de serviços.
  7. Clique em Conectar para criar a conexão.

gcloud

  1. Crie uma conexão particular.

    gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=google-managed-services-VPC_NETWORK_NAME \
    --network=VPC_NETWORK_NAME \
    --project=PROJECT_ID
    

    O comando inicia uma operação de instância de longa duração do Cloud SQL, retornando um ID de operação.

  2. Verifique se a operação foi bem-sucedida.

    gcloud services vpc-peerings operations describe \
    --name=OPERATION_ID
    

Você pode especificar mais de um intervalo alocado ao criar uma conexão privada. Por exemplo, se um intervalo tiver sido esgotado, será possível atribuir mais intervalos alocados. O serviço usa endereços IP de todos os intervalos fornecidos na ordem que você especificou.

Terraform

Para criar uma conexão particular, use um recurso do Terraform.

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]
}

Uma conta de serviço no formato service-HOST_PROJECT_NUMBER@service-networking.iam.gserviceaccount.com recebe o papel servicenetworking.serviceAgent enquanto a conexão particular é criada porque a conta é provisionada apenas na hora certa.

Se você vir um erro sobre a permissão compute.globalAddresses.list ou compute.projects.get para o projeto, execute este comando gcloud:

gcloud projects add-iam-policy-binding HOST_PROJECT_NAME \
    --member=serviceAccount:service-HOST_PROJECT_NUMBER@service-networking.iam.gserviceaccount.com \
    --role=roles/servicenetworking.serviceAgent

Mudar a configuração do acesso a serviços particulares

É possível mudar o intervalo de endereços alocado de uma conexão privada a serviços sem modificar nenhuma instância atual do Cloud SQL. Para mudar o endereço IP privado de uma instância do Cloud SQL, siga estas etapas.

Para modificar o intervalo de endereços alocado:

Console

  1. No Console do Google Cloud, acesse a página Redes VPC.

    Acessar redes VPC

  2. Selecione a rede VPC que você quer usar.
  3. Selecione a guia Conexão de serviço particular.
  4. Selecione a guia Intervalos de IP alocados para serviços.
  5. Selecione o nome do intervalo que você quer excluir.
  6. Clique em Liberar.
  7. Clique em Alocar intervalo de IP.
  8. Crie um novo intervalo com o mesmo nome.

    O nome é importante porque a conexão privada já foi estabelecida usando esse nome de endereço.

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

Mudar o endereço IP particular de uma instância do Cloud SQL

Para alterar o endereço IP particular de uma instância atual do Cloud SQL, mova-a da rede original para uma rede VPC temporária. Em seguida, altere a configuração de acesso do serviço particular da rede original da instância e mova a instância do Cloud SQL novamente para a rede original.

A fim de migrar para uma rede VPC diferente, siga todas as etapas, exceto a final (remoção da instância), no procedimento a seguir. Nesse caso, TEMPORARY_VPC_NETWORK_NAME é a nova rede VPC. Além disso, exclua a conexão particular anterior. Pode levar alguns dias para que a conexão particular excluída desapareça do console do Google Cloud.

Se a instância do Cloud SQL estiver hospedada em uma rede VPC compartilhada, as variáveis VPC_NETWORK_NAME usadas nas instruções a seguir precisarão ser os nomes de rede VPC do projeto host. Para especificar uma rede com uma rede VPC compartilhada, use o URL completo da rede, por exemplo, projects/HOST_PROJECT/global/networks/NETWORK_NAME.

Console

  1. No Console do Google Cloud, acesse a página Redes VPC.

    Acessar redes VPC

  2. Crie uma rede VPC temporária.
  3. Crie uma alocação de IP na rede VPC temporária.
  4. Crie uma conexão particular na rede VPC temporária.
  5. Mova a instância do Cloud SQL para a rede VPC temporária.

    gcloud beta sql instances patch INSTANCE_ID \
      --project=PROJECT_ID \
      --network=projects/PROJECT_ID/global/networks/TEMPORARY_VPC_NETWORK_NAME \
      --no-assign-ip
    
  6. Altere a configuração de acesso do serviço particular na rede original para adicionar um novo intervalo alocado ou excluir os existentes.

  7. Mova a instância do Cloud SQL novamente para a rede VPC original.

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