Configure o 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 ligação de intercâmbio da VPC entre a sua rede da VPC e a rede da VPC Google Cloud subjacente onde a sua instância do Cloud SQL reside. A ligação privada permite que as instâncias de VM na sua rede VPC e os serviços aos quais acede comuniquem exclusivamente através de endereços IP internos. As instâncias de VM não precisam de acesso à Internet nem de endereços IP externos para alcançar serviços disponíveis através do acesso privado a serviços.

Antes de começar

O Cloud SQL requer acesso privado a serviços para cada rede VPC usada para ligações de IP privado. Para gerir uma associação de acesso a serviços privados, o utilizador deve ter as seguintes autorizações do IAM:

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

Se não tiver estas autorizações, pode receber erros de autorizações insuficientes.

Se estiver a usar uma rede VPC partilhada, também tem de:

  • Adicione o utilizador ao projeto anfitrião.
  • Atribua as mesmas quatro autorizações a esse utilizador no projeto anfitrião.
  • Conceda a autorização de IAM compute.globalAddresses.list ao utilizador.

Configure o acesso privado a serviços para o Cloud SQL

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

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

    Também tem a opção de permitir que a Google atribua o intervalo por si. Neste caso, a Google atribui automaticamente um intervalo de IP com o comprimento do prefixo /20 e usa o nome default-ip-range.

    Se for criar instâncias em várias regiões ou para diferentes tipos de bases de dados, tem de ter um intervalo mínimo de /24 de endereços IP disponíveis para cada região ou tipo de base de dados. Isto inclui outras aplicações, como o Filestore ou o Memorystore. Para uma nova região ou tipo de base de dados, o Cloud SQL tem de ter um intervalo /24 gratuito.

  • Criar uma ligação privada da sua rede VPC à rede do produtor de serviços subjacente.

Atribua um intervalo de endereços IP

Consola

  1. Na Google Cloud consola, aceda à página Redes VPC.

    Aceda a redes de VPC

  2. Selecione a rede de VPC que quer usar.
  3. Selecione o separador Ligação de serviço privada.
  4. Selecione o separador Intervalos de IP atribuídos para serviços.
  5. Clique em Atribuir intervalo de IPs.
  6. Para o Nome do intervalo alocado, especifique google-managed-services-VPC_NETWORK_NAME, onde VPC_NETWORK_NAME é o nome da rede VPC à qual está a estabelecer ligação (por exemplo, google-managed-services-default). A Descrição é opcional.
  7. Selecione a opção Personalizado e, em seguida, introduza o intervalo de endereços IP a atribuir, na notação CIDR.
  8. Clique em Atribuir para criar o intervalo atribuído.

gcloud

Efetue um dos seguintes passos:

  • Para especificar um intervalo de endereços e um comprimento do prefixo (máscara de sub-rede), use as flags addresses e prefix-length. Por exemplo, para atribuir 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 um comprimento do prefixo (máscara de sub-rede), use a flag prefix-length. Quando omite o intervalo de endereços,o Google Cloud seleciona automaticamente um intervalo de endereços não usado na sua rede VPC. Google CloudO exemplo seguinte seleciona um intervalo de endereços IP não usado com um comprimento do 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 seguinte atribui um intervalo de IP que permite que os recursos na rede VPC my-vpc-network se liguem a instâncias do Cloud SQL através de 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 atribuir 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 num Google Cloud projeto, conclua os passos nas secções seguintes.

Prepare o Cloud Shell

  1. Inicie o Cloud Shell.
  2. Defina o Google Cloud projeto predefinido onde quer aplicar as suas configurações do Terraform.

    Só tem de executar este comando uma vez por projeto e pode executá-lo em qualquer diretório.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    As variáveis de ambiente são substituídas se definir valores explícitos no ficheiro de configuração do Terraform.

Prepare o diretório

Cada ficheiro de configuração do Terraform tem de ter o seu próprio diretório (também denominado módulo raiz).

  1. No Cloud Shell, crie um diretório e um novo ficheiro nesse diretório. O nome do ficheiro tem de ter a extensão .tf, por exemplo, main.tf. Neste tutorial, o ficheiro é denominado main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Se estiver a seguir um tutorial, pode copiar o código de exemplo em cada secção ou passo.

    Copie o exemplo de código para o ficheiro main.tf criado recentemente.

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

  3. Reveja e modifique os parâmetros de exemplo para aplicar ao seu ambiente.
  4. Guarde as alterações.
  5. Inicialize o Terraform. Só tem de fazer isto uma vez por diretório.
    terraform init

    Opcionalmente, para usar a versão mais recente do fornecedor Google, inclua a opção -upgrade:

    terraform init -upgrade

Aplique as alterações

  1. Reveja a configuração e verifique se os recursos que o Terraform vai criar ou atualizar correspondem às suas expetativas:
    terraform plan

    Faça as correções necessárias à configuração.

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

    Aguarde até que o Terraform apresente a mensagem "Apply complete!" (Aplicação concluída!).

  3. Abra o seu Google Cloud projeto para ver os resultados. Na Google Cloud consola, navegue para os seus recursos na IU para se certificar de que o Terraform os criou ou atualizou.

Eliminar as alterações

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

terraform destroy

Crie uma ligação privada

Consola

  1. Na Google Cloud consola, aceda à página Redes VPC.

    Aceda a redes de VPC

  2. Selecione a rede de VPC que quer usar.
  3. Selecione o separador Ligação de serviço privada.
  4. Selecione o separador Ligações privadas a serviços.
  5. Clique em Criar ligação para criar uma ligação privada entre a sua rede e um produtor de serviços.
  6. Para a Atribuição atribuída, selecione um ou mais intervalos atribuídos existentes que não estejam a ser usados por outros produtores de serviços.
  7. Clique em Associar para criar a associação.

gcloud

  1. Crie uma ligaçã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 do Cloud SQL de longa duração e devolve um ID de operação.

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

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

Pode especificar mais do que um intervalo atribuído quando cria uma ligação privada. Por exemplo, se um intervalo tiver sido esgotado, pode atribuir intervalos adicionais. O serviço usa endereços IP de todos os intervalos fornecidos na ordem que especificou.

Terraform

Para criar uma ligaçã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]
}

É concedida a função servicenetworking.serviceAgent a uma conta de serviço no formato service-HOST_PROJECT_NUMBER@service-networking.iam.gserviceaccount.com enquanto a ligação privada é criada, porque a conta é aprovisionada just-in-time.

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

Altere a configuração do acesso privado ao serviço

Pode alterar o intervalo de endereços atribuído de uma ligação de serviço privada sem modificar nenhuma instância do Cloud SQL existente. Para alterar o endereço IP privado de uma instância do Cloud SQL existente, siga estes passos.

Para alterar o intervalo de endereços atribuído:

Consola

  1. Na Google Cloud consola, aceda à página Redes VPC.

    Aceda a redes de VPC

  2. Selecione a rede de VPC que quer usar.
  3. Selecione o separador Ligação de serviço privada.
  4. Selecione o separador Intervalos de IP atribuídos para serviços.
  5. Selecione o nome do intervalo que quer eliminar.

  6. Clique em Retirar.

  7. Clique em Atribuir intervalo de IPs.

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

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

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

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

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

Para mudar para uma rede VPC diferente, siga todos os passos, exceto o passo final (mover a instância novamente), no procedimento seguinte. Neste caso, a TEMPORARY_VPC_NETWORK_NAME é a nova rede de VPC. Além disso, elimine a ligação privada antiga. A ligação privada eliminada pode demorar alguns dias a desaparecer daGoogle Cloud consola.

Se a instância do Cloud SQL estiver alojada numa rede de VPC partilhada, as variáveis usadas nas instruções seguintes têm de ser os nomes das redes de VPC do projeto anfitrião.VPC_NETWORK_NAME Para especificar uma rede com uma rede VPC partilhada, use o URL completo da rede, por exemplo, projects/HOST_PROJECT/global/networks/NETWORK_NAME.

Consola

  1. Na Google Cloud consola, aceda à página Redes VPC.

    Aceda a redes de VPC

  2. Crie uma rede de VPC temporária.
  3. Crie uma atribuição de IP na rede VPC temporária.
  4. Crie uma ligaçã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 do acesso a serviços privados na rede original para adicionar um novo intervalo atribuído ou eliminar 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