Accedere alle risorse esterne in una rete privata utilizzando un IP esterno statico

Questa pagina spiega come configurare i pool privati per accedere a risorse esterne tramite un IP esterno statico.


Per seguire le indicazioni dettagliate per questa attività direttamente nella Google Cloud console, fai clic su Procedura guidata:

Procedura guidata


Prima di iniziare

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

    Enable the APIs

  • Per ottenere le autorizzazioni necessarie per configurare una connessione privata, chiedi all'amministratore di concederti il ruolo IAM Amministratore rete Compute Engine (roles/compute.networkAdmin) nel progetto Cloud in cui si trova la rete VPC. Per ulteriori informazioni sulla concessione dei ruoli, consulta Gestire l'accesso.

  • Per utilizzare i comandi gcloud in questa pagina, installa Google Cloud CLI.

Crea una rete VPC

Console

Per creare una rete VPC utilizzando la console Google Cloud , completa i seguenti passaggi:

  1. Apri la pagina Reti VPC nella console Google Cloud .

    Vai a Reti VPC

  2. Fai clic su Crea rete VPC per creare una nuova rete.

    Viene visualizzata la pagina Crea una rete VPC.

  3. Inserisci un nome per la rete.

  4. In Modalità di creazione subnet, seleziona Automatica.

  5. Se vuoi personalizzare ulteriormente altri campi, consulta Crea e gestisci le reti VPC. In caso contrario, lascia tutti i campi invariati.

  6. Fai clic su Crea per creare la rete VPC.

    Dopo aver fatto clic su Crea, vedrai la nuova rete VPC nella pagina Reti VPC.

gcloud

Per creare una rete VPC utilizzando lo strumento a riga di comando gcloud, inserisci questo comando nel terminale, dove NETWORK_NAME è il nome della tua rete VPC:

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

Dopo aver fatto clic su Crea, vedrai la nuova rete VPC nella pagina Reti VPC.

Per scoprire di più sulla creazione e sulla gestione delle reti VPC, consulta Crea e gestisci le reti VPC.

Crea una connessione privata

Console

Per creare una connessione privata tra la tua rete VPC e la rete del producer di servizi, completa i seguenti passaggi:

  1. Apri la pagina Reti VPC nella console Google Cloud .

    Vai a Reti VPC

  2. Fai clic sul nome della tua emittente.

    Viene visualizzata la pagina Dettagli rete VPC.

  3. Fai clic sulla scheda Private Service Connect.

    1. Seleziona la scheda Intervalli IP allocati per i servizi.

    2. Fai clic su Assegna intervallo IP.

      Visualizzerai la casella popup Assegna un intervallo IP interno.

      1. Inserisci un nome per l'intervallo IP.

      2. In Intervallo IP, seleziona Automatico.

      3. Nel campo Lunghezza prefisso, inserisci una lunghezza del prefisso per la tua rete.

      4. Fai clic su Alloca per allocare l'intervallo IP.

    3. Seleziona la scheda Connessioni private ai servizi.

    4. Fai clic su Crea connessione.

      Verrà visualizzato il popup Crea una connessione privata.

      1. Nella sezione Allocazione assegnata, seleziona il tuo intervallo IP.

      2. Fai clic su Connetti.

      Ora vedrai la connessione nella tabella nella scheda Connessioni private ai servizi.

      Fai clic su Attiva (Esporta route personalizzata) per assicurarti che le route per VPC vengano applicate alla rete in cui sono in esecuzione le istanze del pool privato.

A questo punto, hai configurato la rete.

gcloud

Per creare una connessione privata tra la tua rete VPC e la rete del producer di servizi, completa i seguenti passaggi:

  1. Inserisci il seguente comando nel terminale per allocare un intervallo IP per il tuo servizio:

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

    Dove:

    • RESERVED_RANGE_NAME è il nome dell'intervallo allocato. Ad esempio, my-allocated-range.
    • PREFIX_LENGTH è la lunghezza del prefisso della tua rete. La lunghezza del prefisso deve essere /24 o inferiore, ad esempio /22, /21 e così via.
    • VPC_NETWORK è il nome della tua rete VPC, ad esempio my-vpc-network.
    • PROJECT_ID è l'ID del progetto che contiene la rete VPC.
  2. Inserisci questo comando nel terminale per creare una connessione privata:

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

    Dove:

    • RESERVED_RANGE_NAME è il nome dell'intervallo allocato che hai creato nel passaggio precedente.
    • VPC_NETWORK è il nome della tua rete VPC, ad esempio my-vpc-network.
    • PROJECT_ID è l'ID del progetto che contiene la rete VPC.
  3. Inserisci questo comando nel terminale per assicurarti che le route per VPC vengano applicate alla rete in cui sono in esecuzione le istanze del pool privato:

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

    Dove:

    • VPC_NETWORK è il nome della tua rete VPC, ad esempio my-vpc-network.
    • PROJECT_ID è l'ID del progetto che contiene la rete VPC.

A questo punto, hai configurato la rete.

Per saperne di più sulla configurazione di una rete, consulta Configurazione di una connessione privata tra la tua rete VPC e la rete del producer di servizi.

Crea un pool privato

Console

Per creare un pool privato utilizzando la console Google Cloud , completa i seguenti passaggi:

  1. Apri la pagina Pool di worker nella console Google Cloud :

    Apri la pagina Pool di worker di Cloud Build

  2. Seleziona il progetto in cui vuoi creare il pool privato.

  3. Nella pagina Pool di worker, fai clic su Crea.

    Viene visualizzato il riquadro Crea pool privato.

  4. Nel riquadro laterale Crea pool privato, inserisci le seguenti informazioni:

    1. Inserisci un nome per il pool privato.

    2. Seleziona una Regione dal menu a discesa.

    3. Nella sezione Rete, inserisci le seguenti informazioni:

    • Progetto: inserisci l'ID o il numero del progetto.
    • Rete: inserisci il nome della tua rete VPC.
    1. (Facoltativo) Deseleziona la casella Assegna IP esterni per la configurazione di rete più restrittiva.

Ora hai creato un pool privato.

gcloud

Per creare un pool privato utilizzando lo strumento a riga di comando gcloud, inserisci il seguente comando nel terminale:

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

Dove:

  • PRIVATEPOOL_ID è l'identificatore univoco del tuo pool privato.
  • PRIVATEPOOL_PROJECT_ID è l'ID del progetto Google Cloud in cui vuoi creare il pool privato.
  • REGION è una delle regioni supportate.
  • PEERED_NETWORK è l'URL della risorsa di rete
  • --no-public-egress: se questo flag è impostato, il pool privato viene creato senza un indirizzo IP esterno.

Ora hai creato un pool privato.

Per scoprire di più su come creare e gestire i pool privati, consulta Creazione e gestione dei pool privati.

Accedere a risorse esterne in una rete privata

Per impostazione predefinita, gli indirizzi IP esterni associati ai pool privati di Cloud Build non sono statici o configurabili. Sono assegnati da Google Cloud. Se vuoi configurare i tuoi pool privati per accedere a risorse esterne dalla tua rete privata con un IP esterno statico, devi configurare una macchina virtuale (VM) nel tuo progetto che funga da gateway NAT autogestito per eseguire il proxy delle richieste a internet pubblico. Dopodiché, devi configurare route personalizzate per inoltrare queste richieste alla tua VM per assicurarti che le route vengano scambiate con il progetto di networking dei servizi.

Questa sezione descrive come configurare i pool privati per accedere alle risorse esterne tramite un IP esterno statico completando i seguenti passaggi:

  1. Crea uno script di avvio per configurare la VM in modo che funga da proxy per tutto il traffico instradato alla VM e mascheri il traffico come se provenisse dal suo indirizzo 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. Configura una VM nello stesso VPC del pool privato con una regola per consentire il proxy delle richieste tramite il 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
    

    Dove:

    • VM_NAME è il nome che vuoi fornire per la VM.
    • NETWORK_NAME è il nome della rete che hai creato nella sezione precedente.
    • INTERNAL_IP è un indirizzo IP interno valido all'interno dell'intervallo della subnet della regione della VM. Ad esempio, 10.128.0.2.
    • ZONE è la zona associata alla tua rete, ad esempio us-central1-a.
    • (Facoltativo) SUBNETWORK è il nome della tua subnet. Il nome della subnet è disponibile nel REST equivalente per la subnet nel seguente formato: projects/project-id/regions/region/subnetworks/subnetwork-name. Se hai selezionato Automatico in Modalità di connessione subnet durante la creazione di una rete VPC, non devi specificare questo campo.
    • NAT_TAG è il nome del tag del gateway NAT che ti consente di instradare le richieste in modo condizionale, in base al fatto che abbiano o meno un tag di questa VM. Puoi specificare qualsiasi nome per il tag.
    • STARTUP_SCRIPT è il nome dello script di avvio che hai creato nel passaggio precedente. Ad esempio, startup-script-example.sh. In questo esempio, il flag --metadata-from-file viene utilizzato per passare i contenuti dello script di avvio specificato a una chiave denominata startup-script.

    Dopo aver eseguito questo comando, vedrai un output che contiene il valore dell'IP esterno. Prendi nota del valore dell'IP esterno. Tutto il traffico dal tuo pool privato alla tua risorsa esterna passa attraverso questo indirizzo. Puoi scegliere di utilizzare questo indirizzo per ulteriori configurazioni, ad esempio configurare le regole firewall nella tua rete esterna.

  3. Configura una route per indirizzare tutte le richieste alla risorsa esterna all'istanza creata nel passaggio precedente, consentendo l'inoltro delle richieste alle istanze del pool privato:

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

    Dove:

    • PRIVATE_POOL_ROUTE_NAME è il nome che vuoi dare al tuo percorso.
    • DESTINATION_RANGE è un intervallo di indirizzi CIDR valido che contiene la destinazione a cui vuoi indirizzare il traffico. Ad esempio, un'istanza di GitHub Enterprise Edition. Ad esempio, 8.8.8.0/24.
    • INTERNAL_IP è il valore dell'IP interno ottenuto dal passaggio precedente. Ad esempio, 10.128.0.2.
    • NETWORK_NAME è il nome della rete che hai creato nella sezione precedente.
    • POOL_ROUTE_PRIORITY è il numero di priorità che vuoi specificare per il tuo percorso.

    Questo comando garantisce che il traffico di una build all'interno di un'istanza di pool privato venga indirizzato alla VM proxy che hai creato, non direttamente a internet pubblico.

  4. Configura una route per inoltrare le richieste dal proxy dalle istanze taggate all'intervallo IP di destinazione esterno. Il seguente comando crea una route per inoltrare le richieste a internet pubblico associato alle istanze del pool privato.

    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
    

    Dove:

    • NAT_EGRESS_ROUTE_NAME è il nome che vuoi assegnare alla route del gateway NAT.
    • DESTINATION_RANGE è l'indirizzo della destinazione che vuoi raggiungere. Ad esempio, un'istanza di GitHub Enterprise Edition. Ad esempio, 8.8.8.0/24.
    • NETWORK_NAME è il nome della rete che hai creato nella sezione precedente.
    • NAT_TAG è il nome del tag del gateway NAT che ti consente di instradare le richieste in modo condizionale, in base al fatto che abbiano o meno un tag di questa VM. Puoi specificare qualsiasi nome per il tag.
    • NAT_ROUTE_PRIORITY è il numero di priorità che vuoi specificare per il tuo percorso.

    Questo comando garantisce che tutto il traffico della VM proxy possa essere indirizzato alla rete internet pubblica.

  5. Aggiungi una regola firewall per consentire il traffico dal tuo pool privato alla VM 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
    

    Dove:

    • RULE_NAME è il nome che vuoi assegnare alla regola firewall.
    • FIREWALL_PRIORITY è il numero di priorità che vuoi specificare per la regola firewall.
    • NETWORK_NAME è il nome della rete che hai creato nella sezione precedente.
    • RESERVED_RANGE è l'intervallo CIDR che hai allocato durante la configurazione della rete VPC.
    • NAT_TAG è il nome del tag del gateway NAT che ti consente di instradare le richieste in modo condizionale, in base al fatto che abbiano o meno un tag di questa VM. Puoi specificare qualsiasi nome per il tag.

Ora puoi accedere alle risorse esterne dall'indirizzo IP statico del gateway NAT autogestito nel tuo VPC.

Passaggi successivi