Accesso alle API da VM con indirizzi IP esterni

Un'istanza di macchina virtuale (VM) con un indirizzo IP esterno assegnato alla propria interfaccia di rete può connettersi alle API e ai servizi Google se i requisiti di rete descritti in questa pagina sono soddisfatti. Anche se la connessione viene stabilita dall'indirizzo IP esterno della VM, il traffico rimane all'interno di Google Cloud e non viene inviato attraverso la rete internet pubblica.

Requisiti di rete

Per accedere alle API e ai servizi Google da una VM con un indirizzo IP esterno, devi soddisfare i seguenti requisiti:

  • Se vuoi connetterti alle API e ai servizi Google utilizzando IPv6, devi soddisfare entrambi i requisiti:

  • A seconda della configurazione scelta, potrebbe essere necessario aggiornare le voci, le route e le regole del firewall DNS. Per maggiori informazioni, consulta il riepilogo delle opzioni di configurazione.

Riepilogo delle opzioni di configurazione

La seguente tabella riassume i diversi modi in cui puoi configurare l'accesso privato Google. Per informazioni più dettagliate sulla configurazione, consulta Configurazione di rete.

Opzione dominio Configurazione DNS Configurazione del routing Configurazione del firewall
Domini predefiniti Non è richiesta alcuna configurazione DNS speciale.

Assicurati che la tua rete VPC possa instradare il traffico agli intervalli di indirizzi IP utilizzati dalle API e dai servizi Google.

  • Configurazione di base: conferma di avere route predefinite con l'hop successivo default-internet-gateway e un intervallo di destinazione 0.0.0.0/0 (per il traffico IPv4) e ::/0 (per il traffico IPv6, se necessario). Crea le route mancanti.
  • Configurazione personalizzata: crea route per gli intervalli di indirizzi IP utilizzati dalle API e dai servizi Google.

Assicurati che le regole firewall consentano il traffico in uscita verso gli intervalli di indirizzi IP utilizzati dalle API e dai servizi Google.

La regola firewall predefinita di autorizzazione in uscita consente questo traffico, se non esiste una regola con priorità più elevata che lo blocchi.

private.googleapis.com

Configura i record DNS in una zona DNS privata per inviare richieste ai seguenti indirizzi IP:

Per il traffico IPv4:

  • 199.36.153.8/30

Per il traffico IPv6:

  • 2600:2d00:0002:2000::/64

Assicurati che la tua rete VPC abbia route ai seguenti intervalli IP:

Per il traffico IPv4:

  • 199.36.153.8/30
  • 34.126.0.0/18

Per il traffico IPv6:

  • 2600:2d00:0002:2000::/64
  • 2001:4860:8040::/42

Assicurati che le regole firewall consentano il traffico in uscita verso i seguenti intervalli IP:

Per il traffico IPv4:

  • 199.36.153.8/30
  • 34.126.0.0/18

Per il traffico IPv6:

  • 2600:2d00:0002:2000::/64
  • 2001:4860:8040::/42
restricted.googleapis.com

Configura i record DNS per inviare richieste ai seguenti indirizzi IP:

Per il traffico IPv4:

  • 199.36.153.4/30

Per il traffico IPv6:

  • 2600:2d00:0002:1000::/64

Assicurati che la tua rete VPC abbia route ai seguenti intervalli IP:

Per il traffico IPv4:

  • 199.36.153.4/30
  • 34.126.0.0/18

Per il traffico IPv6:

  • 2600:2d00:0002:1000::/64
  • 2001:4860:8040::/42

Assicurati che le regole firewall consentano il traffico in uscita verso i seguenti intervalli IP:

Per il traffico IPv4:

  • 199.36.153.4/30
  • 34.126.0.0/18

Per il traffico IPv6:

  • 2600:2d00:0002:1000::/64
  • 2001:4860:8040::/42

Configurazione di rete

Questa sezione descrive i requisiti di rete di base da soddisfare per consentire a una VM nella rete VPC di accedere alle API e ai servizi Google.

Opzioni dominio

Scegli il dominio che vuoi utilizzare per accedere alle API e ai servizi Google.

Gli indirizzi IP virtuali (VIP) private.googleapis.com e restricted.googleapis.com supportano solo protocolli basati su HTTP su TCP (HTTP, HTTPS e HTTP/2). Tutti gli altri protocolli, inclusi MQTT e ICMP, non sono supportati.

Intervalli di indirizzi IP e di dominio Servizi supportati Esempio di utilizzo

Domini predefiniti.

Tutti i nomi di dominio per le API e i servizi Google, tranne private.googleapis.com e restricted.googleapis.com.

Vari intervalli di indirizzi IP: puoi determinare un insieme di intervalli IP che contiene i possibili indirizzi utilizzati dai domini predefiniti facendo riferimento agli indirizzi IP per i domini predefiniti.

Abilita l'accesso API alla maggior parte delle API e dei servizi Google, indipendentemente dal fatto che siano supportati dai Controlli di servizio VPC. Include l'accesso API a Google Maps, Google Ads e Google Cloud. Include le applicazioni web di Google Workspace, come Gmail e Documenti Google, e altre applicazioni web.

I domini predefiniti vengono utilizzati quando non configuri i record DNS per private.googleapis.com e restricted.googleapis.com.

private.googleapis.com

199.36.153.8/30

2600:2d00:0002:2000::/64

Abilita l'accesso API alla maggior parte delle API e dei servizi Google, indipendentemente dal fatto che siano supportati dai Controlli di servizio VPC. Include l'accesso API a Google Maps, Google Ads, Google Cloud e alla maggior parte delle altre API di Google, incluso il seguente elenco. Non supporta le applicazioni web di Google Workspace come Gmail e Documenti Google. Non supporta alcun sito web interattivo.

Nomi di dominio corrispondenti:

  • accounts.google.com (solo i percorsi necessari per l'autenticazione OAuth)
  • *.aiplatform-notebook.cloud.google.com
  • *.aiplatform-notebook.googleusercontent.com
  • appengine.google.com
  • *.appspot.com
  • *.backupdr.cloud.google.com
  • backupdr.cloud.google.com
  • *.backupdr.googleusercontent.com
  • backupdr.googleusercontent.com
  • *.cloudfunctions.net
  • *.cloudproxy.app
  • *.composer.cloud.google.com
  • *.composer.googleusercontent.com
  • *.datafusion.cloud.google.com
  • *.datafusion.googleusercontent.com
  • *.dataproc.cloud.google.com
  • dataproc.cloud.google.com
  • *.dataproc.googleusercontent.com
  • dataproc.googleusercontent.com
  • dl.google.com
  • gcr.io o *.gcr.io
  • *.googleapis.com
  • *.gstatic.com
  • *.ltsapis.goog
  • *.notebooks.cloud.google.com
  • *.notebooks.googleusercontent.com
  • packages.cloud.google.com
  • pkg.dev o *.pkg.dev
  • pki.goog o *.pki.goog
  • *.run.app
  • source.developers.google.com
  • storage.cloud.google.com

Utilizza private.googleapis.com per accedere alle API e ai servizi Google utilizzando un set di indirizzi IP instradabili solo dall'interno di Google Cloud.

Scegli private.googleapis.com in queste circostanze:

  • Non utilizzi Controlli di servizio VPC.
  • Utilizzi i Controlli di servizio VPC, ma devi anche accedere alle API e ai servizi Google non supportati dai Controlli di servizio VPC.1

restricted.googleapis.com

199.36.153.4/30

2600:2d00:0002:1000::/64

Abilita l'accesso API alle API e ai servizi Google supportati dai Controlli di servizio VPC.

Blocca l'accesso alle API e ai servizi Google che non supportano i Controlli di servizio VPC. Non supporta le API Google Workspace o le applicazioni web di Google Workspace come Gmail e Documenti Google.

Utilizza restricted.googleapis.com per accedere alle API e ai servizi Google utilizzando un set di indirizzi IP instradabili solo dall'interno di Google Cloud.

Scegli restricted.googleapis.com quando hai bisogno solo di accedere alle API e ai servizi Google supportati dai Controlli di servizio VPC.

Il dominio restricted.googleapis.com non consente l'accesso alle API e ai servizi Google che non supportano i Controlli di servizio VPC.1

1 Se devi limitare gli utenti solo alle API e ai servizi Google che supportano i Controlli di servizio VPC, utilizza restricted.googleapis.com. Sebbene i Controlli di servizio VPC vengano applicati per i servizi compatibili e configurati, indipendentemente dal dominio utilizzato, restricted.googleapis.com offre un'ulteriore mitigazione del rischio per l'esfiltrazione dei dati. L'utilizzo di restricted.googleapis.com nega l'accesso alle API e ai servizi Google non supportati dai Controlli di servizio VPC. Per ulteriori dettagli, consulta la sezione Configurazione della connettività privata nella documentazione relativa ai Controlli di servizio VPC.

Supporto IPv6 per private.googleapis.com e restricted.googleapis.com

I seguenti intervalli di indirizzi IPv6 possono essere utilizzati per indirizzare il traffico dai client IPv6 alle API e ai servizi Google:

  • private.googleapis.com: 2600:2d00:0002:2000::/64
  • restricted.googleapis.com: 2600:2d00:0002:1000::/64

Considera la possibilità di configurare gli indirizzi IPv6 se vuoi utilizzare il dominio private.googleapis.com o restricted.googleapis.com e hai client che utilizzano indirizzi IPv6. I client IPv6 che hanno anche indirizzi IPv4 configurati possono raggiungere le API e i servizi Google utilizzando gli indirizzi IPv4. Non tutti i servizi accettano traffico dai client IPv6.

Configurazione DNS

Per la connettività ai servizi e alle API Google, puoi scegliere di inviare pacchetti agli indirizzi IP associati al VIP private.googleapis.com o restricted.googleapis.com. Per utilizzare un VIP, devi configurare il DNS in modo che le VM nella tua rete VPC risolvano le richieste a *.googleapis.com e a eventuali altri domini a cui devi accedere. Ad esempio, se utilizzi Google Kubernetes Engine (GKE), devi configurare anche *.gcr.io e *.pkg.dev oppure, se utilizzi Cloud Run, devi configurare *.run.app.

La sezione seguente descrive come utilizzare le zone DNS per inviare pacchetti agli indirizzi IP associati al VIP scelto.

Quando configuri i record DNS per i VIP, utilizza solo gli indirizzi IP descritti nei passaggi seguenti. Non combinare indirizzi dai VIP private.googleapis.com e restricted.googleapis.com. Ciò può causare errori intermittenti perché i servizi offerti variano in base alla destinazione del pacchetto.

Crea una zona e record DNS per googleapis.com:

  1. Crea una zona DNS privata per googleapis.com. Valuta la possibilità di creare una zona privata di Cloud DNS per questo scopo.
  2. Nella zona googleapis.com, crea i seguenti record DNS per private.googleapis.com o restricted.googleapis.com, a seconda del dominio che hai scelto di utilizzare.

    • Per private.googleapis.com:

      1. Crea un record A per private.googleapis.com che punta ai seguenti indirizzi IP: 199.36.153.8, 199.36.153.9, 199.36.153.10, 199.36.153.11.

      2. Per connetterti alle API utilizzando indirizzi IPv6, configura anche un record AAAA per private.googleapis.com che punta a 2600:2d00:0002:2000::.

    • Per restricted.googleapis.com:

      1. Crea un record A per restricted.googleapis.com che punta ai seguenti indirizzi IP: 199.36.153.4, 199.36.153.5, 199.36.153.6, 199.36.153.7.

      2. Per connetterti alle API utilizzando indirizzi IPv6, crea anche un record AAAA per restricted.googleapis.com che punta a 2600:2d00:0002:1000::.

    Se utilizzi Cloud DNS, aggiungi i record alla zona privata googleapis.com.

  3. Nella zona googleapis.com, crea un record CNAME per *.googleapis.com che punti al dominio che hai configurato: private.googleapis.com o restricted.googleapis.com.

Alcuni servizi e API di Google vengono forniti utilizzando nomi di dominio aggiuntivi, tra cui *.gcr.io, *.gstatic.com, *.pkg.dev, pki.goog e *.run.app. Fai riferimento alla tabella degli intervalli di dominio e indirizzo IP in Opzioni dominio per determinare se è possibile accedere ai servizi del dominio aggiuntivo utilizzando private.googleapis.com o restricted.googleapis.com. Quindi, per ciascuno dei domini aggiuntivi:

  1. Crea una zona DNS per DOMAIN (ad esempio, gcr.io). Se utilizzi Cloud DNS, assicurati che questa zona si trovi nello stesso progetto della zona privata googleapis.com.

  2. In questa zona DNS, crea i seguenti record DNS per private.googleapis.com o restricted.googleapis.com, a seconda del dominio che hai scelto di utilizzare:

    • Per private.googleapis.com:

      1. Crea un record A per DOMAIN che punta ai seguenti indirizzi IP: 199.36.153.8, 199.36.153.9, 199.36.153.10, 199.36.153.11.

      2. Per connetterti alle API utilizzando indirizzi IPv6, crea anche un record AAAA per DOMAIN che punta a 2600:2d00:0002:2000::.

    • Per restricted.googleapis.com:

      1. Crea un record A per DOMAIN che punta ai seguenti indirizzi IP: 199.36.153.4, 199.36.153.5, 199.36.153.6, 199.36.153.7.

      2. Per connetterti alle API utilizzando indirizzi IPv6, crea anche un record AAAA per restricted.googleapis.com che punta a 2600:2d00:0002:1000::.

  3. Nella zona DOMAIN, crea un record CNAME per *.DOMAIN che punta a DOMAIN. Ad esempio, crea un record CNAME per *.gcr.io che rimanda a gcr.io.

Opzioni di routing

La tua rete VPC deve avere route appropriate i cui hop successivi sono il gateway internet predefinito. Google Cloud non supporta il routing del traffico alle API e ai servizi Google tramite altre istanze VM o hop successivi personalizzati. Nonostante siano chiamati gateway internet predefinito, i pacchetti inviati dalle VM nella tua rete VPC alle API e ai servizi Google rimangono all'interno della rete Google.

  • Se selezioni i domini predefiniti, le istanze VM si connettono alle API e ai servizi Google utilizzando un sottoinsieme di indirizzi IP esterni di Google. Questi indirizzi IP sono instradabili pubblicamente, ma il percorso da una VM in una rete VPC a questi indirizzi rimane all'interno della rete Google.

  • Google non pubblica route su internet in nessuno degli indirizzi IP utilizzati dai domini private.googleapis.com o restricted.googleapis.com. Di conseguenza, questi domini sono accessibili solo alle VM in una rete VPC o a sistemi on-premise connessi a una rete VPC.

Se la tua rete VPC contiene una route predefinita il cui hop successivo è il gateway internet predefinito, puoi utilizzarla per accedere alle API e ai servizi Google, senza dover creare route personalizzate. Per i dettagli, consulta la sezione relativa al routing con una route predefinita.

Se hai sostituito una route predefinita (destinazione 0.0.0.0/0 o ::0/0) con una route personalizzata il cui hop successivo non è il gateway internet predefinito, puoi soddisfare i requisiti di routing per le API e i servizi Google utilizzando il routing personalizzato.

Se la tua rete VPC non ha una route predefinita IPv6, non avrai connettività IPv6 alle API e ai servizi Google. Aggiungi una route predefinita IPv6 per consentire la connettività IPv6.

Routing con una route predefinita

Ogni rete VPC contiene una route predefinita IPv4 (0.0.0.0/0) al momento della creazione. Se abiliti gli indirizzi IPv6 esterni su una subnet, a questa rete VPC viene aggiunta una route predefinita IPv6 generata dal sistema (::/0).

Le route predefinite forniscono un percorso per gli indirizzi IP per le seguenti destinazioni:

  • I domini predefiniti.

  • private.googleapis.com: 199.36.153.8/30 e 2600:2d00:0002:2000::/64.

  • restricted.googleapis.com: 199.36.153.4/30 e 2600:2d00:0002:1000::/64.

Per verificare la configurazione di un percorso predefinito in una determinata rete, segui queste indicazioni stradali.

Console

  1. Nella console Google Cloud, vai alla pagina Route.

    Vai a Routes

  2. Filtra l'elenco delle route per mostrare solo quelle per la rete che devi ispezionare.

  3. Cerca una route la cui destinazione è 0.0.0.0/0 per il traffico IPv4 o ::/0 per il traffico IPv6 e il cui hop successivo sia il gateway internet predefinito.

gcloud

Usa il comando gcloud seguente, sostituendo NETWORK_NAME con il nome della rete da ispezionare:

gcloud compute routes list \
    --filter="default-internet-gateway NETWORK_NAME"

Se devi creare una route IPv4 predefinita sostitutiva, consulta Aggiunta di una route statica.

Se devi creare una route IPv6 predefinita sostitutiva, consulta Aggiunta di una route predefinita IPv6.

Routing personalizzato

In alternativa a una route predefinita, puoi utilizzare route statiche personalizzate, ciascuna con una destinazione più specifica e ognuna utilizzando l'hop successivo del gateway internet predefinito. Il numero di route necessarie e i relativi indirizzi IP di destinazione dipendono dal dominio che scegli.

Inoltre, ti consigliamo di aggiungere route per 34.126.0.0/18 e 2001:4860:8040::/42. Per ulteriori informazioni, consulta il riepilogo delle opzioni di configurazione.

Per verificare la configurazione delle route personalizzate per le API e i servizi Google in una determinata rete, segui queste istruzioni.

Console

  1. Nella console Google Cloud, vai alla pagina Route.

    Vai a Routes

  2. Utilizza il campo di testo Filtra tabella per filtrare l'elenco delle route utilizzando i seguenti criteri, sostituendo NETWORK_NAME con il nome della rete VPC.

    • Rete: NETWORK_NAME
    • Tipo di hop successivo: default internet gateway
  3. Esamina la colonna Intervallo IP di destinazione per ogni route. Se hai scelto i domini predefiniti, verifica la presenza di diverse route statiche personalizzate, una per ogni intervallo di indirizzi IP utilizzato dal dominio predefinito. Se hai scelto private.googleapis.com o restricted.googleapis.com, cerca l'intervallo IP di quel dominio.

gcloud

Usa il comando gcloud seguente, sostituendo NETWORK_NAME con il nome della rete da ispezionare:

gcloud compute routes list \
    --filter="default-internet-gateway NETWORK_NAME"

Le route sono elencate in formato tabella, a meno che non personalizzi il comando con il flag --format. Cerca nella colonna DEST_RANGE la destinazione di ogni percorso. Se hai scelto i domini predefiniti, verifica la presenza di diverse route statiche personalizzate, una per ogni intervallo di indirizzi IP utilizzato dal dominio predefinito. Se hai scelto private.googleapis.com o restricted.googleapis.com, cerca l'intervallo IP di quel dominio.

Se devi creare route, consulta Aggiunta di una route statica.

Configurazione del firewall

La configurazione del firewall della rete VPC deve consentire l'accesso dalle VM agli indirizzi IP utilizzati dalle API e dai servizi Google. La regola allow egress implicita soddisfa questo requisito.

In alcune configurazioni del firewall, è necessario creare regole di autorizzazione in uscita specifiche. Ad esempio, supponi di aver creato una regola di negazione in uscita che blocca il traffico verso tutte le destinazioni (0.0.0.0 per IPv4 o ::/0 per IPv6). In questo caso, devi creare una regola firewall di autorizzazione in uscita la cui priorità sia superiore alla regola di negazione del traffico in uscita per ogni intervallo di indirizzi IP utilizzato dal dominio scelto per le API e i servizi Google.

Inoltre, ti consigliamo di includere 34.126.0.0/18 e 2001:4860:8040::/42 nella regola firewall di autorizzazione in uscita. Per ulteriori informazioni, consulta Riepilogo delle opzioni di configurazione.

Per creare le regole firewall, consulta Creazione di regole firewall. Puoi limitare le VM a cui si applicano le regole firewall quando definisci il target di ogni regola di autorizzazione in uscita.

Indirizzi IP per i domini predefiniti

Questa sezione descrive come creare un elenco di intervalli di indirizzi IP di dominio predefiniti utilizzati dalle API e dai servizi Google, come *.googleapis.com e *.gcr.io. Questi intervalli vengono allocati in modo dinamico e cambiano spesso, pertanto non è possibile definire intervalli IP specifici per singoli servizi o API. Per mantenere un elenco accurato, configura l'automazione in modo da eseguire lo script ogni giorno. Per alternative alla gestione di un elenco di intervalli di indirizzi IP, valuta l'utilizzo del servizio private.googleapis.com VIP o Private Service Connect.

  • Google pubblica l'elenco completo degli intervalli IP che rende disponibili per gli utenti su internet in goog.json.

  • Google pubblica inoltre un elenco di intervalli di indirizzi IP esterni globali e a livello di regione disponibili per le risorse Google Cloud dei clienti in cloud.json.

Gli indirizzi IP utilizzati dai domini predefiniti per le API e i servizi Google rientrano nell'elenco di intervalli calcolato rimuovendo tutti gli intervalli in cloud.json da quelli in goog.json. Questi elenchi vengono aggiornati di frequente.

Puoi utilizzare il seguente script Python per creare un elenco di intervalli di indirizzi IP che includono quelli utilizzati dai domini predefiniti per le API e i servizi Google.

Per informazioni sull'esecuzione di questo script, consulta la sezione Come eseguire.

from __future__ import print_function

import json

try:
    from urllib import urlopen
except ImportError:
    from urllib.request import urlopen
    from urllib.error import HTTPError

import netaddr

IPRANGE_URLS = {
    "goog": "https://www.gstatic.com/ipranges/goog.json",
    "cloud": "https://www.gstatic.com/ipranges/cloud.json",
}

def read_url(url):
    try:
        return json.loads(urlopen(url).read())
    except (IOError, HTTPError):
        print("ERROR: Invalid HTTP response from %s" % url)
    except json.decoder.JSONDecodeError:
        print("ERROR: Could not parse HTTP response from %s" % url)

def get_data(link):
    data = read_url(link)
    if data:
        print("{} published: {}".format(link, data.get("creationTime")))
        cidrs = netaddr.IPSet()
        for e in data["prefixes"]:
            if "ipv4Prefix" in e:
                cidrs.add(e.get("ipv4Prefix"))
            if "ipv6Prefix" in e:
                cidrs.add(e.get("ipv6Prefix"))
        return cidrs

def main():
    cidrs = {group: get_data(link) for group, link in IPRANGE_URLS.items()}
    if len(cidrs) != 2:
        raise ValueError("ERROR: Could process data from Google")
    print("IP ranges for Google APIs and services default domains:")
    for ip in (cidrs["goog"] - cidrs["cloud"]).iter_cidrs():
        print(ip)

if __name__ == "__main__":
    main()