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).
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.
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.
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
- 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.
- 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.
- 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
- 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-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:
- Cloud Workflows mit Eventarc auslösen
- Ereignisverarbeitung aus 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 zu privater AlloyDB über GKE Autopilot 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.