Aceda a recursos externos numa rede privada através de um IP externo estático

Esta página explica como pode configurar os seus pools privados para aceder a recursos externos através de um IP externo estático.


Para seguir orientações passo a passo para esta tarefa diretamente na Google Cloud consola, clique em Orientar-me:

Visita guiada


Antes de começar

  • Enable the Cloud Build, Compute Engine, and Service Networking APIs.

    Enable the APIs

  • Para receber as autorizações necessárias para configurar uma ligação privada, peça ao seu administrador para lhe conceder a função do IAM Administrador de rede do Compute Engine (roles/compute.networkAdmin) no projeto do Google Cloud no qual reside a rede da VPC. Para mais informações sobre a concessão de funções, consulte o artigo Gerir acesso.

  • Para usar os comandos gcloud nesta página, instale a CLI do Google Cloud.

Crie uma rede de VPC

Consola

Para criar uma rede VPC através da Google Cloud consola, conclua os seguintes passos:

  1. Abra a página Redes VPC na Google Cloud consola.

    Aceda a redes de VPC

  2. Clique em Criar rede VPC para criar uma nova rede.

    É apresentada a página Criar uma rede de VPC.

  3. Introduza um nome para a sua rede.

  4. Em Modo de criação de sub-rede, selecione Automático.

  5. Se quiser personalizar ainda mais outros campos, consulte o artigo Crie e faça a gestão de redes VPC. Caso contrário, deixe todos os campos como estão.

  6. Clique em Criar para criar a sua rede VPC.

    Depois de clicar em Criar, verá a nova rede VPC na página Redes VPC.

gcloud

Para criar uma rede de VPC através da ferramenta de linha de comandos gcloud, introduza o seguinte comando no terminal, em que NETWORK_NAME é o nome da sua rede de VPC:

gcloud compute networks create NETWORK_NAME \
  --subnet-mode=auto

Depois de clicar em Criar, verá a nova rede VPC na página Redes VPC.

Para saber como criar e gerir redes VPC, consulte o artigo Crie e faça a gestão de redes VPC.

Crie uma ligação privada

Consola

Para criar uma ligação privada entre a sua rede VPC e a rede do produtor de serviços, conclua os seguintes passos:

  1. Abra a página Redes VPC na Google Cloud consola.

    Aceda a redes de VPC

  2. Clique no nome da sua rede.

    É apresentada a página Detalhes da rede VPC.

  3. Clique no separador Ligação de serviço privado.

    1. Selecione o separador Intervalos de IP atribuídos para serviços.

    2. Clique em Atribuir intervalo de IPs.

      É apresentada a caixa de pop-up Atribuir um intervalo de IPs internos.

      1. Introduza um nome para o intervalo de IPs.

      2. Em Intervalo de IP, selecione Automático.

      3. No campo Comprimento do prefixo, introduza um comprimento do prefixo para a sua rede.

      4. Clique em Atribuir para atribuir o seu intervalo de IPs.

    3. Selecione o separador Ligações privadas a serviços.

    4. Clique em Criar associação.

      É apresentado o pop-up Crie uma ligação privada.

      1. Em Atribuição atribuída, selecione o seu intervalo de IPs.

      2. Clique em Ligar.

      Agora, vê a sua associação na tabela no separador Associações privadas a serviços.

      Clique em Ativar (Exportar rota personalizada) para garantir que as rotas para a VPC são aplicadas à rede onde as instâncias do pool privado estão a ser executadas.

Já configurou a sua rede.

gcloud

Para criar uma ligação privada entre a sua rede VPC e a rede do produtor de serviços, conclua os seguintes passos:

  1. Introduza o seguinte comando no terminal para atribuir um intervalo de IPs ao seu serviço:

        gcloud compute addresses create RESERVED_RANGE_NAME \
          --global \
          --prefix-length=PREFIX_LENGTH \
          --network=VPC_NETWORK \
          --project=PROJECT_ID
    

    Onde:

    • RESERVED_RANGE_NAME é o nome do intervalo atribuído. Por exemplo, my-allocated-range.
    • PREFIX_LENGTH é o comprimento do prefixo da sua rede. O comprimento do prefixo tem de ser igual ou inferior a /24, como /22, /21, etc.
    • VPC_NETWORK é o nome da sua rede VPC, como my-vpc-network.
    • PROJECT_ID é o ID do seu projeto que contém a sua rede VPC.
  2. Introduza o seguinte comando no terminal para criar uma ligação privada:

        gcloud services vpc-peerings connect \
          --service=servicenetworking.googleapis.com \
          --ranges=RESERVED_RANGE_NAME \
          --network=VPC_NETWORK \
          --project=PROJECT_ID
    

    Onde:

    • RESERVED_RANGE_NAME é o nome do intervalo atribuído que criou no passo anterior.
    • VPC_NETWORK é o nome da sua rede VPC, como my-vpc-network.
    • PROJECT_ID é o ID do seu projeto que contém a sua rede VPC.
  3. Introduza o seguinte comando no terminal para garantir que os trajetos para a VPC são aplicados à rede onde as instâncias do pool privado estão a ser executadas:

        gcloud compute networks peerings update servicenetworking-googleapis-com \
          --export-custom-routes \
          --network=VPC_NETWORK \
          --project=PROJECT_ID
    

    Onde:

    • VPC_NETWORK é o nome da sua rede VPC, como my-vpc-network.
    • PROJECT_ID é o ID do seu projeto que contém a sua rede VPC.

Já configurou a sua rede.

Para saber como configurar uma rede, consulte o artigo Configurar uma ligação privada entre a sua rede VPC e a rede do produtor de serviços.

Crie um conjunto privado

Consola

Para criar um conjunto privado através da Google Cloud consola, conclua os seguintes passos:

  1. Abra a página Worker Pool na Google Cloud consola:

    Abra a página do grupo de trabalhadores do Cloud Build

  2. Selecione o projeto onde quer criar o conjunto privado.

  3. Na página Conjunto de trabalhadores, clique em Criar.

    É apresentado o painel Criar pool privado.

  4. No painel lateral Criar conjunto privado, introduza as seguintes informações:

    1. Introduza um Nome para o seu conjunto privado.

    2. Selecione uma Região no menu pendente.

    3. Em Rede, introduza as seguintes informações:

    • Projeto: introduza o ID ou o número do projeto.
    • Rede: introduza o nome da sua rede de VPC.
    1. (Opcional) Desmarque a caixa Atribuir IPs externos para a configuração de rede mais restrita.

Criou um conjunto privado.

gcloud

Para criar um conjunto privado através da ferramenta de linha de comandos gcloud, introduza o seguinte comando no terminal:

      gcloud builds worker-pools create PRIVATEPOOL_ID \
        --project=PRIVATEPOOL_PROJECT_ID \
        --region=REGION \
        --peered-network=PEERED_NETWORK \
        --no-public-egress

Onde:

  • PRIVATEPOOL_ID é o identificador exclusivo do seu conjunto privado.
  • PRIVATEPOOL_PROJECT_ID é o ID do Google Cloud projeto onde quer criar o seu conjunto privado.
  • REGION é uma das regiões suportadas.
  • PEERED_NETWORK é o URL do recurso de rede
  • --no-public-egress: se esta flag estiver definida, o conjunto privado é criado sem um endereço IP externo.

Criou um conjunto privado.

Para saber como criar e gerir pools privados, consulte o artigo Criar e gerir pools privados.

Aceda a recursos externos numa rede privada

Por predefinição, os endereços IP externos associados a pools privados do Cloud Build não são estáticos nem configuráveis. São atribuídos por Google Cloud. Se quiser configurar os seus pools privados para aceder a recursos externos a partir da sua rede privada com um IP externo estático, tem de configurar uma máquina virtual (VM) no seu projeto para atuar como uma gateway NAT autogerida para pedidos de proxy à Internet pública. Após isso, tem de configurar rotas personalizadas para encaminhar estes pedidos para a sua VM para garantir que as rotas são trocadas com o projeto de rede de serviços.

Esta secção descreve como pode configurar os seus pools privados para aceder a recursos externos através de um IP externo estático, concluindo os seguintes passos:

  1. Crie um script de arranque para configurar a VM de modo a encaminhar todo o tráfego para a VM e mascarar esse tráfego como proveniente do respetivo endereço IP:

    #! /bin/bash
    set -e
    
    sysctl -w net.ipv4.ip_forward=1
    IFACE=$(ip -brief link | tail -1 | awk  {'print $1'})
    iptables -t nat -A POSTROUTING -o "$IFACE" -j MASQUERADE
    
  2. Configure uma VM na mesma VPC que o seu pool privado com uma regra para permitir que os pedidos sejam encaminhados através da VPC:

    gcloud compute instances create VM_NAME \
      --image-project=ubuntu-os-cloud --image-family=ubuntu-2204-lts \
      --network=NETWORK_NAME \
      --private-network-ip=INTERNAL_IP --can-ip-forward \
      --zone=ZONE \
      --subnet=SUBNETWORK \
      --tags=NAT_TAG  \
      --metadata-from-file=startup-script=STARTUP_SCRIPT
    

    Onde:

    • VM_NAME é o nome que quer indicar para a sua VM.
    • NETWORK_NAME é o nome da rede que criou na secção anterior.
    • INTERNAL_IP é qualquer endereço IP interno válido no intervalo da sub-rede da região da sua VM. Por exemplo, 10.128.0.2.
    • ZONE é a zona associada à sua rede, como us-central1-a.
    • (Opcional) SUBNETWORK é o nome da sua sub-rede. Pode encontrar o nome da sua sub-rede no REST equivalente para a sua sub-rede no seguinte formato: projects/project-id/regions/region/subnetworks/subnetwork-name. Se selecionou Automático em Modo de ligação de sub-rede quando criou uma rede VPC, não tem de especificar este campo.
    • NAT_TAG é o nome da etiqueta da gateway NAT que lhe permite encaminhar pedidos condicionalmente, com base no facto de terem ou não uma etiqueta desta VM. Pode especificar qualquer nome para a etiqueta.
    • STARTUP_SCRIPT é o nome do script de arranque que criou no passo anterior. Por exemplo, startup-script-example.sh. Neste exemplo, a flag --metadata-from-file é usada para transmitir o conteúdo do script de arranque especificado a uma chave denominada startup-script.

    Depois de executar este comando, é apresentado um resultado que contém o valor do IP externo. Tome nota do valor do IP externo. Todo o tráfego da sua pool privada para o seu recurso externo passa por este endereço. Pode optar por usar este endereço para configuração adicional, como configurar regras de firewall na sua rede externa.

  3. Configure uma rota para direcionar todos os pedidos para o recurso externo para a instância criada no passo anterior, permitindo que os seus pedidos sejam encaminhados para as instâncias do pool privado:

    gcloud compute routes create PRIVATE_POOL_ROUTE_NAME \  
      --destination-range=DESTINATION_RANGE \
      --next-hop-address=INTERNAL_IP \
      --network=NETWORK_NAME \
      --priority=POOL_ROUTE_PRIORITY
    

    Onde:

    • PRIVATE_POOL_ROUTE_NAME é o nome que quer dar à sua rota.
    • DESTINATION_RANGE é um intervalo de endereços CIDR válido que contém o destino para o qual quer encaminhar. Por exemplo, uma instância do GitHub Enterprise Edition. Por exemplo, 8.8.8.0/24.
    • INTERNAL_IP é o valor do IP interno obtido no passo anterior. Por exemplo, 10.128.0.2.
    • NETWORK_NAME é o nome da rede que criou na secção anterior.
    • POOL_ROUTE_PRIORITY é o número de prioridade que quer especificar para o seu trajeto.

    Este comando garante que todo o tráfego de uma compilação numa instância de pool privada é encaminhado para a VM de proxy que criou e não é encaminhado diretamente para a Internet pública.

  4. Configure uma rota para encaminhar pedidos do seu proxy das instâncias etiquetadas para o intervalo de IPs de destino externo. O comando seguinte cria uma rota para encaminhar pedidos para a Internet pública associada às instâncias do seu conjunto privado.

    gcloud compute routes create NAT_EGRESS_ROUTE_NAME \ 
      --destination-range=DESTINATION_RANGE \    
      --next-hop-gateway=default-internet-gateway \
      --network=NETWORK_NAME \
      --priority=NAT_ROUTE_PRIORITY \
      --tags=NAT_TAG
    

    Onde:

    • NAT_EGRESS_ROUTE_NAME é o nome que quer atribuir ao trajeto da gateway NAT.
    • DESTINATION_RANGE é a morada do destino para o qual quer traçar uma rota. Por exemplo, uma instância do GitHub Enterprise Edition. Por exemplo, 8.8.8.0/24.
    • NETWORK_NAME é o nome da rede que criou na secção anterior.
    • NAT_TAG é o nome da etiqueta da gateway NAT que lhe permite encaminhar pedidos condicionalmente, com base no facto de terem ou não uma etiqueta desta VM. Pode especificar qualquer nome para a etiqueta.
    • NAT_ROUTE_PRIORITY é o número de prioridade que quer especificar para o seu trajeto.

    Este comando garante que qualquer tráfego da VM de proxy pode ser direcionado para a Internet pública.

  5. Adicione uma regra de firewall para permitir o tráfego da sua pool privada para a VM da gateway NAT:

    gcloud compute firewall-rules create RULE_NAME \
      --direction=INGRESS --priority=FIREWALL_PRIORITY --action=ALLOW --rules=all \
      --network=NETWORK_NAME \
      --source-ranges=RESERVED_RANGE \
      --target-tags=NAT_TAG
    

    Onde:

    • RULE_NAME é o nome que quer atribuir à regra de firewall.
    • FIREWALL_PRIORITY é o número de prioridade que quer especificar para a sua regra de firewall.
    • NETWORK_NAME é o nome da rede que criou na secção anterior.
    • RESERVED_RANGE é o intervalo CIDR que atribuiu quando configurou a sua rede VPC.
    • NAT_TAG é o nome da etiqueta da gateway NAT que lhe permite encaminhar pedidos condicionalmente, com base no facto de terem ou não uma etiqueta desta VM. Pode especificar qualquer nome para a etiqueta.

Agora, pode aceder a recursos externos a partir do endereço IP estático do gateway NAT autogerido na sua VPC.

O que se segue?