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

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


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

Orientações


Antes de começar

  • Ative as APIs Cloud Build, Compute Engine, and Service Networking.

    Ative as APIs

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

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

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 rede.

    Você verá a página Criar uma rede VPC.

  3. Digite 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, não mexa em todos os campos.

  6. Clique em Criar para gerar a rede VPC.

    Depois de clicar em Criar, sua nova rede VPC será exibida na página Redes VPC.

gcloud

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

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

Depois de clicar em Criar, sua nova rede VPC será exibida 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 sua rede VPC e a rede do produtor de serviços, conclua as seguintes etapas:

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

    Acessar redes VPC

  2. Clique no nome da rede.

    A página Detalhes da rede VPC vai aparecer.

  3. Clique na guia Private Service Connection.

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

    2. Clique em Alocar intervalo de IP.

      A caixa pop-up Alocar um intervalo de IP interno vai aparecer.

      1. Digite um Nome para o intervalo de IP.

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

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

      4. Clique em Alocar para alocar o 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 você verá sua conexão na tabela na guia Conexões particulares com os 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 particular estão em execução.

Sua rede está configurada.

gcloud

Para criar uma conexão particular entre sua rede VPC e a rede do produtor de serviços, conclua as seguintes etapas:

  1. Digite o seguinte comando no seu terminal para alocar um intervalo de IP 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 rede. O comprimento do prefixo precisa ser /24 ou menor, como /22, /21 etc.
    • VPC_NETWORK é o nome da sua rede VPC, como my-vpc-network.
    • PROJECT_ID é o ID do projeto que contém a rede VPC.
  2. Digite o seguinte comando no seu terminal para criar uma conexão particular:

        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 criado na etapa anterior.
    • VPC_NETWORK é o nome da sua rede VPC, como my-vpc-network.
    • PROJECT_ID é o ID do projeto que contém a rede VPC.
  3. Digite o seguinte comando no terminal para garantir que as rotas da VPC sejam aplicadas à rede em que as instâncias do pool particular estão sendo executadas:

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

    Em que:

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

Sua rede está configurada.

Para saber 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 workers 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 privado será exibido.

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

    1. Digite um Nome para o pool particular.

    2. Selecione uma Região no menu suspenso.

    3. Em Network, digite as seguintes informações:

    • Projeto: digite o ID ou o 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 seu 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 pool particular.
  • 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 externo associados aos pools particulares do Cloud Build não são estáticos ou configuráveis. Eles são atribuídos pelo Google Cloud. Se você quiser configurar pools particulares para acessar recursos externos da rede particular com um IP externo estático, configure uma máquina virtual (VM) no projeto para atuar como um gateway NAT autogerenciado para proxy de solicitações para a Internet pública. Depois disso, configure rotas personalizadas para encaminhar essas solicitações à VM e garantir que as rotas sejam trocadas com o projeto de rede de serviço.

Nesta seção, descrevemos como configurar pools particulares para acessar recursos externos por meio de um IP externo estático ao concluir as etapas a seguir:

  1. Crie um script de inicialização para configurar a VM a fim de fazer proxy de qualquer tráfego roteado para ela e mascarar esse tráfego como se ele fosse proveniente 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 que o pool particular com uma regra para permitir que as solicitações sejam encaminhadas por proxy 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 fornecer para a 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 da sub-rede no seguinte formato: projects/project-id/regions/region/subnetworks/subnetwork-name. Se você selecionou Automático em Modo de conexão da sub-rede ao criar uma rede VPC, não será necessário especificar esse campo.
    • NAT_TAG é o nome da tag do gateway NAT que permite encaminhar solicitações condicionalmente, com base em se elas têm ou não uma tag dessa VM. Você pode 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 sinalização --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ê 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 vem por esse endereço. Você pode optar por usar esse endereço para outras configurações, como definir regras de firewall na rede externa.

  3. Configure uma rota para direcionar todas as solicitações ao recurso externo para acessar a instância criada na etapa anterior, permitindo que suas 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 ao trajeto.
    • 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 do IP interno extraído da 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 qualquer tráfego de uma compilação em uma instância de pool particular seja roteado para a VM do proxy que você criou, 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 do pool 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
    

    Em que:

    • NAT_EGRESS_ROUTE_NAME é o nome que você quer dar à rota do gateway NAT.
    • DESTINATION_RANGE é o endereço do destino para o qual você quer rotear. 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 encaminhar solicitações condicionalmente, com base em se elas têm ou não uma tag dessa VM. Você pode especificar qualquer nome para a tag.
    • NAT_ROUTE_PRIORITY é o número da prioridade que você quer especificar para a rota.

    Esse comando garante que qualquer 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 para a VM do 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 da 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 a rede VPC.
    • NAT_TAG é o nome da tag do gateway NAT que permite encaminhar solicitações condicionalmente, com base em se elas têm ou não uma tag dessa VM. Você pode especificar qualquer nome para a tag.

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

A seguir