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 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 auch die Einrichtung eines Cloud VPN-Gateways im VPC-Netzwerk, wie unten dargestellt.
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 gezeigt.
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 einer lokalen Arbeitslast simulieren.
2. Einrichtung und Anforderungen
Umgebung zum selbstbestimmten Lernen einrichten
- 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 eines erstellen.
- 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 generieren. Alternativ können Sie einen eigenen ausprobieren 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.
- 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. Neuen Nutzern der Google Cloud Platform steht das kostenlose Testprogramm mit einem Guthaben von 300 $ zur Verfügung.
Umgebung einrichten
- 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
- 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
- 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
- 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-registration-service] zulassen (y/N)? Y
gcloud run deploy
Nach Abschluss dieses Befehls wird die URL Ihres Cloud Run-Dienstes angezeigt. 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 gelten Anfragen von anderen Google Cloud-Produkten als intern, 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 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, erhalten Sie die Meldung Error: Forbidden - Access is forbidden.
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. Virtuelle Compute Engine-Maschine als Jump-Server 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 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. 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 aussehen:
Partner registration service: RUNNING
5. Was ist mit der IAM-basierten Zugriffssteuerung?
In diesem Lab haben Sie gelernt, wie und wann Sie Einstellungen für eingehenden Traffic verwenden. Die Ingress-Einstellungen 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:
- Cloud Workflows mit Eventarc auslösen
- Ereignisverarbeitung über Cloud Storage auslösen
- Verbindung zu Private CloudSQL über Cloud Run herstellen
- Verbindung zu vollständig verwalteten Datenbanken über Cloud Run herstellen
- Sichere serverlose Anwendung mit Identity-Aware Proxy (IAP)
- 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 zusätzliche Ressourcen, mit denen Sie mehr über die beiden Ebenen der Zugriffssteuerung in Cloud Run erfahren.