Konfigurieren Sie die Netzwerkeinstellungen:

Mit den Cloud Functions-Netzwerkeinstellungen können Sie den in einzelne Funktionen eingehenden und aus ihnen ausgehenden Netzwerk-Traffic steuern. Sie können die Netzwerkeinstellungen beispielsweise in folgenden Anwendungsfällen verwenden:

  • Funktionen absichern, indem Sie die netzwerkbasierte Zugriffssteuerung implementieren
  • Dafür sorgen, dass ausgehender Traffic einer Funktion die Firewall-, DNS- und Routingregeln einhält, die mit Ihrem VPC-Netzwerk verknüpft sind
  • Ausgehenden Traffic einer Funktion mit einer statischen IP-Adresse verknüpfen

Weitere Informationen zu Anwendungsfällen finden Sie im Abschnitt Anwendungsbeispiele.

Einstellungen für eingehenden Traffic

Mit den Einstellungen für eingehenden Traffic wird festgelegt, ob Ressourcen außerhalb des Google Cloud-Projekts oder des Dienstperimeters für VPC Service Controls eine Funktion aufrufen können.

Damit sie der Richtlinie eines VPC Service Controls-Perimeters unterliegt, muss eine Ressource zum Dienst, der eingeschränkt werden soll gehören. Bei Cloud Functions (1. Generation) ist der eingeschränkte Dienst die Cloud Functions API. Für Cloud Functions (2. Generation) ist es die Cloud Run Admin API.

Beschränkungen

Cloud Functions (1. Generation): Reine interne durch HTTP ausgelöste Funktionen können nur von HTTP-Anfragen aufgerufen werden, die entweder innerhalb eines VPC-Netzwerks erstellt werden, z. B. von Kubernetes Engine, Compute Engine, der flexiblen App Engine-Umgebung, oder die von Cloud Scheduler, Cloud Tasks, Workflows oder BigQuery-Ressourcen stammen, die sich im selben Projekt oder VPC Service Controls-Perimeter befinden. Das bedeutet, dass HTTP-Anfragen, die von Pub/Sub oder Eventarc erzeugt oder durch diese geleitet werden, diese Funktionen nicht auslösen können. Ereignistrigger werden immer als „intern“ betrachtet und sind unabhängig von der Einstellung für eingehenden Traffic zulässig.

Einstellungen für eingehenden Traffic konfigurieren

Geben Sie einen der folgenden Werte für eingehenden Traffic an, um Ressourcen von außerhalb Ihres Projekts oder Perimeters einzuschränken:

  • Jeden Traffic zulassen: Standardeinstellung. Alle eingehenden Anfragen an die Funktion sind sowohl aus dem Internet als auch aus Ressourcen innerhalb desselben Projekts zulässig.
  • Nur internen Traffic erlauben: Nur Traffic von Cloud Scheduler, Cloud Tasks, Eventarc, Workflows, BigQuery und VPC-Netzwerken in demselben Projekt oder VPC Service Controls-Perimeter ist zulässig. Alle anderen Anfragen werden mit dem Fehler 404 abgelehnt.

    Beachten Sie bei Anfragen von einer freigegebenen VPC die folgenden Hinweise:

    • Der Traffic wird als intern betrachtet, wenn die Funktion im freigegebenen VPC-Hostprojekt bereitgestellt wird.
    • Der Traffic wird als intern betrachtet, wenn der freigegebene VPC-Host und alle Dienstprojekte im selben VPC Service Controls-Perimeter platziert werden.
    • Traffic zu einer Cloud Functions-Funktion (2. Generation) wird als intern betrachtet, wenn die Funktion mit demselben freigegebenen VPC-Netzwerk verbunden ist.
    • Anderer Traffic aus freigegebenen VPC-Netzwerken wird abgelehnt.
  • Internen Traffic und Traffic von Cloud Load Balancing zulassen: Traffic von Cloud Scheduler, Cloud Tasks, Eventarc, Workflows, BigQuery und VPC-Netzwerken im selben Projekt oder VPC Service Controls-Perimeter ist zulässig. Traffic von Cloud Load Balancing ist zulässig.

Sie können Einstellungen für eingehenden Traffic festlegen, wenn Sie die Funktion mit der Google Cloud Console, der Google Cloud CLI oder Terraform bereitstellen oder aktualisieren:

Console

  1. Rufen Sie in der Google Cloud Console die Übersichtsseite von Cloud Functions auf:

    Zur Seite „Cloud Functions“

  2. Klicken Sie auf Funktion erstellen. Klicken Sie alternativ auf eine vorhandene Funktion, um deren Detailseite aufzurufen, und klicken dann auf Bearbeiten.

  3. Maximieren Sie die erweiterten Einstellungen durch Klicken auf Laufzeit, Build....

  4. Wählen Sie im Abschnitt Verbindungen einen Wert für Einstellungen für eingehenden Traffic aus.

gcloud

Verwenden Sie den Befehl gcloud functions deploy, um die Funktion bereitzustellen oder zu aktualisieren, und geben Sie das Flag --ingress-settings an:

  gcloud functions deploy FUNCTION_NAME 
--trigger-http
--ingress-settings INGRESS_SETTINGS
FLAGS...

Dabei gilt:

  • FUNCTION_NAME ist der Name Ihrer Funktion.
  • INGRESS_SETTINGS ist einer der unterstützten Werte für die Einstellungen für eingehenden Traffic. Die möglichen Werte sind:

    • all
    • internal-only
    • internal-and-gclb: Erlaubt internen Traffic sowie Traffic an eine öffentliche IP-Adresse, die über Cloud Load Balancing bereitgestellt wird. Blockiert Traffic, der an cloudfunctions.net oder eine von Cloud Functions eingerichtete benutzerdefinierte Domain gesendet wird. Hindert Nutzer daran, Zugriffssteuerungen (Cloud Armor, IAP) zu umgehen, die sie über Cloud Load Balancing eingerichtet haben.
  • FLAGS... verweist auf andere Flags, die Sie an den Befehl deploy übergeben.

Terraform

Optional. Zum Aktualisieren des Felds für die Einstellungen für eingehenden Traffic der Datei main.tf Ihrer Terraform-Ressource fügen Sie das Argument ingress_settings hinzu, das Sie bereitstellen oder aktualisieren möchten. Wenn Sie die Einstellungen für eingehenden Traffic ändern, wird die Funktion neu erstellt.

  1. Suchen Sie in der Datei main.tf die Ressource, für die Sie die Einstellungen für eingehenden Traffic einschränken möchten, und aktualisieren Sie sie auf die gewünschte Einstellung. Beispiel:

    resource "google_cloudfunctions_function" "function" {
      name             = "function"
      location         = "us-central1"
      description      = "Sample function"
      ingress_settings = "INGRESS_SETTINGS"
    }
    

    INGRESS_SETTINGS ist einer der unterstützten Werte für die Einstellungen für eingehenden Traffic. Die möglichen Werte sind:

    • ALLOW_ALL (Standardeinstellung): Alle eingehenden Anfragen an die Funktion sind sowohl aus dem Internet als auch aus Ressourcen innerhalb desselben Projekts zulässig.
    • ALLOW_INTERNAL_ONLY: Nur Traffic von Cloud Scheduler, Cloud Tasks, Eventarc, Workflows und VPC-Netzwerken im selben Projekt oder VPC Service Controls-Perimeter ist zulässig.
    • ALLOW_INTERNAL_AND_GCLB: Erlaubt internen Traffic sowie Traffic an eine öffentliche IP-Adresse, die über Cloud Load Balancing bereitgestellt wird. Blockiert Traffic, der an cloudfunctions.net oder eine von Cloud Functions eingerichtete benutzerdefinierte Domain gesendet wird. Hindert Nutzer daran, Zugriffssteuerungen (Cloud Armor, IAP) zu umgehen, die sie über Cloud Load Balancing eingerichtet haben.

Wenn Sie Cloud Armor mit Cloud Load Balancing verwenden, können Sie Sicherheitsrichtlinien erstellen, mit denen auf Traffic basierende Bedingungen wie IP-Adresse, IP-Bereich, Regionscode oder Anfrageheader von eingehenden Anfragen gefiltert werden. Weitere Informationen finden Sie in der Übersicht über die Google Cloud Armor-Sicherheitsrichtlinie.

Einstellungen für ausgehenden Traffic

Einstellungen für ausgehenden Traffic steuern die Weiterleitung ausgehender HTTP-Anfragen von einer Funktion. Zum Festlegen von Einstellungen für ausgehenden Traffic müssen Sie die Funktion mithilfe eines Connectors für serverlosen VPC-Zugriff mit einem VPC-Netzwerk verbinden. Einstellungen für ausgehenden Traffic steuern, wann Traffic über den Connector in Ihrem VPC-Netzwerk weitergeleitet wird.

Beschränkungen

  • Der serverlose VPC-Zugriff unterstützt nur das Routing von IPv4-Traffic. IPv6-Traffic wird nicht unterstützt, auch wenn in Ihrem VPC-Netzwerk IPv6-Routen vorhanden sind.

  • Für zusätzliche Sicherheit blockiert Google Cloud ausgehende Pakete an externe IP-Adressen am TCP-Zielport 25.

  • Nutzerfunktionen oder Dienste, die durch ein VPC-Netzwerk geschützte Funktionen oder Dienste aufrufen, müssen diese Aufrufe über einen VPC-Connector weiterleiten.

Einstellungen für ausgehenden Traffic konfigurieren

Bei den Einstellungen für ausgehenden Traffic können Sie Folgendes angeben:

  • Nur Anfragen an private IPs über den VPC-Connector weiterleiten: Standardeinstellung. Der Traffic wird nur dann über das VPC-Netzwerk weitergeleitet, wenn die Pakete mit diesem Traffic Ziele haben, die Folgendes erfüllen:

    Pakete an ein anderes Ziel werden von Cloud Functions an das Internet und nicht über ein VPC-Netzwerk weitergeleitet.

  • Gesamten Traffic über den VPC-Connector weiterleiten: Der Traffic wird für alle Paketziele immer über das VPC-Netzwerk weitergeleitet, das mit dem Connector verknüpft ist. In folgenden Fällen müssen Sie diese Option verwenden:

    • Wenn Sie Traffic an VPC-Subnetzbereiche mit privat verwendeten externen IP-Adressbereichen senden müssen. Weitere Informationen zu VPC-Subnetzbereichen finden Sie unter Gültige IPv4-Bereiche in der Übersicht über Subnetze.
    • Wenn Sie Traffic an einen Private Service Connect-Endpunkt für Google APIs senden müssen, dessen Adresse eine privat verwendete externe IP-Adresse ist. Weitere Informationen zu Private Service Connect-Endpunkten für Google APIs finden Sie unter Über Endpunkte auf Google APIs zugreifen.
    • Wenn Sie Traffic an jedes andere privat verwendete externe IP-Adressziel senden müssen, das innerhalb des VPC-Netzwerks des Connectors routingfähig ist. Beispiele für andere Ziele, die privat verwendete externe IP-Adressen abdecken, sind Peering-Subnetzbereiche und Peering-Subnetzbereiche, die aus Diensten zugewiesenen IP-Adressbereichen erstellt wurden sowie jene Ziele, auf die über benutzerdefinierte Routen im VPC-Netzwerk zugegriffen werden kann.

    Wenn Ihr VPC-Netzwerk eine Standardroute enthält, können Pakete weiterhin an das Internet weitergeleitet werden, nachdem sie vom Connector verarbeitet wurden, wenn Sie ein Cloud NAT-Gateway zur Bereitstellung von NAT-Diensten an das Subnetz konfigurieren, das vom Connector verwendet wird. Diese Pakete unterliegen den Routen in Ihrem VPC-Netzwerk und den Firewallregeln, die für Ihr VPC-Netzwerk gelten. Mit der Routen- und Firewallkonfiguration können Sie den ausgehenden Internettraffic für alle von Ihrer Funktion über einen Connector für serverlosen VPC-Zugriff gesendeten ausgehenden Anfragen steuern.

Sie können beim Bereitstellen oder Aktualisieren der Funktion Einstellungen für ausgehenden Traffic festlegen, indem Sie die Google Cloud Console oder die Google Cloud CLI verwenden.

Console

  1. Rufen Sie in der Google Cloud Console die Übersichtsseite von Cloud Functions auf:

    Zur Seite „Cloud Functions“

  2. Klicken Sie auf Funktion erstellen. Klicken Sie alternativ auf eine vorhandene Funktion, um deren Detailseite aufzurufen, und klicken dann auf Bearbeiten.

  3. Maximieren Sie die erweiterten Einstellungen durch Klicken auf Laufzeit, Build....

  4. Wählen Sie im Abschnitt Verbindungen unter Einstellungen für ausgehenden Traffic einen Connector für serverlosen VPC-Zugriff aus.

  5. Wählen Sie die entsprechende Einstellung für ausgehenden Traffic aus, je nachdem, wie Sie ausgehenden Traffic über den Connector weiterleiten möchten.

gcloud

Verwenden Sie den Befehl gcloud functions deploy, um die Funktion bereitzustellen oder zu aktualisieren, und geben Sie das Flag --egress-settings an:

  gcloud functions deploy FUNCTION_NAME 
--vpc-connector CONNECTOR_NAME
--egress-settings EGRESS_SETTINGS
FLAGS...

Dabei gilt:

  • FUNCTION_NAME ist der Name Ihrer Funktion.
  • CONNECTOR_NAME ist der Name des zu verwendenden Connectors für serverlosen VPC-Zugriff. Weitere Informationen finden Sie in der Dokumentation zu gcloud.

  • EGRESS_SETTINGS ist einer der unterstützten Werte für die Einstellungen für ausgehenden Traffic: siehe Dokumentation zu gcloud.

  • FLAGS... verweist auf andere Flags, die Sie an den Befehl deploy übergeben.

Beispielanwendungsfälle

Die folgenden Beispiele zeigen, wie der Netzwerkzugriff in verschiedenen gängigen Szenarien konfiguriert wird.

Funktion erstellen, die nicht von externen Clients aufgerufen werden kann

Sie können Ihre HTTP-Funktionen absichern, indem Sie zulassen, dass sie nur von Ressourcen im selben Google Cloud-Projekt oder VPC Service Controls-Dienstperimeter aufgerufen werden.

  1. Stellen Sie Ihre Funktion bereit und lassen Sie nur internen Traffic zu. Verwenden Sie die Google Cloud Console oder die Google Cloud-Befehlszeile:

    Console

    1. Rufen Sie in der Google Cloud Console die Übersichtsseite von Cloud Functions auf:

      Zur Seite „Cloud Functions“

    2. Klicken Sie auf Funktion erstellen. Klicken Sie alternativ auf eine vorhandene Funktion, um deren Detailseite aufzurufen, und anschließend auf Bearbeiten.

    3. Maximieren Sie die erweiterten Einstellungen durch Klicken auf Laufzeit, Build....

    4. Wählen Sie im Abschnitt Verbindungen unter Einstellungen für eingehenden Traffic die Option Nur internen Traffic erlauben aus.

    gcloud

    Führen Sie den Befehl gcloud functions deploy aus:

    gcloud functions deploy FUNCTION_NAME \
    --ingress-settings internal-only \
    FLAGS...
    

Nachdem Sie die Funktion bereitgestellt haben, werden Anfragen von außerhalb Ihres Google Cloud-Projekts daran gehindert, die Funktion zu erreichen. Wenn Sie VPC Service Controls verwenden, werden Anfragen von außerhalb des Dienstperimeters blockiert. VM-Instanzen innerhalb Ihres Projekts oder Dienstperimeters können die Funktion dennoch erreichen, wenn sie Anfragen an den HTTPS-Endpunkt der Funktion senden.

Wenn Sie diese eingeschränkte Funktion von einer anderen Funktion aus aufrufen möchten, muss die aufrufende Funktion ihren ausgehenden Traffic über das VPC-Netzwerk weiterleiten.

Einstellungen für ausgehenden und eingehenden Traffic verwenden, um den Zugriff einzuschränken

Sie können sowohl eingehenden als auch ausgehenden Traffic in Ihre Dienste einbinden, um eine zusätzliche Einschränkungsebene hinzuzufügen.

  1. Klonen Sie das cloud-run-sample-Repository und wechseln Sie in das Verzeichnis vpc-sample:

    git clone https://github.com/GoogleCloudPlatform/cloud-run-samples
    cd vpc-sample
    

  2. Python-Abhängigkeiten installieren:

    pip3 install -r requirements.txt
    

  3. Sie können die Datei main.py im Verzeichnis vpc-sample öffnen, um die Funktion zu sehen, die Sie bereitstellen:

    def hello_world(request):
        return "Hello World!"

  4. Die Funktion bereitstellen:

    gcloud functions deploy restricted-function 
    --runtime=python38
    --trigger-http
    --no-allow-unauthenticated
    --ingress-settings=internal-only
    --entry-point=hello_world

  5. Richten Sie einen Connector für serverlosen VPC-Zugriff ein.

    gcloud compute networks vpc-access connectors create serverless-connector 
    --region=SERVICE_REGION
    --range=10.8.0.0/28

    Dabei ist SERVICE_REGION eine Region für den Connector und muss mit der Region des serverlosen Dienstes übereinstimmen. Wenn sich Ihr Dienst in der Region us-central oder europe-west befindet, verwenden Sie us-central1 oder europe-west1.

  6. Erstellen Sie das Container-Image.

    gcloud builds submit --tag=gcr.io/PROJECT_ID/restricted-function-caller .
    

    Dabei ist PROJECT_ID die Projekt-ID.

    Dadurch wird ein Container-Image erstellt, das bei der Bereitstellung aus der Datei main.py get_hello_world aufruft:

    import os
    import urllib
    
    import google.auth.transport.requests
    import google.oauth2.id_token
    
    def get_hello_world(request):
        try:
            url = os.environ.get("URL")
            req = urllib.request.Request(url)
    
            auth_req = google.auth.transport.requests.Request()
            id_token = google.oauth2.id_token.fetch_id_token(auth_req, url)
            req.add_header("Authorization", f"Bearer {id_token}")
    
            response = urllib.request.urlopen(req)
            return response.read()
    
        except Exception as e:
            print(e)
            return str(e)

  7. Verwenden Sie den Befehl gcloud run deploy run-function, um den Cloud Run-Container bereitzustellen:

      gcloud run deploy run-function 
    --image gcr.io/PROJECT_ID/restricted-function-caller
    --no-allow-unauthenticated
    --update-env-vars=URL=https://SERVICE_REGION-PROJECT_ID.cloudfunctions.net/restricted-function-caller
    --vpc-egress=all
    --vpc-connector=serverless-connector
    --region=SERVICE_REGION

    Dabei gilt:

    • PROJECT_ID ist die Projekt-ID.
    • SERVICE_REGION: Region für den Connector. Dies muss der Region Ihres serverlosen Dienstes entsprechen. Wenn sich Ihr Dienst in der Region us-central oder europe-west befindet, verwenden Sie us-central1 oder europe-west1.

    Der Cloud Run-Dienst run-function ist jetzt so konfiguriert, dass eine GET-Anfrage über den VPC-Connector an die netzwerkeingeschränkte Funktion gesendet wird.

Ausgehenden Traffic einer Funktion über das VPC-Netzwerk weiterleiten

VPC-Netzwerke in Google Cloud unterstützen zahlreiche Konfigurationen und Netzwerkfeatures. Wenn Sie ausgehenden Traffic von Ihrer Funktion an Ihr VPC-Netzwerk weiterleiten, können Sie dafür sorgen, dass der ausgehende Cloud Functions-Traffic den Firewall-, DNS-, Routing- und anderen Regeln Ihres VPC-Netzwerks folgt. Außerdem können Sie Produkte wie Cloud NAT verwenden.

  1. Richten Sie ein VPC-Netzwerk ein. Konfigurieren Sie ein vorhandenes VPC-Netzwerk oder erstellen Sie ein neues. Folgen Sie dazu der Anleitung unter VPC-Netzwerke verwenden.

  2. Richten Sie einen Connector für serverlosen VPC-Zugriff ein. Cloud Functions benötigt einen Connector für serverlosen VPC-Zugriff, um Traffic an Ihr VPC-Netzwerk weiterzuleiten. Erstellen Sie einen Connector und richten Sie die entsprechenden Berechtigungen ein. Folgen Sie dazu der Anleitung unter Verbindung zu VPC-Netzwerk herstellen.

  3. Stellen Sie eine Funktion bereit, die den Connector verwendet und den gesamten ausgehenden Traffic durch den Connector weiterleitet. Verwenden Sie die Google Cloud Console oder das gcloud-Befehlszeilentool:

    Console

    1. Rufen Sie in der Google Cloud Console die Übersichtsseite von Cloud Functions auf:

      Zur Seite „Cloud Functions“

    2. Klicken Sie auf Funktion erstellen. Klicken Sie alternativ auf eine vorhandene Funktion, um deren Detailseite aufzurufen, und anschließend auf Bearbeiten.

    3. Maximieren Sie die erweiterten Einstellungen durch Klicken auf Laufzeit, Build....

    4. Wählen Sie im Abschnitt Verbindungen unter Einstellungen für ausgehenden Traffic den Connector für serverlosen VPC-Zugriff und dann Gesamten Traffic über den VPC-Connector weiterleiten aus.

    gcloud

    Führen Sie den Befehl gcloud functions deploy aus:

    gcloud functions deploy FUNCTION_NAME \
    --vpc-connector CONNECTOR_NAME \
    --egress-settings all \
    FLAGS...
    

Nach der Bereitstellung der Funktion wird der gesamte von Ihrer Funktion stammende Traffic durch Ihr VPC-Netzwerk geleitet und entspricht den Regeln, die in Ihrem VPC-Netzwerk festgelegt sind. Beachten Sie, dass Ihre Funktion nur mit Cloud NAT auf das öffentliche Internet zugreifen kann. Außerdem müssen Sie Cloud NAT anweisen, alle primären und sekundären IP-Bereiche für alle Subnetze dem NAT-Gateway zuzuordnen, um das Subnetz des Connectors in die Zuordnung aufzunehmen.

Ausgehenden Traffic einer Funktion mit einer statischen IP-Adresse verknüpfen

In einigen Fällen ist es möglich, dass der von Ihrer Funktion stammende Traffic mit einer statischen IP-Adresse verknüpft wird. Dies ist beispielsweise dann nützlich, wenn Sie einen externen Dienst aufrufen, der nur Anfragen von explizit angegebenen IP-Adressen zulässt.

  1. Leiten Sie den ausgehenden Traffic Ihrer Funktion über Ihr VPC-Netzwerk weiter. Informationen dazu finden Sie im vorherigen Abschnitt Ausgehenden Traffic einer Funktion über das VPC-Netzwerk weiterleiten.

  2. Richten Sie Cloud NAT ein und legen Sie eine statische IP-Adresse fest. Folgen Sie den Anleitungen unter Subnetzbereiche für NAT festlegen und IP-Adressen für NAT festlegen, um Cloud NAT für das Subnetz einzurichten, das dem Connector für serverlosen VPC-Zugriff Ihrer Funktion zugeordnet ist. Cloud NAT muss alle primären und sekundären IP-Bereiche für alle Subnetze dem NAT-Gateway zuordnen, damit das Subnetz des Connectors in die Zuordnung eingeschlossen wird.

Multiregionales Load-Balancing

Sie können eine Funktion in verschiedenen Regionen bereitstellen und festlegen, dass die Anfrage an die nächstgelegene fehlerfreie Region gesendet wird. Dazu müssen Sie eine serverlose Netzwerk-Endpunktgruppe (NEG) für die Funktion einrichten und mit einem Load-Balancer verbinden. Dies wird unter HTTP(S) Load-Balancer mit serverlosen NEGs einrichten beschrieben.