Ce tutoriel explique comment créer un service de vote composé des éléments suivants :
Un client basé sur un navigateur qui :
- Utilise Identity Platform pour récupérer un jeton d'ID.
- Permet aux utilisateurs de voter pour leur animal de compagnie favori.
- Ajoute ce jeton d'ID à une requête adressée au serveur Cloud Run qui traite le vote.
Un serveur Cloud Run qui :
- Vérifie que l'utilisateur final s'est correctement authentifié en fournissant un jeton d'ID valide.
- Traite le vote de l'utilisateur final.
- À l'aide de ses propres identifiants, envoie le vote à Cloud SQL pour stockage.
Une base de données PostgresSQL qui stocke les votes.
Par souci de simplicité, ce tutoriel utilise Google en tant que fournisseur : les utilisateurs doivent s'authentifier à l'aide d'un compte Google pour acquérir leur jeton d'ID. Toutefois, vous pouvez faire appel à d'autres fournisseurs ou méthodes d'authentification pour la connexion des utilisateurs.
Ce service réduit les risques de sécurité à l'aide de l'outil Secret Manager pour protéger les données sensibles utilisées pour la connexion à l'instance Cloud SQL. Il utilise également une identité de service appliquant le principe de moindre privilège pour sécuriser l'accès à la base de données.
Objectifs
Écrire, compiler et déployer dans Cloud Run un service qui montre comment :
Utiliser Identity Platform pour authentifier un utilisateur final auprès du backend du service Cloud Run.
Créer une identité bénéficiant du moindre privilège pour le service afin d'accorder un accès minimal aux ressources Google Cloud.
Utiliser Secret Manager pour gérer les données sensibles lors de la connexion du service Cloud Run à une base de données PostgreSQL.
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Avant de commencer
- 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.
Rôles requis
Pour obtenir les autorisations nécessaires pour suivre le tutoriel, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet :
-
Administrateur de dépôts Artifact Registry (
roles/artifactregistry.repoAdmin
) -
Éditeur Cloud Build (
roles/cloudbuild.builds.editor
) -
Administrateur Cloud Run (
roles/run.admin
) -
Administrateur Cloud SQL (
roles/cloudsql.admin
) -
Créateur de comptes de service (
roles/iam.serviceAccountCreator
) -
Administrateur Identity Platform (
roles/identityplatform.admin
) -
Éditeur de configuration OAuth (
roles/oauthconfig.editor
) -
Administrateur de projet IAM (
roles/resourcemanager.projectIamAdmin
) -
Administrateur Secret Manager (
roles/secretmanager.admin
) -
Utilisateur du compte de service (
roles/iam.serviceAccountUser
) -
Consommateur Service Usage (
roles/serviceusage.serviceUsageConsumer
) -
Administrateur de l'espace de stockage (
roles/storage.admin
)
Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.
Configurer les valeurs par défaut pour gcloud
Pour configurer gcloud avec les valeurs par défaut pour votre service Cloud Run, procédez comme suit :
Définissez le projet par défaut :
gcloud config set project PROJECT_ID
Remplacez PROJECT_ID par le nom du projet que vous avez créé pour ce tutoriel.
Configurez gcloud pour la région choisie :
gcloud config set run/region REGION
Remplacez REGION par la région Cloud Run compatible de votre choix.
Emplacements Cloud Run
Cloud Run est régional, ce qui signifie que l'infrastructure qui exécute vos services Cloud Run est située dans une région spécifique et gérée par Google pour être disponible de manière redondante dans toutes les zones de cette région.
Lors de la sélection de la région dans laquelle exécuter vos services Cloud Run, vous devez tout d'abord considérer vos exigences en matière de latence, de disponibilité et de durabilité.
Vous pouvez généralement sélectionner la région la plus proche de vos utilisateurs, mais vous devez tenir compte de l'emplacement des autres produits Google Cloud utilisés par votre service Cloud Run.
L'utilisation conjointe de produits Google Cloud dans plusieurs emplacements peut avoir une incidence sur la latence et le coût de votre service.
Cloud Run est disponible dans les régions suivantes :
Soumis aux tarifs de niveau 1
asia-east1
(Taïwan)asia-northeast1
(Tokyo)asia-northeast2
(Osaka)asia-south1
(Mumbai, Inde)europe-north1
(Finlande) Faibles émissions de CO2europe-southwest1
(Madrid) Faibles émissions de CO2europe-west1
(Belgique) Faibles émissions de CO2europe-west4
(Pays-Bas) Faibles émissions de CO2europe-west8
(Milan)europe-west9
(Paris) Faibles émissions de CO2me-west1
(Tel Aviv)us-central1
(Iowa) Faibles émissions de CO2us-east1
(Caroline du Sud)us-east4
(Virginie du Nord)us-east5
(Columbus)us-south1
(Dallas) Faibles émissions de CO2us-west1
(Oregon) Faibles émissions de CO2
Soumis aux tarifs de niveau 2
africa-south1
(Johannesburg)asia-east2
(Hong Kong)asia-northeast3
(Séoul, Corée du Sud)asia-southeast1
(Singapour)asia-southeast2
(Jakarta)asia-south2
(Delhi, Inde)australia-southeast1
(Sydney)australia-southeast2
(Melbourne)europe-central2
(Varsovie, Pologne)europe-west10
(Berlin) Faibles émissions de CO2.europe-west12
(Turin)europe-west2
(Londres, Royaume-Uni) Faibles émissions de CO2europe-west3
(Francfort, Allemagne) Faibles émissions de CO2europe-west6
(Zurich, Suisse) Faibles émissions de CO2me-central1
(Doha)me-central2
(Dammam)northamerica-northeast1
(Montréal) Faibles émissions de CO2northamerica-northeast2
(Toronto) Faibles émissions de CO2southamerica-east1
(São Paulo, Brésil) Faibles émissions de CO2southamerica-west1
(Santiago, Chili) Faibles émissions de CO2us-west2
(Los Angeles)us-west3
(Salt Lake City)us-west4
(Las Vegas)
Si vous avez déjà créé un service Cloud Run, vous pouvez afficher la région dans le tableau de bord Cloud Run de la console Google Cloud.
Récupérer l'exemple de code
Pour récupérer l’exemple de code à utiliser, procédez comme suit :
Clonez le dépôt de l'exemple d'application sur votre machine locale :
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Accédez au répertoire contenant l'exemple de code Cloud Run :
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/
Visualiser l'architecture
Un utilisateur final envoie la première requête au serveur Cloud Run.
Le client se charge dans le navigateur.
L'utilisateur fournit les identifiants de connexion via la boîte de dialogue de connexion Google à partir d'Identity Platform. Une alerte souhaite la bienvenue à l'utilisateur connecté.
Le contrôle est redirigé vers le serveur. L'utilisateur final vote à l'aide du client, qui récupère un jeton d'ID depuis Identity Platform et l'ajoute à l'en-tête de la requête de vote.
Lorsque le serveur reçoit la requête, il vérifie le jeton d'ID Identity Platform, ce qui confirme que l'utilisateur final est correctement authentifié. Le serveur envoie ensuite le vote à Cloud SQL à l'aide de ses propres identifiants.
Comprendre le code principal
L'exemple est mis en œuvre avec un client et un serveur, comme décrit ci-dessous.
Intégrer Identity Platform : code côté client
Cet exemple utilise les SDK Firebase pour s'intégrer à Identity Platform visant afin de gérer la connexion et les utilisateurs. Pour se connecter à Identity Platform, le code JavaScript côté client stocke la référence aux identifiants du projet en tant qu'objet de configuration et importe les SDK Firebase JavaScript requis :
Le SDK Firebase JavaScript gère le flux de connexion en invitant l'utilisateur final à se connecter à son compte Google via une fenêtre pop-up. Il le redirige ensuite vers le service.
Lorsqu'un utilisateur s'est connecté avec succès, le client utilise les méthodes Firebase pour générer un jeton d'ID. Le client ajoute le jeton d'ID à l'en-tête Authorization
de sa requête au serveur.
Intégrer Identity Platform : code côté serveur
Le serveur vérifie le jeton d'ID utilisateur envoyé par le client à l'aide du SDK Admin Firebase. Si le jeton d'ID fourni présente le bon format, qu'il n'a pas expiré et qu'il est correctement signé, la méthode renvoie le jeton d'ID décodé. Le serveur extrait l'uid
Identity Platform pour cet utilisateur.
Node.js
Python
Java
Connecter le serveur à Cloud SQL
Le service se connecte au socket de domaine Unix de l'instance Cloud SQL au format /cloudsql/CLOUD_SQL_CONNECTION_NAME
.
Node.js
Python
Java
Utilisez l'intégration Spring Cloud Google PostgreSQL pour interagir avec vos bases de données PostgreSQL dans Cloud SQL à l'aide de bibliothèques Spring JDBC. Définissez votre configuration Cloud SQL pour MySQL afin de configurer automatiquement un beanDataSource
, qui, associé à Spring JDBC, fournit un objet bean JdbcTemplate
. qui permet d'effectuer des opérations telles que l'interrogation et la modification d'une base de données.
Gérer une configuration sensible avec Secret Manager
Secret Manager permet le stockage centralisé et sécurisé de données sensibles, telles qu'une configuration de Cloud SQL. Le service injecte des identifiants Cloud SQL à partir de Secret Manager au moment de l'exécution par l'intermédiaire d'une variable d'environnement. En savoir plus sur l'utilisation des secrets avec Cloud Run.
Node.js
Python
Java
Configurer Identity Platform
Identity Platform nécessite d'être configuré manuellement dans la console Google Cloud.
Accédez à la page Identity Platform Marketplace dans la console Google Cloud.
Cliquez sur Activer Identity Platform.
Créez l'écran d'autorisation OAuth :
Dans une nouvelle fenêtre, accédez à la page "API et services > Identifiants".
Sélectionnez la page Écran d'autorisation OAuth.
À des fins de test, sélectionnez Externe.
Cliquez sur Créer.
Dans la boîte de dialogue Informations sur l'application :
- Indiquez le nom de l'application.
- Sélectionnez l'une des adresses e-mail d'assistance utilisateur affichées.
- Saisissez l'adresse e-mail que vous souhaitez utiliser pour contacter le développeur.
Cliquez sur Enregistrer et continuer.
Dans la boîte de dialogue Champs d'application, cliquez sur Enregistrer et continuer.
Dans la boîte de dialogue Utilisateurs de test, cliquez sur Enregistrer et continuer.
Dans la boîte de dialogue Résumé, cliquez sur Revenir au tableau de bord.
Sous État de la publication, cliquez sur Publier l'application.
Cliquez sur Confirmer.
Créez et obtenez votre ID client et votre code secret OAuth :
En haut de la page, cliquez sur Créer des identifiants, puis sélectionnez
OAuth client ID
.Dans Type d'application, sélectionnez Application Web, puis indiquez un nom.
Cliquez sur Créer.
Notez
client_id
etclient_secret
pour les utiliser plus tard dans cette procédure.
Configurez Google en tant que fournisseur :
Accédez à la page "Fournisseurs d'identité" dans Cloud Console.
Cliquez sur Ajouter un fournisseur.
Dans la liste, sélectionnez Google.
Dans les paramètres de configuration du SDK Web, saisissez les valeurs
client_id
etclient_secret
des étapes précédentes.Sous Configurer votre application, cliquez sur Informations sur la configuration.
Copiez les valeurs
apiKey
etauthDomain
dans le fichierstatic/config.js
de l'exemple pour initialiser le SDK client Identity Platform.Cliquez sur Enregistrer.
Déployer le service
Suivez les étapes ci-dessous pour terminer le provisionnement et le déploiement de l'infrastructure, ou automatisez le processus dans Cloud Shell en cliquant sur "Exécuter sur Google Cloud" :
Créez une instance Cloud SQL comportant une base de données PostgreSQL à l'aide de la console ou de la CLI :
gcloud sql instances create CLOUD_SQL_INSTANCE_NAME \ --database-version=POSTGRES_12 \ --region=CLOUD_SQL_REGION \ --cpu=2 \ --memory=7680MB \ --root-password=DB_PASSWORD
Ajoutez vos identifiants Cloud SQL au fichier
postgres-secrets.json
:Node.js
Python
Java
Créez un secret avec versions gérées à l'aide de la console ou de la CLI :
gcloud secrets create idp-sql-secrets \ --replication-policy="automatic" \ --data-file=postgres-secrets.json
Créez un compte de service pour le serveur à l'aide de la console ou de la CLI :
gcloud iam service-accounts create idp-sql-identity
Attribuez des rôles pour l'accès à Secret Manager et à Cloud SQL à l'aide de la console ou de la CLI :
Autorisez le compte de service associé au serveur à accéder au secret créé :
gcloud secrets add-iam-policy-binding idp-sql-secrets \ --member serviceAccount:idp-sql-identity@PROJECT_ID.iam.gserviceaccount.com \ --role roles/secretmanager.secretAccessor
Autorisez le compte de service associé au serveur à accéder à Cloud SQL :
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:idp-sql-identity@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudsql.client
Créez un dépôt Artifact Registry :
gcloud artifacts repositories create REPOSITORY \ --repository-format docker \ --location REGION
REPOSITORY
est le nom du dépôt. Pour chaque emplacement de dépôt d'un projet, les noms de dépôt doivent être uniques.
Générez l'image de conteneur à l'aide de Cloud Build :
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
Cet exemple utilise Jib pour créer des images Docker à l'aide d'outils Java courants. Jib optimise les builds de conteneurs sans requérir de fichier Dockerfile ni d'installation Docker. Découvrez comment créer des conteneurs Java avec Jib.
Utilisez l'assistant d'identification gcloud pour autoriser Docker à transférer du contenu vers Artifact Registry.
gcloud auth configure-docker
Utilisez le plug-in Maven Jib pour créer et transférer le conteneur dans Artifact Registry.
mvn compile jib:build -Dimage=REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/idp-sql
Déployez l'image de conteneur dans Cloud Run à l'aide de la console ou de la CLI. Notez que le serveur est déployé pour autoriser l'accès non authentifié. Ainsi, l'utilisateur peut charger le client et lancer le processus. Le serveur vérifie manuellement le jeton d'ID ajouté à la requête de vote, en authentifiant l'utilisateur final.
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
Notez également les options
--service-account
,--add-cloudsql-instances
et--update-secrets
, qui spécifient respectivement l'identité du service, la connexion à l'instance Cloud SQL et le nom du secret avec la version en tant que variable d'environnement.
Touches finales
Identity Platform nécessite que vous autorisiez l'URL du service Cloud Run en tant que redirection autorisée après la connexion de l'utilisateur :
Modifiez le fournisseur Google en cliquant sur l'icône Stylo de la page Fournisseurs d'identité.
Dans le panneau de droite, sous "Domaines autorisés", cliquez sur Ajouter un domaine, puis saisissez l'URL du service Cloud Run.
Vous pouvez trouver l'URL du service dans les journaux une fois que la compilation ou le déploiement ont eu lieu. Vous pouvez également la trouver à tout moment à l'aide de la commande suivante :
gcloud run services describe idp-sql --format 'value(status.url)'
Accéder à la page API et services > Identifiants.
Cliquez sur l'icône en forme de crayon à côté de votre ID client OAuth pour le modifier, sous le bouton
Authorized redirect URIs click the
Ajouter un URI.Dans le champ, copiez et collez l'URL suivante, puis cliquez sur le bouton Save (Enregistrer) en bas de la page.
https://PROJECT_ID.firebaseapp.com/__/auth/handler
Essayez-le !
Pour tester le service complet :
Accédez dans votre navigateur à l'URL fournie par l'étape de déploiement ci-dessus.
Cliquez sur le bouton Se connecter avec Google et suivez la procédure d'authentification.
Enregistrez votre vote.
Elle doit se présenter comme ceci :
Si vous décidez de poursuivre le développement de ces services, n'oubliez pas qu'ils ont un accès IAM restreint au reste de Google Cloud. Des rôles IAM supplémentaires devront donc leur être attribués afin de pouvoir accéder à de nombreux autres services.
Nettoyer
Si vous avez créé un projet pour ce tutoriel, supprimez-le. Si vous avez utilisé un projet existant et que vous souhaitez le conserver sans les modifications du présent tutoriel, supprimez les ressources créées pour ce tutoriel.
Supprimer le projet
Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.
Pour supprimer le projet :
- 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.
Supprimer les ressources du tutoriel
Supprimez le service Cloud Run que vous avez déployé dans ce tutoriel :
gcloud run services delete SERVICE-NAME
Où SERVICE-NAME est le nom de service que vous avez choisi.
Vous pouvez également supprimer des services Cloud Run à partir de Google Cloud Console.
Supprimez la configuration régionale gcloud par défaut que vous avez ajoutée lors de la configuration du tutoriel :
gcloud config unset run/region
Supprimez la configuration du projet :
gcloud config unset project
Supprimez les autres ressources Google Cloud créées dans ce tutoriel :
Étape suivante
- Découvrez plus en détail comment Se connecter à Cloud SQL à partir de Cloud Run.
- En savoir plus sur les méthodes de connexion et la gestion des utilisateurs avec Identity Platform.
- Découvrez d'autres moyens d'authentifier les développeurs, les services et les utilisateurs des services déployés dans Cloud Run.
- Découvrez d'autres démonstrations, tutoriels et exemples concernant Cloud Run.