Configurar acesso a serviços privados

Esta página descreve como configurar o acesso a serviços privados na sua rede VPC.

O acesso a serviços privados é implementado como uma conexão de peering VPC entre sua rede VPC e a rede subjacente Google Cloud Rede VPC onde sua instância do Cloud SQL reside. A conexão privada permite que 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 endereços IP externos para acessar serviços disponíveis por meio do acesso privado a serviços .

Antes de começar

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

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

Se você não tiver essas permissões, poderá receber erros de permissões insuficientes.

Se estiver usando uma rede VPC compartilhada , você também deverá:

  • Adicione seu usuário ao projeto host.
  • Atribua as mesmas quatro permissões a esse usuário no projeto host.
  • Conceda a permissão IAM compute.globalAddresses.list ao usuário.

Configurar acesso a serviços privados para o Cloud SQL

O processo de configuração de acesso a serviços privados tem duas partes:

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

    Você também tem a opção de permitir que o Google aloque o intervalo para você. Nesse caso, o Google alocará automaticamente um intervalo de IP de comprimento de prefixo /20 e usará o nome default-ip-range .

    Se você for criar instâncias em várias regiões ou para diferentes tipos de banco de dados, precisará 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 Filestore ou Memorystore . Para uma nova região ou tipo de banco de dados, o Cloud SQL precisa ter um intervalo /24 livre.

  • Criando uma conexão privada da sua rede VPC para a rede do produtor de serviço subjacente.

Alocar um intervalo de endereços IP

Console

  1. No Google Cloud console, vá para a página de redes VPC .

    Ir para redes VPC

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

gcloud

Faça um dos seguintes:

  • Para especificar um intervalo de endereços e um comprimento 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 para o endereço e 16 para o comprimento do 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 o comprimento do prefixo (máscara de sub-rede), use o sinalizador prefix-length . Ao omitir o intervalo de endereços, Google Cloudseleciona automaticamente um intervalo de endereços não utilizado na sua rede VPC. O exemplo a seguir seleciona um intervalo de endereços IP não utilizado com um comprimento 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 que recursos na rede VPC my-vpc-network se conectem 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
}

Aplicar as alterações

Para aplicar sua configuração do Terraform em um Google Cloud projeto, conclua as etapas nas seções a seguir.

Preparar o Cloud Shell

  1. Inicie o Cloud Shell .
  2. Defina o padrão Google Cloud projeto onde você deseja aplicar suas configurações do Terraform.

    Você só precisa executar este comando uma vez por projeto e pode executá-lo em qualquer diretório.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    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 deve ter seu 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 deve ter a extensão .tf — por exemplo, main.tf Neste tutorial, o arquivo será chamado de main.tf
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Se estiver seguindo um tutorial, você pode copiar o código de exemplo em cada seção ou etapa.

    Copie o código de exemplo no main.tf recém-criado.

    Opcionalmente, copie o código do GitHub. Isso é recomendado quando o snippet do Terraform faz parte de uma solução completa.

  3. Revise e modifique os parâmetros de amostra para aplicar ao seu ambiente.
  4. Salve suas 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

Aplicar as alterações

  1. Revise a configuração e verifique se os recursos que o Terraform irá criar ou atualizar correspondem às suas expectativas:
    terraform plan

    Faça correções na configuração conforme necessário.

  2. Aplique a configuração do Terraform executando o seguinte comando e digitando yes no prompt:
    terraform apply

    Aguarde até que o Terraform exiba a mensagem "Aplicação concluída!".

  3. Abra seu Google Cloud projeto para visualizar os resultados. No Google Cloud console, navegue até seus recursos na interface do usuário para garantir que o Terraform os criou ou atualizou.

Excluir as alterações

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

terraform destroy

Crie uma conexão privada

Console

  1. No Google Cloud console, vá para a página de redes VPC .

    Ir para redes VPC

  2. Selecione a rede VPC que você deseja usar.
  3. Selecione a aba Conexão de serviço privada .
  4. Selecione a aba Conexões privadas para serviços .
  5. Clique em Criar conexão para criar uma conexão privada entre sua rede e um produtor de serviço.
  6. Para a alocação atribuída , selecione um ou mais intervalos alocados existentes que não estejam sendo usados ​​por outros produtores de serviços.
  7. Clique em Conectar para criar a conexão.

gcloud

  1. Crie uma conexão privada.

    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 execuçã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 estiver esgotado, você pode atribuir intervalos alocados adicionais. O serviço usa endereços IP de todos os intervalos fornecidos na ordem que você especificou.

Terraform

Para criar uma conexão privada, 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 service- HOST_PROJECT_NUMBER @service-networking.iam.gserviceaccount.com o formato recebe a função servicenetworking.serviceAgent enquanto a conexão privada é criada porque a conta é provisionada just-in-time .

Se você vir um erro sobre a permissão compute.globalAddresses.list ou a permissão 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

Alterar a configuração de acesso ao serviço privado

Você pode alterar o intervalo de endereços alocados de uma conexão de serviço privada sem modificar nenhuma instância existente do Cloud SQL. Para alterar o endereço IP privado de uma instância existente do Cloud SQL, siga estas etapas .

Para alterar o intervalo de endereços alocado:

Console

  1. No Google Cloud console, vá para a página de redes VPC .

    Ir para redes VPC

  2. Selecione a rede VPC que você deseja usar.
  3. Selecione a aba Conexão de serviço privada .
  4. Selecione a aba Intervalos de IP alocados para serviços .
  5. Selecione o nome do intervalo que você deseja excluir.

  6. Clique em Liberar .

  7. Clique em Alocar intervalo de IP .

  8. Crie um novo intervalo com o mesmo nome e novo intervalo

    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

Alterar o endereço IP privado de uma instância existente do Cloud SQL

Para alterar o endereço IP privado de uma instância existente do Cloud SQL, mova a instância de sua rede original para uma rede VPC temporária. Em seguida, altere a configuração de acesso ao serviço privado da rede original da instância e mova a instância do Cloud SQL de volta para sua rede original.

Para migrar para uma rede VPC diferente, siga todas as etapas, exceto a última (retornar a instância) do procedimento a seguir. Neste caso, TEMPORARY_VPC_NETWORK_NAME é a nova rede VPC. Além disso, exclua a conexão privada antiga . Pode levar alguns dias para que a conexão privada excluída desapareça da rede.Google Cloud console.

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 deverão ser os nomes de rede VPC do projeto host. Para especificar uma rede com uma VPC compartilhada, use a URL completa da rede — por exemplo, projects/HOST_PROJECT/global/networks/NETWORK_NAME .

Console

  1. No Google Cloud console, vá para a página de redes VPC .

    Ir para 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 privada 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 ao serviço privado na rede original para adicionar um novo intervalo alocado ou excluir os existentes.

  7. Mova a instância do Cloud SQL de volta 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