In dieser Anleitung wird gezeigt, wie Sie einen Abstimmungsdienst erstellen, der aus folgenden Elementen besteht:
Einem browserbasierten Client, der:
- Identity Platform verwendet, um ein ID-Token abzurufen.
- Nutzer ermöglicht, für ihre Lieblingstiere zu stimmen.
- Das ID-Token einer Anfrage an den Cloud Run-Server hinzufügt, der die Stimme verarbeitet.
Einem Cloud Run-Server, der:
- Prüft, ob der Endnutzer ordnungsgemäß authentifiziert wurde. Dazu wird ein gültiges ID-Token bereitgestellt.
- Die Stimme des Endnutzers verarbeitet.
- Mithilfe seiner eigenen Anmeldedaten die Stimme zur Speicherung an Cloud SQL sendet.
Einer PostgreSQL-Datenbank, in der die Stimmen gespeichert werden
Der Einfachheit halber wird in dieser Anleitung Google als Anbieter verwendet. Nutzer müssen sich mit einem Google-Konto authentifizieren, um ihr ID-Token zu erhalten. Sie können jedoch für die Anmeldung der Nutzer auch andere Anbieter oder Authentifizierungsmethoden verwenden.
Mit diesem Dienst werden die Sicherheitsrisiken minimiert. Dazu werden die Daten, die zur Verbindung mit der Cloud SQL-Instanz verwendet werden, mit Secret Manager geschützt. Außerdem wird eine Dienstidentität mit minimalen Berechtigungen verwendet, um den Zugriff auf die Datenbank zu sichern.
Ziele
Einen Dienst in Cloud Run schreiben, erstellen und bereitstellen, mit dem folgende Aufgaben beschrieben werden:
Verwenden Sie Identity Platform, um einen Endnutzer beim Cloud Run-Dienst-Backend zu authentifizieren.
Erstellen Sie eine Identität mit minimalen Berechtigungen für den Dienst, um minimalen Zugriff auf Google Cloud-Ressourcen zu gewähren.
Verwenden Sie Secret Manager für die Verarbeitung vertraulicher Daten, wenn Sie den Cloud Run-Dienst mit einer PostgreSQL-Datenbank verbinden.
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Hinweis
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Run, Secret Manager, Cloud SQL, Artifact Registry, and Cloud Build APIs.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Ausführen der Anleitung benötigen:
-
Repository-Administrator für Artifact Registry (
roles/artifactregistry.repoAdmin
) -
Cloud Build-Bearbeiter (
roles/cloudbuild.builds.editor
) -
Cloud Run-Administrator (
roles/run.admin
) - Cloud SQL-Administrator (
roles/cloudsql.admin
) -
Dienstkonten erstellen (
roles/iam.serviceAccountCreator
) - Identity Platform-Administrator (
roles/identityplatform.admin
) - OAuth-Konfigurationsbearbeiter (
roles/oauthconfig.editor
) -
Projekt-IAM-Administrator (
roles/resourcemanager.projectIamAdmin
) -
Secret Manager-Administrator (
roles/secretmanager.admin
) -
Service Account User (
roles/iam.serviceAccountUser
) -
Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer
) -
Storage-Administrator (
roles/storage.admin
)
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
gcloud
-Standardeinstellungen einrichten
So konfigurieren Sie gcloud mit Standardeinstellungen für den Cloud Run-Dienst:
Legen Sie ein Standardprojekt fest:
gcloud config set project PROJECT_ID
Ersetzen Sie PROJECT_ID durch den Namen des Projekts, das Sie für diese Anleitung erstellt haben.
Konfigurieren Sie gcloud für die von Ihnen ausgewählte Region:
gcloud config set run/region REGION
Ersetzen Sie REGION durch die unterstützte Cloud Run-Region Ihrer Wahl.
Cloud Run-Standorte
Cloud Run ist regional. Die Infrastruktur, in der die Cloud Run-Dienste ausgeführt werden, befindet sich demnach in einer bestimmten Region. Aufgrund der Verwaltung durch Google sind die Anwendungen in allen Zonen innerhalb dieser Region redundant verfügbar.
Bei der Auswahl der Region, in der Ihre Cloud Run-Dienste ausgeführt werden, ist vorrangig, dass die Anforderungen hinsichtlich Latenz, Verfügbarkeit oder Langlebigkeit erfüllt werden.
Sie können im Allgemeinen die Region auswählen, die Ihren Nutzern am nächsten liegt, aber Sie sollten den Standort der anderen Google Cloud-Produkte berücksichtigen, die von Ihrem Cloud Run-Dienst verwendet werden.
Die gemeinsame Nutzung von Google Cloud-Produkten an mehreren Standorten kann sich auf die Latenz und die Kosten des Dienstes auswirken.
Cloud Run ist in diesen Regionen verfügbar:
Unterliegt Preisstufe 1
asia-east1
(Taiwan)asia-northeast1
(Tokio)asia-northeast2
(Osaka)asia-south1
(Mumbai, Indien)europe-north1
(Finnland) Niedriger CO2-Werteurope-southwest1
(Madrid) Niedriger CO2-Ausstoßeurope-west1
(Belgien) Niedriger CO2-Ausstoßeurope-west4
(Niederlande) Niedriger CO2-Ausstoßeurope-west8
(Mailand)europe-west9
(Paris) Niedriger CO2-Ausstoßme-west1
(Tel Aviv)us-central1
(Iowa) Niedriger CO2-Ausstoßus-east1
(South Carolina)us-east4
(Northern Virginia)us-east5
(Columbus)us-south1
(Dallas) Niedriger CO2-Ausstoßus-west1
(Oregon) Niedriger CO2-Ausstoß
Unterliegt Preisstufe 2
africa-south1
(Johannesburg)asia-east2
(Hongkong)asia-northeast3
(Seoul, Südkorea)asia-southeast1
(Singapur)asia-southeast2
(Jakarta)asia-south2
(Delhi, Indien)australia-southeast1
(Sydney)australia-southeast2
(Melbourne)europe-central2
(Warschau, Polen)europe-west10
(Berlin) Niedriger CO2-Ausstoßeurope-west12
(Turin)europe-west2
(London, Vereinigtes Königreich) Niedriger CO2-Ausstoßeurope-west3
(Frankfurt, Deutschland) Niedriger CO2-Ausstoßeurope-west6
(Zürich, Schweiz) Niedriger CO2-Ausstoßme-central1
(Doha)me-central2
(Dammam)northamerica-northeast1
(Montreal) Niedriger CO2-Ausstoßnorthamerica-northeast2
(Toronto) Niedriger CO2-Ausstoßsouthamerica-east1
(Sao Paulo, Brasilien) Niedriger CO2-Ausstoßsouthamerica-west1
(Santiago, Chile) Niedriger CO2-Ausstoßus-west2
(Los Angeles)us-west3
(Salt Lake City)us-west4
(Las Vegas)
Wenn Sie bereits einen Cloud Run-Dienst erstellt haben, können Sie dessen Region im Cloud Run-Dashboard der Google Cloud Console aufrufen.
Codebeispiel abrufen
So rufen Sie das gewünschte Codebeispiel ab:
Klonen Sie das Repository der Beispiel-App auf Ihren lokalen Computer:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.
Wechseln Sie in das Verzeichnis, das den Cloud Run-Beispielcode enthält:
Node.js
cd nodejs-docs-samples/run/idp-sql/
Python
cd python-docs-samples/run/idp-sql/
Java
cd java-docs-samples/run/idp-sql/
Architektur visualisieren
Ein Endnutzer stellt die erste Anfrage an den Cloud Run-Server.
Der Client wird im Browser geladen.
Der Nutzer stellt die Anmeldedaten über das Google Log-in-Dialogfeld von Identity Platform bereit. In einer Benachrichtigung wird der angemeldete Nutzer begrüßt.
Die Steuerung wird zurück an den Server zurückgeleitet. Der Endnutzer stimmt mithilfe des Clients ab, der ein ID-Token von Identity Platform abruft und dem Abstimmungs-Anfrageheader hinzufügt.
Wenn der Server die Anfrage empfängt, überprüft er das Identity Platform-ID-Token, um zu bestätigen, dass der Endnutzer ordnungsgemäß authentifiziert ist. Anschließend sendet der Server die Stimme mit seinen eigenen Anmeldedaten an Cloud SQL.
Informationen zum Kerncode
In diesem Beispiel erfolgt eine Implementierung als Client und Server wie nachfolgend beschrieben.
Integration in Identity Platform: clientseitiger Code
In diesem Beispiel werden zur Integration in der Identity Platform Firebase SDKs verwendet, um Nutzer anzumelden und zu verwalten. Zum Herstellen einer Verbindung zu Identity Platform enthält das clientseitige JavaScript den Verweis auf die Anmeldedaten des Projekts als Konfigurationsobjekt und importiert die erforderlichen Firebase JavaScript SDKs:
Das Firebase JavaScript SDK verarbeitet den Anmeldevorgang, indem der Endnutzer aufgefordert wird, sich über ein Pop-up-Fenster bei seinem Google-Konto anzumelden. Anschließend werden er zum Dienst zurückgeleitet.
Wenn sich ein Nutzer erfolgreich anmeldet, verwendet der Client Firebase-Methoden, um ein ID-Token zu erstellen. Der Client fügt das ID-Token dem Authorization
-Header seiner Anfrage an den Server hinzu.
Integration in Identity Platform: serverseitiger Code
Der Server verwendet das Firebase Admin SDK, um das vom Client gesendete Nutzer-ID-Token zu prüfen. Wenn das angegebene ID-Token das richtige Format hat, nicht abgelaufen ist und ordnungsgemäß signiert wurde, gibt die Methode das decodierte ID-Token zurück. Der Server extrahiert die Identity Platform-uid
für diesen Nutzer.
Node.js
Python
Java
Server mit Cloud SQL verbinden
Der Server stellt eine Verbindung zum Unix Domain Socket der Cloud SQL-Instanz her. Dazu wird folgendes Format verwendet: /cloudsql/CLOUD_SQL_CONNECTION_NAME
.
Node.js
Python
Java
Mit der Spring Cloud Google Cloud PostgreSQL Starter-Integration können Sie mithilfe von Spring JDBC-Bibliotheken mit Ihren PostgreSQL-Datenbanken in Google Cloud SQL interagieren. Legen Sie fest, dass die Cloud SQL for MySQL-Konfiguration automatisch eineDataSource
-Bean konfiguriert, die gekoppelt mit Spring JDBC ein JdbcTemplate
-Objekt bereitstellt. Durch dieses werden Vorgänge wie das Abfragen und Ändern einer Datenbank ermöglicht.
Mit Secret Manager vertrauliche Konfigurationen verwalten
Secret Manager bietet eine zentralisierte und sichere Speicherung vertraulicher Daten wie der Cloud SQL-Konfiguration. Der Server fügt zur Laufzeit die Cloud SQL-Anmeldedaten aus Secret Manager über eine Umgebungsvariable ein. Weitere Informationen zur Verwendung von Secrets mit Cloud Run.
Node.js
Python
Java
Identity Platform einrichten
Identity Platform erfordert eine manuelle Einrichtung in der Cloud Console.
Rufen Sie in der Cloud Console die Seite Identity Platform Marketplace auf.
Klicken Sie auf Identity Platform aktivieren.
Erstellen Sie den OAuth-Zustimmungsbildschirm:
Rufen Sie in einem neuen Fenster die Seite „APIs & Dienste“ > „Anmeldedaten“ auf.
Wählen Sie die Seite OAuth-Zustimmungsbildschirm aus.
Wählen Sie zu Testzwecken Extern aus.
Klicken Sie auf Erstellen.
Gehen Sie im Dialogfeld App-Informationen so vor:
- Geben Sie den Namen der Anwendung an.
- Wählen Sie eine der E-Mail-Adressen für den Nutzersupport aus.
- Geben Sie die E-Mail-Adresse ein, die Sie als Entwicklerkontakt verwenden möchten.
Klicken Sie auf Speichern und fortfahren.
Klicken Sie im Dialogfeld Bereiche auf Speichern und fortfahren.
Klicken Sie im Dialogfeld Testnutzer auf Speichern und fortfahren.
Klicken Sie im Dialogfeld Zusammenfassung auf Zurück zum Dashboard.
Klicken Sie unter Veröffentlichungsstatus auf App veröffentlichen.
Klicken Sie auf Bestätigen.
Erstellen Sie Ihre OAuth-Client-ID und Ihr Secret:
Klicken Sie oben auf der Seite auf Anmeldedaten erstellen und wählen Sie
OAuth client ID
aus.Wählen Sie unter Anwendungstyp die Option Webanwendung aus und geben Sie den Namen an.
Klicken Sie auf Erstellen.
Notieren Sie sich
client_id
undclient_secret
für die spätere Verwendung in diesem Verfahren.
Konfigurieren Sie Google als Anbieter:
Rufen Sie in der Cloud Console die Seite „Identitätsanbieter“ auf.
Klicken Sie auf Anbieter hinzufügen.
Wählen Sie aus der Liste Google aus.
Geben Sie in den Web SDK-Konfigurationseinstellungen die Werte für
client_id
undclient_secret
aus den vorherigen Schritten ein.Klicken Sie unter Anwendung konfigurieren auf Einrichtungsdetails.
Kopieren Sie die Werte
apiKey
undauthDomain
in dasstatic/config.js
-Beispiel, um das SDK von Identity Platform Client zu initialisieren.Klicken Sie auf Speichern.
Dienst bereitstellen
Führen Sie die im Folgenden aufgeführten Schritte aus, um die Bereitstellung der Infrastruktur abzuschließen, oder automatisieren den Prozess in Cloud Shell durch Klicken auf „In Google Cloud ausführen“.
Erstellen Sie mithilfe der Console oder der Befehlszeile eine Cloud SQL-Instanz mit PostgreSQL-Datenbank:
gcloud sql instances create CLOUD_SQL_INSTANCE_NAME \ --database-version=POSTGRES_12 \ --region=CLOUD_SQL_REGION \ --cpu=2 \ --memory=7680MB \ --root-password=DB_PASSWORD
Fügen Sie
postgres-secrets.json
die Werte Ihrer Cloud SQL-Anmeldedaten hinzu:Node.js
Python
Java
Erstellen Sie mithilfe der Console oder der Befehlszeile ein versioniertes Secret:
gcloud secrets create idp-sql-secrets \ --replication-policy="automatic" \ --data-file=postgres-secrets.json
Erstellen Sie ein Dienstkonto für den Server mithilfe der Konsole oder der Befehlszeile:
gcloud iam service-accounts create idp-sql-identity
So gewähren Sie Rollen für den Zugriff auf Secret Manager und Cloud SQL über die Konsole oder die Befehlszeile:
Erlauben Sie dem mit dem Server verknüpften Dienstkonto den Zugriff auf das erstellte Secret:
gcloud secrets add-iam-policy-binding idp-sql-secrets \ --member serviceAccount:idp-sql-identity@PROJECT_ID.iam.gserviceaccount.com \ --role roles/secretmanager.secretAccessor
Erlauben Sie dem Dienstkonto, das mit dem Server verknüpft ist, den Zugriff auf Cloud SQL:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:idp-sql-identity@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudsql.client
So erstellen Sie eine Artifact Registry:
gcloud artifacts repositories create REPOSITORY \ --repository-format docker \ --location REGION
REPOSITORY
ist der Name des Repositorys. Repository-Namen können für jeden Repository-Speicherort in einem Projekt nur einmal vorkommen.
Erstellen Sie mithilfe von Cloud Build das Container-Image:
Node.js
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/idp-sql
Python
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/idp-sql
Java
In diesem Beispiel wird Jib verwendet, um Docker-Images mit gängigen Java-Tools zu erstellen. Jib optimiert Container-Builds, ohne dass ein Dockerfile erforderlich ist oder Docker installiert sein muss. Weitere Informationen zum Erstellen von Java-Containern mit Jib
Verwenden Sie den gcloud Credential Helper, um Docker für das Übertragen per Push in Ihre Artifact Registry zu autorisieren.
gcloud auth configure-docker
Verwenden Sie das Jib-Maven-Plug-in, um den Container zu erstellen und per Push in Artifact Registry zu übertragen.
mvn compile jib:build -Dimage=REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/idp-sql
Stellen Sie das Container-Image mithilfe der Konsole oder der Befehlszeile in Cloud Run bereit: Hinweis: Der Server wird bereitgestellt, um den nicht authentifizierten Zugriff zuzulassen. Dadurch kann der Nutzer den Client laden und den Prozess starten. Der Server überprüft das ID-Token, das der Abstimmungsanfrage manuell hinzugefügt wurde, um den Endnutzer zu authentifizieren.
gcloud run deploy idp-sql \ --image REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/idp-sql \ --allow-unauthenticated \ --service-account idp-sql-identity@PROJECT_ID.iam.gserviceaccount.com \ --add-cloudsql-instances PROJECT_ID:REGION:CLOUD_SQL_INSTANCE_NAME \ --update-secrets CLOUD_SQL_CREDENTIALS_SECRET=idp-sql-secrets:latest
Beachten Sie auch die Flags,
--service-account
,--add-cloudsql-instances
und--update-secrets
, die die Dienstidentität, die Cloud SQL-Instanzverbindung und den Secret-Namen mit Version als Umgebungsvariable angeben.
Der letzte Schliff
Identity Platform erfordert, dass Sie die Cloud Run-Dienst-URL als zulässige Weiterleitung autorisieren, nachdem der Nutzer angemeldet wurde:
Klicken Sie auf der Seite Identitätsanbieter auf das Stiftsymbol, um den Google-Anbieter zu bearbeiten.
Klicken Sie unter „Autorisierte Domains“ im rechten Bereich auf Domain hinzufügen und geben Sie die URL des Cloud Run-Dienstes ein.
Die Dienst-URL finden Sie nach der Erstellung oder Bereitstellung in den Logs. Alternativ können Sie sie so abrufen:
gcloud run services describe idp-sql --format 'value(status.url)'
Zur Seite „APIs & Dienste“ > „Anmeldedaten“
Klicken Sie auf das Stiftsymbol neben Ihrer OAuth-Client-ID, um sie zu bearbeiten, und dann auf die Schaltfläche
Authorized redirect URIs click the
URI hinzufügen.Kopieren Sie die folgende URL und fügen Sie sie in das Feld ein. Klicken Sie dann unten auf der Seite auf Speichern.
https://PROJECT_ID.firebaseapp.com/__/auth/handler
Testen
So testen Sie den gesamten Dienst:
Rufen Sie im Browser die URL auf, die Sie im oben beschriebenen Bereitstellungsschritt erhalten haben.
Klicken Sie auf die Schaltfläche Über Google anmelden und führen Sie den Authentifizierungsvorgang aus.
Geben Sie Ihre Stimme ab!
Das sollte so aussehen:
Wenn Sie sich dafür entscheiden, mit der Entwicklung dieser Dienste fortzufahren, denken Sie daran, dass diese nur eingeschränkten IAM-Zugriff (Identity and Access Management) auf den Rest von Google Cloud haben und ihnen zusätzliche IAM-Rollen zugewiesen werden müssen, um auf viele andere Dienste zugreifen zu können.
Bereinigen
Wenn Sie ein neues Projekt für diese Anleitung erstellt haben, löschen Sie das Projekt. Wenn Sie ein vorhandenes Projekt verwendet haben und es beibehalten möchten, ohne die Änderungen in dieser Anleitung hinzuzufügen, löschen Sie die für die Anleitung erstellten Ressourcen.
Projekt löschen
Am einfachsten vermeiden Sie weitere Kosten, wenn Sie das zum Ausführen der Anleitung erstellte Projekt löschen.
So löschen Sie das Projekt:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Anleitungsressourcen löschen
Löschen Sie den Cloud Run-Dienst, den Sie in dieser Anleitung bereitgestellt haben:
gcloud run services delete SERVICE-NAME
Dabei ist SERVICE-NAME der von Ihnen ausgewählte Dienstname.
Sie können Cloud Run-Dienste auch über die Google Cloud Console löschen.
Entfernen Sie die Konfiguration der Standardregion gcloud, die Sie während der Einrichtung für die Anleitung hinzugefügt haben:
gcloud config unset run/region
Entfernen Sie die Projektkonfiguration:
gcloud config unset project
Löschen Sie sonstige Google Cloud-Ressourcen, die in dieser Anleitung erstellt wurden:
Nächste Schritte
- Weitere Informationen zum Herstellen einer Verbindung von Cloud Run zu Cloud SQL
- Weitere Informationen zu Anmeldemethoden und zum Verwalten von Nutzern mit der Identity Platform
- Weitere Möglichkeiten zur Authentifizierung von Entwicklern, Diensten und Nutzern von in Cloud Run bereitgestellten Diensten
- Weitere Cloud Run-Demos, Anleitungen und Beispiele entdecken