Acessar recursos externos em uma rede privada usando um IP externo estático

Nesta página, explicamos como configurar seus pools particulares para acessar recursos externos usando um IP externo estático.


Para seguir as instruções passo a passo desta tarefa diretamente no console do Google Cloud, clique em Orientação:

Orientações


Antes de começar

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

    Enable the APIs

  • Para receber as permissões necessárias para configurar uma conexão particular, peça ao administrador para conceder a você o papel do IAM de Administrador de rede do Compute Engine (roles/compute.networkAdmin) no projeto da Cloud em que a rede VPC está. Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.

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

Crie uma rede VPC

Console

Para criar uma rede VPC usando o console do Google Cloud, siga estas etapas:

  1. Abra a página Redes VPC no console do Google Cloud.

    Acessar redes VPC

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

    A página Criar uma rede VPC vai aparecer.

  3. Insira um Nome para a rede.

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

  5. Se você quiser personalizar outros campos, consulte Criar e gerenciar redes VPC. Caso contrário, deixe todos os campos como estão.

  6. Clique em Criar para criar a rede VPC.

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

gcloud

Para criar uma rede VPC usando a ferramenta de linha de comando gcloud, digite o seguinte comando no terminal, em que NETWORK_NAME é o nome da rede VPC:

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

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

Para saber mais sobre como criar e gerenciar redes VPC, consulte Criar e gerenciar redes VPC.

Crie uma conexão privada

Console

Para criar uma conexão particular entre a rede VPC e a rede do produtor de serviços, siga estas etapas:

  1. Abra a página Redes VPC no console do Google Cloud.

    Acessar redes VPC

  2. Clique no nome da sua rede.

    A página Detalhes da rede VPC vai aparecer.

  3. Clique na guia Conexão de serviço particular.

    1. Selecione a guia Intervalos de IP alocados para serviços.

    2. Clique em Alocar intervalo de IP.

      Você vai encontrar a caixa pop-up Alocar um intervalo de IP interno.

      1. Insira um Nome para o intervalo de IP.

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

      3. No campo Tamanho do prefixo, insira um tamanho de prefixo para sua rede.

      4. Clique em Alocar para alocar seu intervalo de IP.

    3. Selecione a guia Conexões particulares com os serviços.

    4. Clique em Criar conexão.

      O pop-up Criar uma conexão particular vai aparecer.

      1. Em Alocação atribuída, selecione seu intervalo de IP.

      2. Clique em Conectar.

      Agora, sua conexão vai aparecer na tabela na guia Conexões particulares com serviços.

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

Sua rede está configurada.

gcloud

Para criar uma conexão particular entre a rede VPC e a rede do produtor de serviços, siga estas etapas:

  1. Insira o seguinte comando no terminal para alocar um intervalo de IPs para seu serviço:

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

    Em que:

    • RESERVED_RANGE_NAME é o nome do intervalo alocado. Por exemplo, my-allocated-range.
    • PREFIX_LENGTH é o tamanho do prefixo da sua rede. O comprimento do prefixo precisa ser /24 ou menor, como /22, /21 etc.
    • VPC_NETWORK é o nome da rede VPC, como my-vpc-network.
    • PROJECT_ID é o ID do projeto que contém sua rede VPC.
  2. Digite o seguinte comando no terminal para criar uma conexão privada:

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

    Em que:

    • RESERVED_RANGE_NAME é o nome do intervalo alocado que você criou na etapa anterior.
    • VPC_NETWORK é o nome da rede VPC, como my-vpc-network.
    • PROJECT_ID é o ID do projeto que contém sua rede VPC.
  3. Insira o comando a seguir no terminal para garantir que as rotas da VPC sejam aplicadas à rede em que as instâncias do pool particular estão em execução:

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

    Em que:

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

Sua rede está configurada.

Para saber mais sobre como configurar uma rede, consulte Como configurar uma conexão particular entre sua rede VPC e a rede do produtor de serviços.

Criar um pool particular

Console

Para criar um pool privado usando o console do Google Cloud, siga estas etapas:

  1. Abra a página Pool de worker no console do Google Cloud:

    Abrir a página do pool de workers do Cloud Build

  2. Selecione o projeto em que você quer criar o pool privado.

  3. Na página Pool de worker, clique em Criar.

    O painel Criar pool particular vai aparecer.

  4. No painel lateral Criar pool particular, insira as seguintes informações:

    1. Insira um Nome para o pool particular.

    2. Selecione uma Região no menu suspenso.

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

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

Você criou um pool particular.

gcloud

Para criar um pool privado usando a ferramenta de linha de comando gcloud, digite 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

Em que:

  • PRIVATEPOOL_ID é o identificador exclusivo do seu pool privado.
  • PRIVATEPOOL_PROJECT_ID é o ID do projeto do Google Cloud em que você quer criar o pool particular.
  • REGION é uma das regiões com suporte.
  • PEERED_NETWORK é o URL do recurso de rede
  • --no-public-egress: se essa sinalização for definida, o pool privado será criado sem um endereço IP externo.

Você criou um pool particular.

Para saber mais sobre como criar e gerenciar pools particulares, consulte Como criar e gerenciar pools particulares.

Acessar recursos externos em uma rede privada

Por padrão, os endereços IP externos associados a pools privados do Cloud Build não são estáticos nem configuráveis. Elas são atribuídas por Google Cloud. Se você quiser configurar os pools particulares para acessar recursos externos da sua rede particular com um IP externo estático, configure uma máquina virtual (VM) no projeto para atuar como um gateway NAT autogerenciado para solicitações de proxy para a Internet pública. Em seguida, você precisa configurar rotas personalizadas para encaminhar essas solicitações à VM e garantir que as rotas sejam trocadas com o projeto de rede de serviços.

Esta seção descreve como configurar seus pools particulares para acessar recursos externos por um IP externo estático. Para isso, siga estas etapas:

  1. Crie um script de inicialização para configurar a VM a encaminhar qualquer tráfego roteado para ela e disfarçar esse tráfego como originado do 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 do seu pool particular com uma regra para permitir que as solicitações sejam encapsuladas pela 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
    

    Em que:

    • VM_NAME é o nome que você quer dar à VM.
    • NETWORK_NAME é o nome da rede que você criou na seção anterior.
    • INTERNAL_IP é qualquer endereço IP interno válido dentro do intervalo da sub-rede da região da VM. Por exemplo, 10.128.0.2.
    • ZONE é a zona associada à sua rede, como us-central1-a.
    • (Opcional) SUBNETWORK é o nome da sub-rede. O nome da sub-rede pode ser encontrado no REST equivalente para a sub-rede no seguinte formato: projects/project-id/regions/region/subnetworks/subnetwork-name. Se você selecionou Automático em Modo de conexão de sub-rede ao criar uma rede VPC, não é necessário especificar esse campo.
    • NAT_TAG é o nome da tag do gateway NAT que permite rotear solicitações condicionalmente, com base na presença ou ausência de uma tag dessa VM. É possível especificar qualquer nome para a tag.
    • STARTUP_SCRIPT é o nome do script de inicialização criado na etapa anterior. Por exemplo, startup-script-example.sh. Neste exemplo, a flag --metadata-from-file é usada para transmitir o conteúdo do script de inicialização especificado para uma chave chamada startup-script.

    Depois de executar esse comando, você vai ver uma saída que contém o valor do IP externo. Anote o valor do IP externo. Todo o tráfego do pool particular para o recurso externo chega por esse endereço. Você pode usar esse endereço para outras configurações, como configurar regras de firewall na sua rede externa.

  3. Configure uma rota para direcionar todas as solicitações ao recurso externo para a instância criada na etapa anterior, permitindo que as solicitações sejam encaminhadas para as instâncias do pool particular:

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

    Em que:

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

    Esse comando garante que todo o tráfego de um build em uma instância de pool particular seja roteado para a VM de proxy criada, e não diretamente para a Internet pública.

  4. Configure uma rota para encaminhar solicitações do proxy das instâncias marcadas para o intervalo de IP de destino externo. O comando a seguir cria uma rota para encaminhar solicitações para a Internet pública associada às instâncias de pool particular.

    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
    

    Em que:

    • NAT_EGRESS_ROUTE_NAME é o nome que você quer dar à rota do gateway NAT.
    • DESTINATION_RANGE é o endereço do destino para onde você quer encaminhar. Por exemplo, uma instância do GitHub Enterprise Edition. Por exemplo, 8.8.8.0/24.
    • NETWORK_NAME é o nome da rede que você criou na seção anterior.
    • NAT_TAG é o nome da tag do gateway NAT que permite rotear solicitações condicionalmente, com base na presença ou ausência de uma tag dessa VM. É possível especificar qualquer nome para a tag.
    • NAT_ROUTE_PRIORITY é o número de prioridade que você quer especificar para a rota.

    Esse comando garante que todo o tráfego da VM do proxy possa ser direcionado para a Internet pública.

  5. Adicione uma regra de firewall para permitir o tráfego do pool particular na VM de 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
    

    Em que:

    • RULE_NAME é o nome que você quer dar à regra de firewall.
    • FIREWALL_PRIORITY é o número de prioridade que você quer especificar para a regra de firewall.
    • NETWORK_NAME é o nome da rede que você criou na seção anterior.
    • RESERVED_RANGE é o intervalo CIDR que você alocou ao configurar sua rede VPC.
    • NAT_TAG é o nome da tag do gateway NAT que permite rotear solicitações condicionalmente, com base na presença ou ausência de uma tag dessa VM. É possível especificar qualquer nome para a tag.

Agora é possível acessar recursos externos pelo endereço IP estático do gateway NAT autogerido na VPC.

A seguir