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 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 den Einstellungen für eingehenden Traffic können Sie Anfragen nach ihrer Netzwerkursprung (intern oder extern) filtern. Standardmäßig dürfen alle Anfragen, einschließlich Anfragen aus dem öffentlichen Internet, weitergeleitet werden.

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 Einstellungen für eingehenden Traffic verwenden.

Lokale Hosts stellen über die VPC eine Verbindung 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 die Einrichtung eines Cloud VPN-Gateways im VPC-Netzwerk, wie unten gezeigt.

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 wie hier gezeigt Anfragen von einer virtuellen Compute Engine-Maschine in der VPC senden.

aebf22740c7a84f0.png

Die virtuelle Compute Engine-Maschine, die Sie als Jump-Server verwenden, hat denselben Netzwerkursprung wie das Cloud VPN-Gateway. Daher können Sie damit das Senden von Anfragen von einer 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 Projektteilnehmer. Es handelt sich um eine Zeichenfolge, die von Google APIs nicht verwendet wird. Sie können sie jederzeit aktualisieren.
  • Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich. Sie kann nach dem Festlegen nicht mehr geändert werden. Die Cloud Console generiert automatisch einen eindeutigen String. ist Ihnen meist egal, was es ist. In den meisten Codelabs musst du dich auf die Projekt-ID beziehen, die üblicherweise als PROJECT_ID gekennzeichnet ist. Wenn Ihnen die generierte ID nicht gefällt, können Sie eine weitere zufällige ID erstellen. Alternativ können Sie einen eigenen verwenden und nachsehen, ob er verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen.
  • Zur Information gibt es noch einen dritten Wert, die Projektnummer, die von manchen APIs verwendet wird. Weitere Informationen zu allen 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. Dieses Codelab sollte ohne großen Aufwand betrieben werden. Wenn Sie Ressourcen herunterfahren möchten, um über diese Anleitung hinaus keine Kosten zu verursachen, können Sie die von Ihnen erstellten Ressourcen oder das gesamte Projekt löschen. Neue Google Cloud-Nutzer haben Anspruch auf eine kostenlose Testversion von 300$.

Umgebung einrichten

  1. Legen Sie eine Umgebungsvariable auf 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 zum Ausführen dieses Labs erforderlich sind.
gcloud services enable \
  run.googleapis.com \
  cloudbuild.googleapis.com \
  compute.googleapis.com \
  artifactregistry.googleapis.com
  1. Klonen Sie das Repository der Beispielanwendung und rufen Sie das Verzeichnis auf
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 sich vergewissert haben, dass Sie Anfragen über Ihren Browser senden können, wird der Dienst gesperrt und nur Anfragen von internen Netzwerkquellen zugelassen.

Gehen Sie so vor, wenn Sie den folgenden Befehl ausführen:

  • 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 übernehmen.
  • Dienstname (partner-registration-service): Drücken Sie die Eingabetaste, um den Standardwert zu übernehmen
  • Nicht authentifizierte Aufrufe für [partner-registrierungsdienst] (j/N) zulassen? Y
gcloud run deploy 

Wenn dieser Befehl ausgeführt wurde, wird die URL Ihres Cloud Run-Dienstes aufgeführt. Die Ausgabe sieht in 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

Den Dienst so einrichten, dass nur interne Anfragen zugelassen werden

Jetzt verwenden Sie die Einstellungen für eingehenden Traffic 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. Daher eignet er sich perfekt 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 und der öffentliche Zugriff untersagt ist.

Aktualisieren Sie den Dienst so, dass nur interne Anfragen zugelassen werden:

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

Wenn Sie die Dienst-URL noch einmal öffnen, erhalten Sie die Meldung Error: Forbidden - Access is forbidden.

Da Ihr Browser die Anfrage von einer externen Netzwerkquelle und nicht von einer internen Quelle an das Google Cloud-Projekt sendet, erwarten Sie genau das. Ihr Dienst ist jetzt noch sicherer.

4. Virtuelle Compute Engine-Maschine als Jump-Server erstellen

Der nächste Schritt besteht darin, Anfragen von einem lokalen Server über ein Cloud VPN-Gateway zu simulieren. 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

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

Wenn Sie durch den folgenden Befehl aufgefordert werden, SSH in Cloud Shell einzurichten, folgen Sie der Anleitung:

gcloud compute ssh jump-server

Rufen Sie mit diesem Befehl die URL des Cloud Run-Dienstes 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. Die Anfrage sollte erfolgreich ausgeführt werden, 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 aussehen:

Partner registration service: RUNNING

5. Wie sieht es mit der IAM-basierten Zugriffssteuerung aus?

In diesem Lab haben Sie gelernt, wie und wann Sie Einstellungen für eingehenden Traffic verwenden. Einstellungen für eingehenden Traffic sind ein guter erster Schritt, wenn Sie eine lokale Arbeitslast mit Cloud Run verbinden.

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

  • Für IAM müssen Sie langlebige Dienstkonto-Anmeldedaten auf dem Host verwalten
  • IAM erfordert Codeänderungen, um Anfragen mit den Anmeldedaten des Dienstkontos zu signieren.

Google empfiehlt für die Zugriffssteuerung einen mehrstufigen Ansatz. Die Verwendung der Einstellungen für eingehenden Traffic, um den Zugriff auf interne Hosts zu beschränken, ist ein guter erster Schritt, aber geben Sie noch nicht auf!

6. Glückwunsch!

Glückwunsch, du hast das Codelab abgeschlossen.

Nächste Schritte:

Weitere Codelabs von 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 zusätzliche Ressourcen, mit denen Sie mehr über die beiden Ebenen der Zugriffssteuerung in Cloud Run erfahren.