APIs von VMs mit externen IP-Adressen aus aufrufen

Eine VM-Instanz (Virtual Machine) mit einer externen Netzwerkadresse, die ihrer Netzwerkschnittstelle zugewiesen ist, kann eine Verbindung zu Google APIs und Google-Diensten herstellen, wenn die auf dieser Seite beschriebenen Netzwerkanforderungen erfüllt sind. Obwohl die Verbindung über die externe IP-Adresse der VM hergestellt wird, verbleibt der Traffic innerhalb der Google Cloud und wird nicht über das öffentliche Internet gesendet.

Netzwerkanforderungen

Sie müssen die folgenden Anforderungen für den Zugriff auf Google APIs und Google-Dienste von einer VM mit einer externen IP-Adresse erfüllen:

  • Wenn Sie über IPv6 eine Verbindung zu Google APIs und Google-Diensten herstellen möchten, müssen die beiden folgenden Anforderungen erfüllt sein:

    • Ihre VM muss mit einem externen /96-IPv6-Adressbereich konfiguriert sein und die auf der VM ausgeführte Software muss Pakete senden, deren Quellen mit einer dieser IPv6-Adressen aus diesem Bereich übereinstimmen.

    • Sie müssen die Pakete an die IPv6-Adressen für die Standarddomains senden.

  • Wenn Sie die Domainnamen private.googleapis.com oder restricted.googleapis.com verwenden, müssen Sie DNS-Einträge erstellen, um den Traffic an die diesen Domains zugewiesenen IP-Adressen weiterzuleiten Weitere Informationen finden Sie unter Netzwerkkonfiguration. Diese Domainnamen bieten nur IPv4-Verbindungen.

  • Ihr Netzwerk muss geeignete Routen für die Ziel-IP-Bereiche haben, die von Google APIs und Diensten verwendet werden. Bei diesen Routen muss der nächste Hop das Standard-Internetgateway sein. Wenn Sie die Domainnamen private.googleapis.com oder restricted.googleapis.com verwenden, benötigen Sie nur eine Route (pro Domain). Andernfalls müssen Sie mehrere Routen erstellen. Weitere Informationen finden Sie unter Routingoptionen.

  • Firewalls für ausgehenden Traffic müssen Traffic zu den IP-Adressbereichen zulassen, die von Google APIs und Google-Diensten verwendet werden. Die implizierte Firewallregel zum Zulassen von ausgehendem Traffic erfüllt diese Anforderung. Weitere Möglichkeiten zur Erfüllung der Firewallanforderung finden Sie unter Firewall-Konfiguration.

Netzwerkkonfiguration

In diesem Abschnitt werden die grundlegenden Netzwerkanforderungen beschrieben, die Sie erfüllen müssen, damit eine VM in Ihrem VPC-Netzwerk auf Google APIs und Google-Dienste zugreifen kann.

Domainoptionen

Wählen Sie zuerst die Domain aus, von der aus Sie auf Google APIs und Google-Dienste zugreifen.

Die VIPs private.googleapis.com und restricted.googleapis.com unterstützen nur HTTP-basierte Protokolle über TCP (HTTP, HTTPS und HTTP/2). Alle anderen Protokolle, einschließlich MQTT und ICMP, werden nicht unterstützt.

Domains und IP-Adressbereiche Unterstützte Dienste Nutzungsbeispiel
Standarddomains

Alle Domainnamen für Google APIs und Google-Dienste mit Ausnahme von private.googleapis.com und restricted.googleapis.com.

Verschiedene IP-Adressbereiche: Sie können eine Reihe von IP-Bereichen bestimmen, die die möglichen Adressen der Standarddomains enthalten, indem Sie auf IP-Adressen für Standarddomains verweisen.
Aktiviert den API-Zugriff auf die meisten Google APIs und Google-Dienste, unabhängig davon, ob sie von VPC Service Controls unterstützt werden. Umfasst API-Zugriff auf Google Maps, Google Ads, Google Cloud. Umfasst Google Workspace und andere Webanwendungen. Wenn Sie keine DNS-Einträge für private.googleapis.com und restricted.googleapis.com konfigurieren, werden die Standarddomains verwendet.

private.googleapis.com

199.36.153.8/30

Aktiviert den API-Zugriff auf die meisten Google APIs und Google-Dienste, unabhängig davon, ob sie von VPC Service Controls unterstützt werden. Umfasst den API-Zugriff auf Maps, Google Ads, die Google Cloud Platform und die meisten anderen Google APIs, einschließlich der Listen unten. Unterstützt keine Google Workspace-Webanwendungen. Interaktive Websites werden nicht unterstützt.

Domainnamen, die übereinstimmen:
  • accounts.google.com (nur die für die OAuth-Authentifizierung benötigten Pfade)
  • appengine.google.com
  • *.appspot.com
  • *.cloudfunctions.net
  • *.cloudproxy.app
  • *.composer.cloud.google.com
  • *.composer.googleusercontent.com
  • *.datafusion.cloud.google.com
  • *.datafusion.googleusercontent.com
  • dl.google.com
  • gcr.io oder *.gcr.io
  • *.googleadapis.com
  • *.googleapis.com
  • *.gstatic.com
  • *.ltsapis.goog
  • *.notebooks.cloud.google.com
  • *.notebooks.googleusercontent.com
  • packages.cloud.google.com
  • pkg.dev oder *.pkg.dev
  • pki.goog oder *.pki.goog
  • *.run.app
  • source.developers.google.com

Mit private.googleapis.com können Sie über eine Reihe von IP-Adressen, die nur innerhalb von Google Cloud routingfähig sind, auf Google APIs und Google-Dienste zugreifen.

Wählen Sie unter folgenden Umständen private.googleapis.com aus:

  • Sie verwenden VPC Service Controls nicht.
  • Sie verwenden VPC Service Controls, müssen aber auch auf Google APIs und Google-Dienste zugreifen, die von VPC Service Controls nicht unterstützt werden. 1

restricted.googleapis.com

199.36.153.4/30

Aktiviert den API-Zugriff auf Google APIs und Google-Dienste, die von VPC Service Controls unterstützt werden.

Blockiert den Zugriff auf Google APIs und Google-Dienste, die VPC Service Controls nicht unterstützen. Unterstützt keine Google Workspace-Webanwendungen oder Google Workspace-APIs.

Mit restricted.googleapis.com können Sie über eine Reihe von IP-Adressen, die nur innerhalb von Google Cloud routingfähig sind, auf Google APIs und Google-Dienste zugreifen.

Wählen Sie restricted.googleapis.com aus, wenn Sie nur Zugriff auf Google APIs und Google-Dienste benötigen, die von VPC Service Controls unterstützt werden. restricted.googleapis.com erlaubt keinen Zugriff auf Google APIs und Google-Dienste, die VPC Service Controls nicht unterstützen. 1

1Hinweis: Wenn Sie Nutzer auf die Google APIs und Google-Dienste beschränken müssen, die VPC Service Controls unterstützen, verwenden Sie restricted.googleapis.com. Obwohl VPC Service Controls unabhängig von der verwendeten Domain für kompatible und konfigurierte Dienste erzwungen wird, bietet restricted.googleapis.com eine zusätzliche Risikominderung bei der Daten-Exfiltration. Die Verwendung von restricted.googleapis.com verweigert den Zugriff auf Google APIs und Google-Dienste, die nicht von VPC Service Controls unterstützt werden. Weitere Informationen finden Sie in der Dokumentation zu VPC Service Controls unter Private Verbindung zu Google APIs und Google-Diensten einrichten.

DNS-Konfiguration

Wenn Sie eine IPv4-Verbindung zu Google APIs und Google-Diensten herstellen möchten, können Sie Pakete an die IP-Adressen senden, die mit private.googleapis.com oder restricted.googleapis.com verknüpft sind. Dazu müssen Sie DNS so konfigurieren, dass VMs in Ihrem VPC-Netzwerk Anfragen an *.googleapis.com und alle anderen Domains auflösen, auf die Sie zugreifen müssen. Wenn Sie beispielsweise Google Kubernetes Engine (GKE) verwenden, müssen Sie auch *.gcr.io und *.pkg.dev konfigurieren.

Erstellen Sie eine DNS-Zone und -Einträge für *.googleapis.com:

  1. Erstellen Sie eine private DNS-Zone für googleapis.com. Ziehen Sie zu diesem Zweck in Betracht, eine private Cloud DNS-Zone zu erstellen.
  2. Erstellen Sie in der Zone googleapis.com abhängig von der ausgewählten Domain einen der folgenden A-Einträge:

    • Einen A-Eintrag für private.googleapis.com, der auf die folgenden IP-Adressen verweist: 199.36.153.8, 199.36.153.9, 199.36.153.10, 199.36.153.11

    • Einen A-Eintrag für restricted.googleapis.com, der auf die folgenden IP-Adressen verweist: 199.36.153.4, 199.36.153.5, 199.36.153.6, 199.36.153.7

    Wenn Sie Cloud DNS verwenden, fügen Sie die Einträge der privaten Zone googleapis.com hinzu.

  3. Erstellen Sie in der Zone googleapis.com einen CNAME-Eintrag für *.googleapis.com, der auf den A-Eintrag verweist, den Sie im vorherigen Schritt erstellt haben.

Einige Google APIs und Google-Dienste werden mit zusätzlichen Domainnamen bereitgestellt, darunter *.gcr.io, *.gstatic.com, *.pkg.dev und pki.goog. In der Tabelle der Domain- und IP-Adressbereiche in den Domainoptionen erfahren Sie, ob die Dienste der zusätzlichen Domain über private.googleapis.com oder restricted.googleapis.com aufgerufen werden können. Gehen Sie anschließend für jede der zusätzlichen Domains so vor:

  1. Erstellen Sie eine DNS-Zone für die zusätzliche Domain (z. B. gcr.io). Wenn Sie Cloud DNS verwenden, muss sich diese Zone im selben Projekt wie Ihre private Zone googleapis.com befinden.
  2. In dieser DNS-Zone:
    • Erstellen Sie einen A-Eintrag für den Domainnamen (Zone) selbst. Beispiel: gcr.io. Verweisen Sie mit dem A-Eintrag auf die gleichen vier IP-Adressen für den von Ihnen ausgewählten benutzerdefinierten Domainnamen (private.googleapis.com oder restricted.googleapis.com).
    • Erstellen Sie einen CNAME-Eintrag für alle möglichen Hostnamen der zusätzlichen Domain. Verwenden Sie dazu ein Sternchen und einen Punkt, gefolgt vom Domainnamen (Zone), z. B. *.gcr.io. Verweisen Sie in diesem CNAME-Eintrag auf den A-Eintrag in derselben Zone. Verweisen Sie beispielsweise von *.gcr.io auf gcr.io.

Routingoptionen

Ihr VPC-Netzwerk muss geeignete Routen haben, deren nächste Hops das Standard-Internetgateway sind. Google Cloud unterstützt das Routing von Traffic zu Google APIs und Google-Diensten über andere VM-Instanzen oder benutzerdefinierte nächste Hops nicht. Obwohl es als Standard-Internetgateway bezeichnet wird, verbleiben Pakete, die von VMs in Ihrem VPC-Netzwerk an Google APIs und Google-Dienste gesendet werden, im Google-Netzwerk.

  • Wenn Sie die Standarddomains auswählen, stellen Ihre VM-Instanzen über einen Teil der externen IP-Adressen von Google eine Verbindung zu Google APIs und Google-Diensten her. Diese IP-Adressen sind öffentlich routingfähig, aber der Pfad von einer VM in einem VPC-Netzwerk zu diesen Adressen bleibt im Google-Netzwerk.

  • Google veröffentlicht im Internet keine Routen zu IP-Adressen, die von den Domains private.googleapis.com oder restricted.googleapis.com verwendet werden. Daher können nur VMs in einem VPC-Netzwerk oder lokale Systeme, die mit einem VPC-Netzwerk verbunden sind, auf diese Domains zugreifen.

Wenn Ihr VPC-Netzwerk eine Standardroute enthält, deren nächster Hop das Standard-Internetgateway ist, können Sie über diese Route auf Google APIs und Google-Dienste zugreifen, ohne benutzerdefinierte Routen erstellen zu müssen. Weitere Informationen finden Sie unter Routing über eine Standardroute.

Wenn Sie eine IPv4-Standardroute (Ziel 0.0.0.0/0) durch eine benutzerdefinierte Route ersetzt haben, deren nächster Hop nicht das Standard-Internetgateway ist, können Sie die Routinganforderungen für Google APIs und -Dienste erfüllen, wenn Sie stattdessen benutzerdefiniertes Routing nutzen.

Wenn Sie eine Standard-IPv6-Route (Ziel ::/0) durch eine benutzerdefinierte Route ersetzt haben, deren nächster Hop nichtdas Standard-Internetgateway ist, oder wenn Ihr VPC-Netzwerk keine eine IPv6-Standardroute, hat haben Sie keine IPv6-Verbindung zu Google APIs und Google-Diensten. Fügen Sie eine IPv6-Standardroute hinzu, um eine IPv6-Verbindung zuzulassen.

Routing mit einer Standardroute

Jedes VPC-Netzwerk enthält bei der Erstellung eine IPv4-Standardroute (0.0.0.0/0). Wenn Sie externe IPv6-Adressen in einem Subnetz aktivieren, wird diesem VPC-Netzwerk eine vom System generierte IPv6-Standardroute (::/0) hinzugefügt.

Die IPv4-Standardroute stellt einen Pfad zu den IPv4-Adressen für die Standarddomains bereit, das Ziel 199.36.153.8/30 für private.googleapis.com und das Ziel 199.36.153.4/30 für restricted.googleapis.com.

Die IPv6-Standardroute stellt nur einen Pfad zu den IPv6-Adressen für die Standarddomains bereit. Die Domains private.googleapis.com und restricted.googleapis.com sind über IPv6-Verbindungen nicht zugänglich.

So prüfen Sie die Konfiguration einer Standardroute in einem bestimmten Netzwerk:

Console

  1. Rufen Sie in der Google Cloud Console die Seite „Routen“ auf.
    Zur Seite "Routen"
  2. Filtern Sie die Liste der Routen so, dass nur die Routen für das Netzwerk angezeigt werden, das Sie überprüfen müssen.
  3. Suchen Sie nach einer Route mit dem Ziel 0.0.0.0/0 für IPv4-Traffic oder mit ::/0 für IPv6-Traffic, deren nächster Hop das Standard-Internetgateway ist.

gcloud

Verwenden Sie den folgenden gcloud-Befehl und ersetzen Sie NETWORK_NAME durch den Namen des Netzwerks, das geprüft werden soll:

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

Informationen zum Erstellen einer Standard-IPv4-Ersatzroute finden Sie unter Statische Route hinzufügen.

Informationen zum Erstellen einer Standard-IPv6-Ersatzroute finden Sie unter IPv6-Standardroute hinzufügen.

Benutzerdefiniertes Routing

Als Alternative zu einer Standardroute für IPv4-Traffic können Sie benutzerdefinierte statische Routen verwenden, von denen jede ein spezifischeres Ziel hat und das Standard-Internetgateway als nächsten Hop verwendet. Die Anzahl der benötigten Routen und ihre IP-Zieladressen hängen von der ausgewählten Domain ab.

Führen Sie die folgenden Schritte aus, um die Konfiguration von benutzerdefinierten Routen für Google APIs und Google-Dienste in einem bestimmten Netzwerk zu prüfen.

Console

  1. Rufen Sie in der Google Cloud Console die Seite „Routen“ auf.
    Zur Seite "Routen"
  2. Verwenden Sie das Textfeld Tabelle filtern, um die Liste der Routen anhand der folgenden Kriterien zu filtern. Ersetzen Sie dabei NETWORK_NAME durch den Namen Ihres VPC-Netzwerks.
    • Netzwerk: NETWORK_NAME
    • Nächster Hop-Typ: default internet gateway
  3. Sehen Sie sich für jede Route die Spalte Ziel-IP-Bereich an. Wenn Sie die Standarddomains ausgewählt haben, suchen Sie nach mehreren benutzerdefinierten statischen Routen, eine für jeden von der Standarddomain verwendeten IP-Adressbereich. Wenn Sie private.googleapis.com oder restricted.googleapis.com ausgewählt haben, suchen Sie nach dem IP-Bereich dieser Domain.

gcloud

Verwenden Sie den folgenden gcloud-Befehl und ersetzen Sie NETWORK_NAME durch den Namen des Netzwerks, das geprüft werden soll:

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

Routen werden im Tabellenformat aufgelistet, sofern Sie den Befehl nicht mit dem Flag --format anpassen. Suchen Sie in der Spalte DEST_RANGE nach dem Ziel der einzelnen Routen. Wenn Sie die Standarddomains ausgewählt haben, prüfen Sie mehrere benutzerdefinierte statische Routen, eine für jeden von der Standarddomain verwendeten IP-Adressbereich. Wenn Sie private.googleapis.com oder restricted.googleapis.com ausgewählt haben, suchen Sie nach dem IP-Bereich dieser Domain.

Informationen zum Erstellen von Routen finden Sie unter Statische Route hinzufügen.

Firewallkonfiguration

Die Firewallkonfiguration Ihres VPC-Netzwerks muss den Zugriff von VMs auf die von Google APIs und Google-Diensten verwendeten IP-Adressen zulassen. Die implizierte allow egress-Regel erfüllt diese Anforderung.

In einigen Firewallkonfigurationen müssen Sie bestimmte Regeln zum Zulassen von ausgehendem Traffic erstellen. Angenommen, Sie haben eine Regel zum Ablehnen von ausgehendem Traffic erstellt, die den Traffic zu allen Zielen (0.0.0.0 für IPv4 oder ::/0 für IPv6) blockiert. In diesem Fall müssen Sie eine Firewallregel für ausgehenden Traffic erstellen, deren Priorität höher ist als die Regel für ausgehenden Traffic für jeden von der ausgewählten Domain verwendeten IP-Adressbereich für Google APIs und -Dienste.

Informationen zum Erstellen von Firewallregeln finden Sie unter Firewallregeln erstellen. Sie können die VMs einschränken, auf die die Firewallregeln angewendet werden, wenn Sie das Ziel jeder Regel für ausgehenden Traffic definieren.

IP-Adressen für Standarddomains

Führen Sie die folgenden Schritte aus, um die IP-Adressbereiche zu ermitteln, die von den Standarddomains verwendet werden, z. B. *.googleapis.com und *.gcr.io.

  • Google veröffentlicht die vollständige Liste der IP-Bereiche, die Nutzern im Internet zur Verfügung stehen, in goog.json.

  • Außerdem veröffentlicht Google in der Datei cloud.json eine Liste globaler und regionaler externer IP-Adressbereiche, die für die Google Cloud-Ressourcen des Kunden verfügbar sind.

Die von den Standarddomains für Google APIs und Google-Dienste verwendeten IP-Adressen liegen innerhalb der Bereiche, die verbleiben, nachdem die Bereiche aus cloud.json aus denen in goog.json entfernt wurden. Das folgende Beispiel zeigt, wie Sie diesen Bereich mit Python abrufen.

Mit dem folgenden Python-Skript können Sie eine Liste der IP-Adressbereiche erstellen, die die IP-Adressbereiche enthalten, die von den Standarddomains für Google APIs und -Dienste verwendet werden:

Weitere Informationen zum Ausführen dieses Skripts finden Sie unter Ausführung.

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()