Questo tutorial mostra come creare un servizio di voto composto da:
Un client basato su browser che:
- Utilizza Identity Platform per recuperare un token ID.
- Consente agli utenti di votare il proprio animale domestico preferito.
- Aggiunge questo token ID a una richiesta al server Cloud Run che elabora il voto.
Un server Cloud Run che:
- Controlla che l'utente finale abbia eseguito l'autenticazione correttamente fornendo un token ID valido.
- Elabora il voto dell'utente finale.
- Utilizzando le proprie credenziali, invia il voto a Cloud SQL per l'archiviazione.
Un database PostgreSQL che archivia i voti.
Per semplicità, questo tutorial utilizza Google come provider: gli utenti devono autenticarsi utilizzando un Account Google per ottenere il token ID. Tuttavia, puoi utilizzare altri provider o metodi di autenticazione per consentire l'accesso agli utenti.
Questo servizio riduce al minimo i rischi per la sicurezza utilizzando Secret Manager per proteggere i dati sensibili utilizzati per connettersi all'istanza Cloud SQL. Utilizza anche un'identità di servizio con privilegi minimi per proteggere l'accesso al database.
Configurazione dei valori predefiniti di gcloud
Per configurare gcloud con i valori predefiniti per il tuo servizio Cloud Run:
Imposta il progetto predefinito:
gcloud config set project PROJECT_ID
Sostituisci PROJECT_ID con il nome del progetto che hai creato per questo tutorial.
Configura gcloud per la regione scelta:
gcloud config set run/region REGION
Sostituisci REGION con la regione Cloud Run supportata che preferisci.
Località Cloud Run
Cloud Run è regionale, il che significa che l'infrastruttura che esegue i tuoi servizi Cloud Run si trova in una regione specifica ed è gestita da Google per essere disponibile in modo ridondante in tutte le zone all'interno di quella regione.
Il rispetto dei requisiti di latenza, disponibilità o durabilità sono fattori
primari per la selezione della regione in cui vengono eseguiti i servizi Cloud Run.
In genere puoi selezionare la regione più vicina ai tuoi utenti, ma devi considerare
la posizione degli altri Google Cloud
prodotti utilizzati dal tuo servizio Cloud Run.
L'utilizzo combinato dei prodotti Google Cloud in più località può influire
sulla latenza e sui costi del servizio.
Cloud Run è disponibile nelle seguenti regioni:
Soggetto ai prezzi di Livello 1
asia-east1
(Taiwan)asia-northeast1
(Tokyo)asia-northeast2
(Osaka)asia-south1
(Mumbai, India)europe-north1
(Finlandia)Bassi livelli di CO2
europe-north2
(Stoccolma)Bassi livelli di CO2
europe-southwest1
(Madrid)Bassi livelli di CO2
europe-west1
(Belgio)Bassi livelli di CO2
europe-west4
(Paesi Bassi)Bassi livelli di CO2
europe-west8
(Milano)europe-west9
(Parigi)Bassi livelli di CO2
me-west1
(Tel Aviv)northamerica-south1
(Messico)us-central1
(Iowa)Bassi livelli di CO2
us-east1
(Carolina del Sud)us-east4
(Virginia del Nord)us-east5
(Columbus)us-south1
(Dallas)Bassi livelli di CO2
us-west1
(Oregon)Bassi livelli di CO2
Soggetto ai prezzi di Livello 2
africa-south1
(Johannesburg)asia-east2
(Hong Kong)asia-northeast3
(Seul, Corea del Sud)asia-southeast1
(Singapore)asia-southeast2
(Giacarta)asia-south2
(Delhi, India)australia-southeast1
(Sydney)australia-southeast2
(Melbourne)europe-central2
(Varsavia, Polonia)europe-west10
(Berlino)europe-west12
(Torino)europe-west2
(Londra, Regno Unito)Bassi livelli di CO2
europe-west3
(Francoforte, Germania)europe-west6
(Zurigo, Svizzera)A basse emissioni di CO2
me-central1
(Doha)me-central2
(Dammam)northamerica-northeast1
(Montreal)Bassi livelli di CO2
northamerica-northeast2
(Toronto)Bassi livelli di CO2
southamerica-east1
(San Paolo, Brasile)Bassi livelli di CO2
southamerica-west1
(Santiago, Cile)Bassi livelli di CO2
us-west2
(Los Angeles)us-west3
(Salt Lake City)us-west4
(Las Vegas)
Se hai già creato un servizio Cloud Run, puoi visualizzare la regione nella dashboard Cloud Run nella consoleGoogle Cloud .
Recupero dell'esempio di codice
Per recuperare l'esempio di codice da utilizzare:
Clona il repository dell'app di esempio sulla tua macchina locale:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
In alternativa, puoi scaricare il campione come file ZIP ed estrarlo.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
In alternativa, puoi scaricare il campione come file ZIP ed estrarlo.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
In alternativa, puoi scaricare il campione come file ZIP ed estrarlo.
Passa alla directory che contiene il codice campione di 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/
Visualizzazione dell'architettura

Un utente finale invia la prima richiesta al server Cloud Run.
Il client viene caricato nel browser.
L'utente fornisce le credenziali di accesso tramite la finestra di dialogo di accesso Google di Identity Platform. Un avviso dà il benvenuto all'utente che ha eseguito l'accesso.
Il controllo viene reindirizzato al server. L'utente finale vota utilizzando il client, che recupera un token ID da Identity Platform e lo aggiunge all'intestazione della richiesta di voto.
Quando il server riceve la richiesta, verifica il token ID di Identity Platform, confermando che l'utente finale è autenticato correttamente. Il server invia il voto a Cloud SQL utilizzando le proprie credenziali.
Comprendere il codice principale
Il campione è implementato come client e server, come descritto di seguito.
Integrazione con Identity Platform: codice lato client
Questo esempio utilizza gli SDK Firebase per l'integrazione con Identity Platform al fine di accedere e gestire gli utenti. Per connettersi a Identity Platform, JavaScript lato client contiene il riferimento alle credenziali del progetto come oggetto di configurazione e importa gli SDK Firebase JavaScript necessari:
L'SDK Firebase JavaScript gestisce il flusso di accesso chiedendo all'utente finale di accedere al proprio Account Google tramite una finestra popup. e li reindirizza al servizio.
Quando un utente accede correttamente, il client utilizza i metodi Firebase per generare un
token ID. Il client aggiunge il token ID all'intestazione Authorization
della richiesta
al server.
Integrazione con Identity Platform: codice lato server
Il server utilizza l'SDK Firebase Admin
per verificare il token ID utente inviato dal client. Se il token ID fornito
ha il formato corretto, non è scaduto ed è firmato correttamente, il
metodo restituisce il token ID decodificato. Il server estrae l'uid
di Identity Platform
per l'utente.
Node.js
Python
Java
Connessione del server a Cloud SQL
Il server si connette al socket di dominio Unix dell'istanza Cloud SQL utilizzando
il formato: /cloudsql/CLOUD_SQL_CONNECTION_NAME
.
Node.js
Python
Java
Utilizza l'integrazione Spring Cloud Google Cloud PostgreSQL starter per interagire con i tuoi database PostgreSQL in Cloud SQL utilizzando le librerie Spring JDBC. Imposta la configurazione di Cloud SQL per MySQL in modo che configuri automaticamente un beanDataSource
che, insieme a Spring JDBC, fornisce un bean oggetto JdbcTemplate
che consente operazioni come l'interrogazione e la modifica di un database.
Gestione della configurazione sensibile con Secret Manager
Secret Manager fornisce un archivio centralizzato e sicuro di dati sensibili come la configurazione di Cloud SQL. Il server inserisce le credenziali Cloud SQL da Secret Manager in fase di runtime tramite una variabile di ambiente. Scopri di più sull'utilizzo dei secret con Cloud Run.
Node.js
Python
Java
Configura Identity Platform
Identity Platform richiede la configurazione manuale nella console Google Cloud .
Nella console Google Cloud , abilita l'API Identity Platform:
Configura il progetto:
In una nuova finestra, vai alla pagina Google Auth Platform > Panoramica.
Fai clic su Inizia e segui la procedura di configurazione del progetto.
Nella finestra di dialogo Informazioni app:
- Fornisci il nome dell'applicazione.
- Seleziona una delle email dell'assistenza utente visualizzate.
Nella finestra di dialogo Pubblico, seleziona Esterno.
Nella finestra di dialogo Informazioni di contatto, inserisci un'email di contatto.
Accetta le norme relative ai dati utente, poi fai clic su Crea.
Crea e ottieni l'ID client OAuth e il segreto:
Nella console Google Cloud , vai alla pagina API e servizi > Credenziali.
Nella parte superiore della pagina, fai clic su Crea credenziali e seleziona
OAuth client ID
.In Tipo di applicazione, seleziona Applicazione web e fornisci il nome.
Fai clic su Crea
I valori
client_id
eclient_secret
verranno utilizzati nel passaggio successivo.
Configura Google come fornitore:
Nella console Google Cloud , vai alla pagina Provider di identità.
Fai clic su Aggiungi un provider.
Seleziona Google dall'elenco.
Nelle impostazioni di configurazione dell'SDK web, inserisci i valori
client_id
eclient_secret
del passaggio precedente.Nella sezione Configura la tua applicazione, fai clic su Dettagli di configurazione.
Copia la configurazione nella tua applicazione:
- Copia i valori
apiKey
eauthDomain
instatic/config.js
dell'esempio per inizializzare l'SDK client di Identity Platform.
- Copia i valori
Deployment del servizio
Segui i passaggi per completare il provisioning e il deployment dell'infrastruttura:
Crea un'istanza Cloud SQL con il database PostgreSQL utilizzando la console o la CLI:
gcloud sql instances create CLOUD_SQL_INSTANCE_NAME \ --database-version=POSTGRES_16 \ --region=CLOUD_SQL_REGION \ --cpu=2 \ --memory=7680MB \ --root-password=DB_PASSWORD
Aggiungi i valori delle credenziali Cloud SQL a
postgres-secrets.json
:Node.js
Python
Java
Crea un secret con controllo delle versioni utilizzando la console o la CLI:
gcloud secrets create idp-sql-secrets \ --replication-policy="automatic" \ --data-file=postgres-secrets.json
Crea un account di servizio per il server utilizzando la console o la CLI:
gcloud iam service-accounts create idp-sql-identity
Concedi i ruoli per l'accesso a Secret Manager e Cloud SQL utilizzando la console o la CLI:
Consenti al account di servizio associato al server di accedere al secret creato:
gcloud secrets add-iam-policy-binding idp-sql-secrets \ --member serviceAccount:idp-sql-identity@PROJECT_ID.iam.gserviceaccount.com \ --role roles/secretmanager.secretAccessor
Consenti all'account di servizio associato al server di accedere a Cloud SQL:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:idp-sql-identity@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudsql.client
Crea un Artifact Registry:
gcloud artifacts repositories create REPOSITORY \ --repository-format docker \ --location REGION
REPOSITORY
è il nome del repository. Per ogni posizione del repository in un progetto, i nomi dei repository devono essere univoci.
Crea l'immagine container utilizzando 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
Questo esempio utilizza Jib per creare immagini Docker utilizzando strumenti Java comuni. Jib ottimizza le build dei container senza la necessità di un Dockerfile o di Docker installato. Scopri di più sulla creazione di container Java con Jib.
Utilizza l'assistente per le credenziali gcloud per autorizzare Docker a eseguire il push su Artifact Registry.
gcloud auth configure-docker
Utilizza il plug-in Jib Maven per creare ed eseguire il push del container in Artifact Registry.
mvn compile jib:build -Dimage=REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/idp-sql
Esegui il deployment dell'immagine container in Cloud Run utilizzando la console o la CLI. Tieni presente che il server viene implementato per consentire l'accesso non autenticato. In questo modo, l'utente può caricare il client e iniziare la procedura. Il server verifica manualmente il token ID aggiunto alla richiesta di voto, autenticando l'utente finale.
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
Tieni presente anche i flag
--service-account
,--add-cloudsql-instances
e--update-secrets
, che specificano rispettivamente l'identità del servizio, la connessione all'istanza Cloud SQL e il nome del secret con la versione come variabile di ambiente.
Gli ultimi ritocchi
Identity Platform richiede di autorizzare l'URL del servizio Cloud Run come reindirizzamento consentito dopo l'accesso dell'utente:
Modifica il provider Google facendo clic sull'icona a forma di penna nella pagina Provider di identità.
Fai clic su Aggiungi dominio in Domini autorizzati nel riquadro a destra e inserisci l'URL del servizio Cloud Run.
Puoi trovare l'URL del servizio nei log dopo la build o il deployment oppure puoi trovarlo in qualsiasi momento utilizzando:
gcloud run services describe idp-sql --format 'value(status.url)'
Vai alla pagina API e servizi > Credenziali.
Fai clic sull'icona a forma di matita accanto all'ID client OAuth per modificarlo e sotto il pulsante
Authorized redirect URIs click the
Aggiungi URI.Nel campo, copia e incolla il seguente URL e fai clic sul pulsante Salva in fondo alla pagina.
https://PROJECT_ID.firebaseapp.com/__/auth/handler
Prova
Per provare il servizio completo:
Nel browser, vai all'URL fornito nel passaggio di deployment precedente.
Fai clic sul pulsante Accedi con Google e segui il flusso di autenticazione.
Aggiungi il tuo voto.
Dovrebbe avere il seguente aspetto:
Se scegli di continuare a sviluppare questi servizi, ricorda che hanno accesso Identity and Access Management (IAM) limitato al resto di Google Cloud e dovranno essere assegnati ruoli IAM aggiuntivi per accedere a molti altri servizi.