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 einem Arbeitslast zulassen, die lokal oder in der VPC Ihres Projekts ausgeführt wird. Sie können zwei Ebenen der Zugriffssteuerung verwenden: Einstellungen für eingehenden Traffic und IAM-Richtlinien (Identity and Access Management).

5aed47d10595c878.png

Einstellungen für eingehenden Traffic

Mit Ingress-Einstellungen können Sie Anfragen nach ihrem Netzwerkursprung (intern oder extern) filtern. Standardmäßig dürfen alle Anfragen durchlaufen, auch solche aus dem öffentlichen Internet.

IAM-Richtlinie

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

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

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, konfigurieren Sie privaten Google-Zugriff für lokale Hosts. Dazu gehört auch die Einrichtung eines Cloud VPN-Gateways im VPC-Netzwerk, wie unten dargestellt.

31611f6a2f12fd0c.png

Lokale Arbeitslast mit einem Jump-Server 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 dargestellt.

aebf22740c7a84f0.png

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

2. Einrichtung und Anforderungen

Umgebung zum selbstbestimmten Lernen einrichten

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es handelt sich um einen String, der nicht von Google APIs verwendet wird. Sie können ihn jederzeit aktualisieren.
  • Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich (kann nach dem Festlegen nicht mehr geändert werden). In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise ist es nicht wichtig, wie dieser String aussieht. In den meisten Codelabs müssen Sie auf die Projekt-ID verweisen (sie wird in der Regel als PROJECT_ID angegeben). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige ID generieren. Alternativ können Sie es mit einem eigenen versuchen und 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
  1. Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs zu verwenden. Die Durchführung dieses Codelabs sollte keine oder nur geringe Kosten verursachen. Wenn Sie Ressourcen herunterfahren möchten, damit Ihnen nach Abschluss dieser Anleitung keine Kosten mehr in Rechnung gestellt werden, können Sie die von Ihnen erstellten Ressourcen oder das gesamte Projekt löschen. Neue Nutzer von Google Cloud kommen für das Programm für kostenlose Testversionen mit einem Guthaben von 300$ infrage.

Umgebung einrichten

  1. Legen Sie eine Umgebungsvariable für die Projekt-ID fest, die in späteren Befehlen verwendet werden soll:
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export ZONE=us-central1-a
  1. Aktivieren Sie die APIs, die zum Ausführen 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

Zuerst stellen Sie den Dienst bereit und lassen ihn öffentlich zugänglich. Nachdem Sie bestätigt haben, dass Sie Anfragen von Ihrem Browser aus senden können, sperren wir den Dienst und lassen nur Anfragen von internen Netzwerkquellen zu.

Beachten Sie beim Ausführen des folgenden Befehls diese Hinweise:

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

Nach Abschluss dieses Befehls wird die URL Ihres Cloud Run-Dienstes aufgeführt. Die Ausgabe sieht etwa so aus:

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 zugelassen werden

Als Nächstes 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 werden Anfragen von anderen Google Cloud-Produkten als intern betrachtet, auch wenn sie nicht Teil der VPC sind. Zu diesen Produkten 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. Der öffentliche Zugriff ist verboten.

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 verboten) angezeigt.

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

4. Compute Engine-VM als Jump-Server erstellen

Im nächsten Schritt simulieren Sie Anfragen von einem lokalen Server über ein Cloud VPN-Gateway. Dazu erstellen Sie eine Compute Engine-Instanz in der VPC, die als Jump-Server 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 VM und senden Sie eine Anfrage direkt von der Maschine im VPC-Netzwerk.

Wenn Sie mit dem folgenden Befehl 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 diesem 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 mit curl eine Anfrage von der Compute Engine-Instanz. Diese Anfrage sollte erfolgreich sein, da die VM-Instanz im VPC-Netzwerk Ihres Projekts ausgeführt wird. Es handelt sich also um eine interne Quelle.

export SERVICE_URL=https://

curl ${SERVICE_URL}

Die Ausgabe sollte so aussehen:

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. Ingress-Einstellungen sind ein guter erster Schritt, wenn Sie eine lokale Arbeitslast mit Cloud Run verbinden.

Die IAM-basierte Zugriffssteuerung erfordert mehr Aufwand bei der Implementierung, insbesondere wenn Sie von einem lokalen Host aus aufrufen:

  • IAM erfordert, dass Sie langlebige Dienstkontoanmeldedaten 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. Einstellungen für eingehenden Traffic zu verwenden, um den Zugriff auf interne Hosts zu beschränken, ist ein guter erster Schritt. Sie sollten aber nicht dabei bleiben.

6. Glückwunsch!

Herzlichen Glückwunsch! Sie haben das Codelab abgeschlossen.

Nächste Schritte:

Weitere Codelabs zu Cymbal Eats:

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, die Ihnen helfen, mehr über die beiden Ebenen der Zugriffssteuerung in Cloud Run zu erfahren.