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 uma 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 do Cloud em que a rede VPC está localizada. Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.

  • Para usar os comandos do 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, conclua as etapas a seguir:

  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.

    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 quiser personalizar ainda mais 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 Redes VPC.

gcloud

Para criar uma rede VPC usando a ferramenta de linha de comando gcloud, digite o seguinte comando no seu 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, a nova rede VPC vai aparecer na Redes VPC.

Para aprender a 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 o serviço de produção, siga estas etapas:

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

    Acessar redes VPC

  2. Clique no nome da rede.

    Você verá a página Detalhes da rede VPC.

  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ê verá a caixa pop-up Alocar um intervalo de IP interno.

      1. Digite um Nome para o intervalo de IP.

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

      3. No campo Comprimento do prefixo, digite o tamanho do prefixo para sua rede.

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

    3. Selecione a guia Conexões privadas 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 abaixo do Guia Conexões privadas com os Serviços.

      Clique em Ativar (Exportar rota personalizada) para garantir que as rotas do são aplicadas à rede em que o pool privado instâncias estão em execução.

Você configurou sua rede.

gcloud

Para criar uma conexão particular entre sua rede VPC e o serviço de produção, siga estas 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 tamanho do prefixo precisa ser /24 ou inferior, 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 VPC. em uma 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 que você criados 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 VPC. em uma rede VPC.
  3. Digite o seguinte comando no seu terminal para garantir que as rotas da VPC sejam aplicadas à rede em que as instâncias do pool privado 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 sua rede VPC, como my-vpc-network.
    • PROJECT_ID é o ID do projeto que contém a VPC. em uma rede VPC.

Você configurou sua rede.

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, conclua as seguintes etapas:

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

    Abrir a página "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.

    Você verá o painel Criar pool privado.

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

    1. Digite um Nome para o pool privado.

    2. Selecione uma Região no menu suspenso.

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

    • Projeto: digite 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 privado.

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 privado.
  • PRIVATEPOOL_PROJECT_ID é o ID do projeto do Google Cloud. em que você quer criar o pool privado.
  • 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 privado.

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 ao Cloud Build os pools particulares não são estáticos nem configuráveis. Elas são atribuídas pelo Google Cloud. Se você quiser configurar seus pools privados para acessar da sua rede privada a um IP externo estático, é preciso configurar máquina virtual (VM) no projeto para atuar como um gateway NAT autogerenciado para solicitações de proxy para a Internet pública. Depois disso, você precisa configurar rotas para encaminhar essas solicitações à VM e garantir a troca das rotas com o projeto de rede de serviços.

Nesta seção, descrevemos como configurar seus pools privados para acessar por um IP externo estático seguindo estas etapas:

  1. Criar um script de inicialização para configurar a VM para proxy de qualquer tráfego roteado da VM e disfarçar esse tráfego como originário do seu 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. Configurar uma VM na mesma VPC que o pool privado 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 em o 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 da sub-rede pode ser encontrado no REST equivalente para sua sub-rede neste 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, faça o seguinte: não é necessário especificar esse campo.
    • NAT_TAG é o nome da tag do gateway NAT. que permite rotear solicitações condicionalmente, eles têm uma tag desta VM. É possível especificar qualquer nome para a tag.
    • STARTUP_SCRIPT é o nome da inicialização. o script que você criou 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 chamado startup-script.

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

  3. Configurar uma rota para direcionar todas as solicitações ao recurso externo para acessar a instância criado na etapa anterior, permitindo que suas solicitações sejam encaminhadas 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
    

    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 contenham 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 recebido 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 da prioridade que você quer especificar para a rota.

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

  4. Configure uma rota para encaminhar solicitações do seu proxy das instâncias marcadas para o 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 suas instâncias de 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 ao do gateway de NAT.
    • DESTINATION_RANGE é o endereço do destino para onde 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 rotear solicitações condicionalmente, eles têm uma tag desta VM. É possível especificar qualquer nome para a tag.
    • NAT_ROUTE_PRIORITY é o número da prioridade que você quer especificar para o trajeto.

    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 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ê alocado ao configurar sua rede VPC.
    • NAT_TAG é o nome da tag do gateway NAT. que permite rotear solicitações condicionalmente, eles têm uma tag desta VM. É possível especificar qualquer nome para a tag.

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

A seguir