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).
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.
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.
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
- 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.
- 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.
- 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
- 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
- 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
- Beispiel-App-Repository klonen und zum Verzeichnis wechseln
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git
cd cymbal-eats/partner-registration-service
- 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:
- Cloud-Workflows mit Eventarc auslösen
- Ereignisverarbeitung über Cloud Storage auslösen
- Verbindung von Cloud Run zu Private CloudSQL herstellen
- Verbindung von Cloud Run zu vollständig verwalteten Datenbanken herstellen
- Serverlose Anwendung mit Identity-Aware Proxy (IAP) sichern
- Cloud Run-Jobs mit Cloud Scheduler auslösen
- Sichere Bereitstellung in Cloud Run
- Verbindung von GKE Autopilot zu privatem AlloyDB herstellen
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.