Eingehenden Cloud Run-Traffic sichern

1. Übersicht

In diesem Lab erfahren Sie, wie Sie den Zugriff auf einen Cloud Run-Dienst einschränken und nur Anfragen von einer Arbeitslast zulassen, die lokal oder im VPC Ihres Projekts ausgeführt wird. Es gibt zwei Ebenen der Zugriffssteuerung: Ingress-Einstellungen und IAM-Richtlinien (Identity and Access Management).

5aed47d10595c878.png

Einstellungen für eingehenden Traffic

Mit den Ingress-Einstellungen können Sie Anfragen nach ihrem Netzwerkursprung (intern oder extern) filtern. Standardmäßig sind alle Anfragen zulässig, einschließlich Anfragen aus dem öffentlichen Internet.

IAM-Richtlinie

Mit IAM-Richtlinien können Sie Anfragen anhand der Identität des Absenders filtern. Sie werden häufig zum Authentifizieren von Dienst-zu-Dienst-Anfragen verwendet.

In diesem Lab erfahren Sie, wie und wann Sie Ingress-Einstellungen verwenden sollten.

Lokale Hosts stellen eine Verbindung über die VPC her

In diesem Lab simulieren wir eine lokale Arbeitslast. Wenn Sie einen lokalen Host mit Cloud Run verbinden möchten, müssen Sie den privaten Google-Zugriff für lokale Hosts konfigurieren. Dazu gehört auch die Einrichtung eines Cloud VPN-Gateways im VPC-Netzwerk, wie unten dargestellt.

31611f6a2f12fd0c.png

On-Premise-Arbeitslast mit einem Jumpserver in der VPC simulieren

In diesem Lab simulieren Sie das Senden von Anfragen von einem lokalen Host, indem Sie Anfragen von einer Compute Engine-VM in der VPC senden, wie hier gezeigt.

aebf22740c7a84f0.png

Die Compute Engine-VM, die Sie als Jumpserver verwenden, hat denselben Netzwerkursprung wie das Cloud VPN-Gateway. So können Sie damit das Senden von Anfragen von einer lokalen Arbeitslast simulieren.

2. Einrichtung und Anforderungen

Einrichten der Umgebung im eigenen Tempo

  1. Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie ein Konto erstellen.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es ist ein Zeichenstring, der von Google APIs nicht verwendet wird. Sie können ihn jederzeit aktualisieren.
  • Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und kann nach der Festlegung nicht mehr geändert werden. In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise spielt es keine Rolle, wie er lautet. In den meisten Codelabs müssen Sie auf die Projekt-ID verweisen (normalerweise als PROJECT_ID gekennzeichnet). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige generieren. Alternativ können Sie Ihr eigenes Gerät testen, um zu sehen, ob es verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen.
  • Zur Information: Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten finden Sie in der Dokumentation.
  1. Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Cloud-Ressourcen/-APIs verwenden zu können. Die Ausführung dieses Codelabs sollte nur wenige Kosten verursachen, wenn überhaupt. Wenn Sie die Ressourcen deaktivieren möchten, damit keine Kosten über diese Anleitung hinaus anfallen, können Sie die von Ihnen erstellten Ressourcen oder das gesamte Projekt löschen. Neuen Nutzern der Google Cloud Platform steht das kostenlose Testprogramm mit einem Guthaben von 300$ zur Verfügung.

Umgebung einrichten

  1. Legen Sie eine Umgebungsvariable für die Projekt-ID fest, um sie in späteren Befehlen zu verwenden:
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export ZONE=us-central1-a
  1. Aktivieren Sie die APIs, die für die Ausführung dieses Labs erforderlich sind.
gcloud services enable \
  run.googleapis.com \
  cloudbuild.googleapis.com \
  compute.googleapis.com \
  artifactregistry.googleapis.com
  1. Beispiel-App-Repository klonen und zum Verzeichnis wechseln
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git

cd cymbal-eats/partner-registration-service
  1. Standardregion und -zone für Compute Engine und Cloud Run festlegen
gcloud config set compute/region ${REGION}
gcloud config set run/region ${REGION}
gcloud config set compute/zone ${ZONE}

3. Dienst bereitstellen

Sie stellen den Dienst zuerst bereit und lassen ihn öffentlich zugänglich. Nachdem Sie bestätigt haben, dass Sie Anfragen über Ihren Browser senden können, sperren wir den Dienst und erlauben nur Anfragen von internen Netzwerkquellen.

Führen Sie beim Ausführen des folgenden Befehls die folgenden Schritte aus:

  • Speicherort des Quellcodes: Prüfen Sie, ob Sie sich im Verzeichnis „partner-registration-service“ befinden, und drücken Sie die Eingabetaste, um den Standardwert zu akzeptieren.
  • Dienstname (partner-registration-service): Drücken Sie die Eingabetaste, um den Standardnamen zu akzeptieren.
  • Nicht authentifizierte Aufrufe für [partner-registration-service] zulassen (y/N)? Y
gcloud run deploy 

Nach Abschluss dieses Befehls wird die URL Ihres Cloud Run-Dienstes angezeigt. Die Ausgabe sollte in etwa so aussehen:

Service [partner-registration-service] revision [partner-registration-service-00001-haz] has been deployed and is serving 100 percent of traffic.
Service URL: https://partner-registration-service-ssssssssss-uc.a.run.app

Öffnen Sie die Dienst-URL in Ihrem Browser. Sie sollten folgende Ausgabe sehen:

Partner registration service: RUNNING

Dienst so einstellen, dass nur interne Anfragen zulässig sind

Jetzt verwenden Sie die Ingress-Einstellungen des Cloud Run-Dienstes, um nur Anfragen von internen Quellen zuzulassen. Interne Quellen umfassen Ressourcen in VPC-Netzwerken, die sich im selben Projekt (oder VPC Service Controls-Perimeter) wie der Cloud Run-Dienst befinden. Das ist ideal für unseren Anwendungsfall.

Außerdem gelten Anfragen von anderen Google Cloud-Produkten als intern, auch wenn sie nicht Teil der VPC sind. Dazu gehören beispielsweise Pub/Sub und Workflows.

Anfragen von diesen Quellen verbleiben im Google-Netzwerk, auch wenn sie über die URL run.app auf Ihren Dienst zugreifen und der öffentliche Zugriff verboten ist.

Aktualisieren Sie den Dienst so, dass nur interne Anfragen zulässig sind:

gcloud run services update partner-registration-service --ingress=internal

Wenn Sie die Dienst-URL noch einmal öffnen, wird die Meldung Error: Forbidden – Access is forbidden (Fehler: Unzulässig – Zugriff unzulässig) angezeigt.

Da Ihr Browser die Anfrage von einer externen Netzwerkquelle und nicht von einer Quelle innerhalb des Google Cloud-Projekts sendet, ist das genau das, was Sie erwarten. Ihr Dienst ist jetzt noch sicherer.

4. Compute Engine-VM als Jumpserver erstellen

Im nächsten Schritt simulieren Sie Anfragen von einem lokalen Server über ein Cloud VPN-Gateway. Erstellen Sie dazu eine Compute Engine-Instanz im VPC, die als Jumpserver verwendet werden soll:

gcloud compute instances create jump-server --scopes=https://www.googleapis.com/auth/cloud-platform

Die Ausgabe dieses Befehls sollte in etwa so aussehen:

NAME         ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP   STATUS
jump-server  us-central1-a  n1-standard-1               10.128.0.10  34.170.108.8  RUNNING

Anfrage von der Compute Engine-Instanz an den Dienst senden

Öffnen Sie nun ein Terminal auf der virtuellen Maschine und senden Sie eine Anfrage direkt von der Maschine im VPC-Netzwerk.

Wenn Sie nach dem Ausführen des folgenden Befehls aufgefordert werden, SSH in Cloud Shell einzurichten, folgen Sie der Anleitung:

gcloud compute ssh jump-server

Rufen Sie die URL des Cloud Run-Dienstes mit dem folgenden Befehl ab:

gcloud run services describe partner-registration-service --region us-central1

Die ersten Zeilen der Ausgabe sollten so aussehen:

✔ Service partner-registration-service in region us-central1

URL:     https://partner-registration-service-ssssssssss-uc.a.run.app
Ingress: internal

Kopieren Sie nun die URL und senden Sie eine Anfrage von der Compute Engine-Instanz mit curl. Diese Anfrage sollte erfolgreich sein, da die VM-Instanz im VPC-Netzwerk Ihres Projekts ausgeführt wird – sie ist eine interne Quelle.

export SERVICE_URL=https://

curl ${SERVICE_URL}

Die Ausgabe sollte so lauten:

Partner registration service: RUNNING

5. Was ist mit der IAM-basierten Zugriffssteuerung?

In diesem Lab haben Sie gelernt, wie und wann Sie Ingress-Einstellungen verwenden. Die Ingress-Einstellungen sind ein guter erster Schritt, wenn Sie eine lokale Arbeitslast mit Cloud Run verbinden.

Die Implementierung der IAM-basierten Zugriffssteuerung ist aufwendiger, insbesondere wenn Sie von einem lokalen Host aus aufrufen:

  • Bei IAM müssen Sie langlebige Anmeldedaten für Dienstkonten auf dem Host verwalten
  • Für IAM sind Codeänderungen erforderlich, um Anfragen mit den Anmeldedaten des Dienstkontos zu signieren.

Google empfiehlt einen mehrstufigen Ansatz für die Zugriffssteuerung. Mithilfe von Einstellungen für eingehenden Traffic den Zugriff auf interne Hosts einzuschränken, ist ein guter erster Schritt. Aber Sie sollten nicht stehenbleiben.

6. Glückwunsch!

Herzlichen Glückwunsch, Sie haben das Codelab abgeschlossen.

Nächste Schritte:

Weitere Cymbal Eats-Codelabs:

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, können Sie entweder das Projekt löschen, das die Ressourcen enthält, oder das Projekt beibehalten und die einzelnen Ressourcen löschen.

Projekt löschen

Am einfachsten vermeiden Sie weitere Kosten durch Löschen des für die Anleitung erstellten Projekts.

Nützliche Referenzen

Hier finden Sie weitere Ressourcen, in denen Sie mehr über die beiden Ebenen der Zugriffssteuerung in Cloud Run erfahren.