VPC Service Controls konfigurieren

VPC Service Controls ist ein Google Cloud-Feature, mit dem Sie einen sicheren Perimeter einrichten können, der vor Daten-Exfiltration schützt. In dieser Anleitung erfahren Sie, wie Sie VPC-Service Controls mit Cloud Functions verwenden können, um Ihre Funktionen noch sicherer zu machen.

Einschränkungen bei dieser Einbindung finden Sie in der Dokumentation zu VPC Service Controls.

Einrichtung auf Organisationsebene

Wenn Sie VPC Service Controls mit Cloud Functions verwenden möchten, können Sie einen Dienstperimeter auf Organisationsebene konfigurieren. Durch die Konfiguration geeigneter Organisationsrichtlinien können Sie dafür sorgen, dass VPC Service Controls-Prüfungen erzwungen werden, wenn Cloud Functions verwendet wird. Außerdem können Entwickler so nur Dienste bereitstellen, die mit VPC Service Controls kompatibel sind. Weitere Informationen zur Übernahme und zu Verstößen beim Festlegen einer Organisationsrichtlinie.

VPC Service Controls-Perimeter einrichten

Zum Einrichten eines Dienstperimeters benötigen Sie die Rollen Organisationsbetrachter (roles/resourcemanager.organizationViewer) und Access Context Manager-Bearbeiter (roles/accesscontextmanager.policyEditor).

In der Kurzanleitung zu VPC Service Controls sind folgende Schritte beschrieben:

  1. Dienstperimeter erstellen

  2. Dem Perimeter ein oder mehrere Projekte hinzufügen

  3. Schränken Sie die Cloud Functions API (1. Generation) oder sowohl die Cloud Functions API als auch die Cloud Run Admin API (2. Generation) ein.

Nach der Einrichtung Ihres Dienstperimeters werden alle Aufrufe der eingeschränkten API geprüft, um sicherzustellen, dass die Aufrufe aus dem gleichen Perimeter stammen.

Optional: Perimeterzugriff für Entwicklungsmaschinen aktivieren

Da VPC Service Controls-Prüfungen für die Cloud Functions API erzwungen werden, schlagen Aufrufe an die Cloud Functions API fehl, sofern sie nicht aus dem Dienstperimeter stammen. Wählen Sie eine der folgenden Optionen aus, um Funktionen mit der Cloud Functions API, mit der Cloud Functions-UI in der Google Cloud Console oder mit der Google Cloud CLI zu verwalten:

  • Einen Computer innerhalb des VPC Service Controls-Perimeters verwenden. Sie können beispielsweise eine Compute Engine-VM oder einen lokalen Computer verwenden, der per VPN mit Ihrem VPC-Netzwerk verbunden ist.

  • Funktionsentwicklern Zugriff auf den Perimeter gewähren. Sie können beispielsweise Zugriffsebenen erstellen, die den Perimeterzugriff anhand der IP-Adresse oder der Nutzeridentität ermöglichen. Weitere Informationen finden Sie unter Zugriff auf geschützte Ressourcen von außerhalb eines Perimeters zulassen.

Organisationsrichtlinien einrichten

Zum Verwalten von Organisationsrichtlinien müssen Sie die Rolle Administrator für Unternehmensrichtlinien (roles/orgpolicy.policyAdmin) haben.

Für Compliance mit VPC Service Controls und zum Schutz vor Daten-Exfiltration richten Sie die folgenden Organisationsrichtlinien ein, die die zulässigen Netzwerkeinstellungen für Cloud Functions im Dienstperimeter steuern.

Einstellungen für eingehenden Traffic beschränken

Die Organisationsrichtlinie cloudfunctions.allowedIngressSettings steuert die Einstellungen für eingehenden Traffic, die Entwickler für Cloud Functions verwenden dürfen. Legen Sie diese Organisationsrichtlinie so fest, dass Entwickler den Wert ALLOW_INTERNAL_ONLY verwenden müssen:

Console

  1. Rufen Sie in der Google Cloud Console die Richtlinienseite Einstellungen für eingehenden Traffic auf:

    Öffnen Sie die Seite „Organisationsrichtlinien“.

  2. Klicken Sie auf Richtlinie verwalten.

  3. Wählen Sie auf der Seite Richtlinie bearbeiten die Option Anpassen aus.

  4. Wählen Sie unter Richtlinienerzwingung die Option Ersetzen aus.

  5. Wählen Sie unter Richtlinienwerte die Option Benutzerdefiniert aus.

  6. Wählen Sie unter Richtlinientyp Zulassen aus.

  7. Geben Sie unter Benutzerdefinierte Werte ALLOW_INTERNAL_ONLY ein.

  8. Klicken Sie auf Richtlinie festlegen.

gcloud

Führen Sie den Befehl gcloud resource-manager org-policies allow aus:

gcloud resource-manager org-policies allow \
  cloudfunctions.allowedIngressSettings ALLOW_INTERNAL_ONLY \
  --organization ORGANIZATION_ID

ORGANIZATION_ID ist Ihre Organisations-ID.

Nach Einrichtung dieser Organisationsrichtlinie müssen alle Funktionen den Wert ALLOW_INTERNAL_ONLY für ihre Einstellungen für eingehenden Traffic verwenden. Dies bedeutet, dass HTTP-Funktionen nur Traffic entgegennehmen können, der von einem VPC-Netzwerk innerhalb des Dienstperimeters stammt. Funktionsbereitstellungen, die einen anderen Wert angeben, schlagen fehl.

VPC-Connector erforderlich

Die Organisationsrichtlinie cloudfunctions.requireVPCConnector legt fest, ob ein Connector für serverlosen VPC-Zugriff für Funktionen erforderlich ist. Legen Sie diese Organisationsrichtlinie so fest, dass diese Einschränkung erzwungen wird:

Console

  1. Rufen Sie in der Google Cloud Console die Richtlinienseite VPC-Connector erforderlich auf:

    Öffnen Sie die Seite „Organisationsrichtlinien“.

  2. Klicken Sie auf Richtlinie verwalten.

  3. Wählen Sie auf der Seite Richtlinie bearbeiten die Option Anpassen aus.

  4. Wählen Sie unter Erzwingung die Option An aus.

  5. Klicken Sie auf Richtlinie festlegen.

gcloud

Führen Sie den Befehl gcloud resource-manager org-policies enable-enforce aus:

gcloud resource-manager org-policies enable-enforce \
  cloudfunctions.requireVPCConnector \
  --organization ORGANIZATION_ID

ORGANIZATION_ID ist Ihre Organisations-ID.

Nach Einrichtung dieser Organisationsrichtlinie müssen alle Funktionen einen Connector für serverlosen VPC-Zugriff verwenden. Funktionsbereitstellungen, die keinen Connector angeben, schlagen fehl.

Einstellungen für ausgehenden Traffic des VPC-Connectors beschränken

Die Organisationsrichtlinie cloudfunctions.allowedVpcConnectorEgressSettings steuert die Einstellungen für ausgehenden Traffic, die Entwickler für Cloud Functions verwenden dürfen. Legen Sie diese Organisationsrichtlinie so fest, dass nur der Wert ALL_TRAFFIC zulässig ist:

Console

  1. Rufen Sie in der Google Cloud Console die Richtlinienseite Erlaubte Einstellungen für ausgehenden Traffic des VPC-Connectors auf:

    Öffnen Sie die Seite „Organisationsrichtlinien“.

  2. Klicken Sie auf Richtlinie verwalten.

  3. Wählen Sie auf der Seite Richtlinie bearbeiten die Option Anpassen aus.

  4. Wählen Sie unter Richtlinienerzwingung die Option Ersetzen aus.

  5. Wählen Sie unter Richtlinienwerte die Option Benutzerdefiniert aus.

  6. Wählen Sie unter Richtlinientyp Zulassen aus.

  7. Geben Sie unter Benutzerdefinierte Werte ALL_TRAFFIC ein.

  8. Klicken Sie auf Richtlinie festlegen.

gcloud

Führen Sie den Befehl gcloud resource-manager org-policies allow aus:

gcloud resource-manager org-policies allow \
  cloudfunctions.allowedVpcConnectorEgressSettings ALL_TRAFFIC \
  --organization ORGANIZATION_ID

ORGANIZATION_ID ist Ihre Organisations-ID.

Nach Einrichtung dieser Organisationsrichtlinie müssen alle Funktionen den Wert ALL_TRAFFIC für ihre Einstellungen für ausgehenden Traffic verwenden. Dies bedeutet, dass die Funktionen den gesamten ausgehenden Traffic über Ihr VPC-Netzwerk weiterleiten müssen. Funktionsbereitstellungen, die einen anderen Wert angeben, schlagen fehl.

In Kombination mit der Organisationsrichtlinie cloudfunctions.requireVPCConnector wird dadurch der gesamte ausgehende Traffic durch das VPC-Netzwerk geleitet, in dem es den konfigurierten Firewall- und Routingregeln unterliegt.

Einrichtung auf Projektebene

Für einzelne Projekte innerhalb des Dienstperimeters müssen Sie zusätzliche Konfigurationen vornehmen, um VPC Service Controls verwenden zu können.

VPC-Netzwerke konfigurieren

Wenn Sie auf Google APIs und Google-Dienste zugreifen und gleichzeitig die Risiken der Daten-Exfiltration minimieren möchten, sollten Anfragen an den eingeschränkten virtuellen IP-Bereich (VIP) gesendet werden: 199.36.153.4/30 (restricted.googleapis.com).

Führen Sie für jedes VPC-Netzwerk in einem Projekt die folgenden Schritte aus, um den ausgehenden Traffic mit Ausnahme des Traffics für den eingeschränkten VIP-Bereich zu blockieren:

  1. Konfigurieren Sie Firewallregeln, um zu verhindern, dass Daten das VPC-Netzwerk verlassen:

    • Erstellen Sie eine Regel, die ausgehenden Traffic blockiert.

    • Erstellen Sie eine Regel, die ausgehenden Traffic auf 199.36.153.4/30 an TCP-Port 443 zulässt. Achten Sie darauf, dass die Regel Priorität vor der Regel zum Blockieren des ausgehenden Traffics hat, die Sie soeben erstellt haben. Dadurch wird ausgehender Traffic ausschließlich auf den eingeschränkten VIP-Bereich zugelassen.

  2. Konfigurieren Sie DNS, um *.googleapis.com bis restricted.googleapis.com aufzulösen.

  3. Konfigurieren Sie das DNS mit einer A-Eintragszuordnung *.cloudfunctions.net zum IP-Bereich 199.36.153.4/30. Sie können hierfür Cloud DNS verwenden.

    gcloud dns managed-zones create ZONE_NAME \
    --visibility=private \
    --networks=https://www.googleapis.com/compute/v1/projects/PROJECT_NAME/global/networks/VPC_NAME \
    --description=none \
    --dns-name=cloudfunctions.net
    
    gcloud dns record-sets transaction start --zone=ZONE_NAME
    
    gcloud dns record-sets transaction add --name=*.cloudfunctions.net. \
    --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \
    --zone=ZONE_NAME \
    --ttl=300
    
    gcloud dns record-sets transaction execute --zone=ZONE_NAME
    
  4. Aktivieren Sie den privaten Google-Zugriff für das Subnetz Ihres VPC-Connectors.

Nun können Anfragen, die aus dem VPC-Netzwerk stammen:

  • Sie können das VPC-Netzwerk nicht verlassen und ausgehender Traffic außerhalb des Dienstperimeters wird verhindert.
  • Sie können nur Google APIs und Google-Dienste erreichen, die VPC Service Controls prüfen, wodurch eine Daten-Exfiltration über Google APIs verhindert wird.

Dem Cloud Build-Dienstkonto Zugriff auf den Perimeter der VPC Service Controls gewähren

Cloud Functions verwendet Cloud Build, um Ihren Quellcode in einem ausführbaren Container zu erstellen. Um Cloud Functions mit VPC Service Controls verwenden zu können, müssen Sie Ihr Cloud Build-Dienstkonto (Standard- oder benutzerdefiniert) für den Zugriff auf Ihren Dienstperimeter konfigurieren.

Nach dem Namen des Dienstkontos suchen

Wenn Sie das Cloud Build-Standarddienstkonto verwenden, finden Sie dessen Namen so:

  1. Verwenden Sie die IAM-Seite in der Google Cloud Console, um das Cloud Build-Dienstkonto zu finden.

    OpenIAM

  2. Prüfen Sie, ob im Drop-down-Menü des Projekts das richtige Projekt ausgewählt ist.

  3. Suchen Sie nach cloudbuild.gserviceaccount.com. Die E-Mail-Adresse im Format PROJECT_NUMBER@cloudbuild.gserviceaccount.com ist der Name des Dienstkontos.

Wenn Sie ein benutzerdefiniertes Cloud Build-Dienstkonto haben, verwenden Sie stattdessen diesen Namen.

Dienstkonto Zugriff auf den Dienstperimeter gewähren

Sobald Sie den Namen des Dienstkontos haben, folgen Sie der Anleitung unter Zugriff nach Nutzern oder Dienstkonten beschränken, um eine Zugriffsebene für das Dienstkonto zu erstellen. Folgen Sie dann der Anleitung unter Zugriffsebene zu einem vorhandenen Perimeter hinzufügen, um Ihrem Dienstperimeter eine Zugriffsebene hinzuzufügen.

Funktionen bereitstellen, die mit VPC Service Controls kompatibel sind

Nachdem VPC Service Controls für Cloud Functions konfiguriert wurde, müssen Sie prüfen, ob alle innerhalb des Dienstperimeters bereitgestellten Funktionen den festgelegten Organisationsrichtlinien entsprechen. Dies bedeutet Folgendes:

Funktionsbereitstellungen, die diese Kriterien nicht erfüllen, schlagen fehl.

Vorhandene Funktionen auf Compliance mit VPC Service Controls überprüfen

Nach Einrichtung von VPC Service Controls werden neue Funktionen, die in Projekten innerhalb des Dienstperimeters erstellt wurden, automatisch auf Compliance geprüft. Damit bestehende Arbeitslasten nicht unterbrochen werden, funktionieren vorhandene Funktionen weiterhin. Sie entsprechen möglicherweise jedoch nicht den Organisationsrichtlinien.

Es wird empfohlen, vorhandene Funktionen zu prüfen und Funktionen nach Bedarf zu aktualisieren oder neu bereitzustellen. Zur Vereinfachung dieses Vorgangs können Sie ein Skript erstellen, das die Cloud Functions API verwendet, um Ihre Funktionen aufzulisten und diejenigen hervorzuheben, bei denen nicht die richtigen Netzwerkeinstellungen angegeben sind.

VPC Service Controls mit Funktionen außerhalb eines Perimeters verwenden

Die vorherigen Abschnitte gelten für das Szenario, in dem Sie Cloud Functions in einem VPC Service Controls-Dienstperimeter bereitstellen.

Wenn Sie eine Funktion außerhalb eines Dienstperimeters bereitstellen müssen, die Funktion jedoch Zugriff auf Ressourcen innerhalb eines Perimeters benötigt, verwenden Sie die folgende Konfiguration:

  1. Dem Cloud Build-Dienstkonto Zugriff auf den Perimeter der VPC Service Controls gewähren
  2. Gewähren Sie dem Laufzeitdienstkonto der Funktion Zugriff auf den Perimeter. Dazu erstellen Sie entweder eine Zugriffsebene und fügen die Zugriffsebene zum Dienstperimeter hinzu oder erstellen eine Ingress-Richtlinie für den Perimeter.
  3. Funktion mit einem VPC-Netzwerk verbinden
  4. Leiten Sie den gesamten ausgehenden Traffic von der Funktion über das VPC-Netzwerk weiter. Weitere Informationen finden Sie unter Einstellungen für ausgehenden Traffic.

Nachdem Sie diese Konfiguration abgeschlossen haben, kann die Funktion Ressourcen erreichen, die durch den Perimeter geschützt sind.