In questa pagina vengono descritti alcuni modi per acquisire un token ID OpenID Connect (OIDC) firmato da Google.
È necessario un token ID firmato da Google per i seguenti casi d'uso dell'autenticazione:
- Accesso a un servizio Cloud Run
- Richiamo di una funzione Cloud Functions
- Autenticazione di un utente in un'applicazione protetta da Identity-Aware Proxy (IAP)
- Richiesta a un'API di cui è stato eseguito il deployment con API Gateway o Cloud Endpoints
Per informazioni sui contenuti e sulla durata dei token ID, consulta Token ID.
I token ID hanno un'applicazione o un servizio specifico per cui possono essere utilizzati,
specificati dal valore della relativa rivendicazione aud
. Questa pagina utilizza il termine servizio di destinazione per fare riferimento al servizio o all'applicazione in cui è possibile utilizzare il token ID per l'autenticazione.
Quando ricevi il token ID, puoi includerlo in un'intestazione Authorization
nella richiesta al servizio di destinazione.
Metodi per ottenere un token ID
Esistono diversi modi per ottenere un token ID. In questa pagina vengono descritti i seguenti metodi:
- Ottenere un token ID dal server dei metadati
- Utilizza un servizio di connessione per generare un token ID
- Genera un token ID assumendo l'identità di un account di servizio
- Genera un token ID generico per lo sviluppo con Cloud Run e Cloud Functions
Se hai bisogno di un token ID che venga accettato da un'applicazione non ospitata su Google Cloud, probabilmente puoi utilizzare questi metodi. Tuttavia, devi determinare quali token ID richiede l'applicazione.
Ottenere un token ID dal server dei metadati
Quando il codice è in esecuzione su una risorsa a cui è possibile collegare un account di servizio, il server di metadati per il servizio associato di solito può fornire un token ID. Il server di metadati genera token ID per l'account di servizio collegato. Non puoi ottenere un token ID basato sulle credenziali utente del server dei metadati.
Puoi ottenere un token ID dal server di metadati quando il codice è in esecuzione sui seguenti servizi Google Cloud:
- Compute Engine
- Ambiente standard di App Engine
- Ambiente flessibile di App Engine
- Cloud Functions
- Cloud Run
- Google Kubernetes Engine
- Cloud Build
Per recuperare un token ID dal server di metadati, esegui una query sull'endpoint di identità per l'account di servizio, come mostrato in questo esempio.
curl
Sostituisci AUDIENCE
con l'URI del servizio di destinazione, ad esempio http://www.example.com
.
curl -H "Metadata-Flavor: Google" \ 'http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE'
PowerShell
Sostituisci AUDIENCE
con l'URI del servizio di destinazione, ad esempio http://www.example.com
.
$value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE") $value
Java
Per eseguire questo esempio di codice, devi installare la libreria client di autenticazione per Java.
Go
Node.js
Per eseguire questo esempio di codice, devi installare la libreria di autenticazione Google per Node.js
Python
Per eseguire questo esempio di codice, devi installare la libreria Python di autenticazione di Google.
Ruby
Per eseguire questo esempio di codice, devi installare la libreria di autenticazione Google per Ruby.
Utilizza un servizio di connessione per generare un token ID
Alcuni servizi Google Cloud ti aiutano a chiamare altri servizi. Questi servizi di connessione possono aiutare a determinare quando viene effettuata la chiamata o a gestire un flusso di lavoro che include la chiamata al servizio. I seguenti servizi possono includere automaticamente
un token ID, con il valore appropriato per la richiesta aud
, quando avviano
una chiamata a un servizio che richiede un token ID:
- Cloud Scheduler
- Cloud Scheduler è un servizio di livello enterprise completamente gestito per la pianificazione di cron job. Puoi configurare Cloud Scheduler in modo da includere un token ID o un token di accesso quando richiama un altro servizio. Per maggiori informazioni, consulta la pagina sull' utilizzo dell'autenticazione con target HTTP.
- Cloud Tasks
- Cloud Tasks consente di gestire l'esecuzione di attività distribuite. Puoi configurare un'attività in modo da includere un token ID o un token di accesso quando chiama un servizio. Per maggiori informazioni, consulta Utilizzo di attività di destinazione HTTP con i token di autenticazione.
- Pub/Sub
- Pub/Sub consente la comunicazione asincrona tra i servizi. Puoi configurare Pub/Sub in modo da includere un token ID con un messaggio. Per maggiori informazioni, consulta Autenticazione per sottoscrizione push.
- Workflows
- Workflows è una piattaforma di orchestrazione completamente gestita che esegue i servizi in un ordine definito da te: un flusso di lavoro. Puoi definire un flusso di lavoro che includa un token ID o un token di accesso quando richiama un altro servizio. Per maggiori informazioni, consulta Effettuare richieste autenticate da un flusso di lavoro.
Genera un token ID impersonando un account di servizio
La simulazione dell'identità degli account di servizio consente a un'entità di generare credenziali di breve durata per un account di servizio attendibile. L'entità può quindi usare queste credenziali per autenticarsi come account di servizio.
Prima che un'entità possa rappresentare un account di servizio, deve avere un ruolo IAM per quell'account di servizio che consenta la rappresentazione. Se l'entità è a sua volta un altro account di servizio, potrebbe sembrare più semplice fornire semplicemente le autorizzazioni richieste direttamente a quell'account di servizio e abilitare l'identità dell'entità stessa. Questa configurazione, nota come furto d'identità, crea una vulnerabilità di sicurezza, perché consente all'account di servizio di creare un token di accesso aggiornabile ininterrottamente.
La simulazione dell'identità degli account di servizio deve sempre includere due entità: un'entità che rappresenta il chiamante e l'account di servizio che viene rappresentato, denominato account di servizio con privilegi.
Per generare un token ID assumendo l'identità di un account di servizio, utilizza la procedura generale riportata di seguito.
Per istruzioni dettagliate, consulta Creare un token ID.
Identifica o crea un account di servizio da utilizzare per l'account di servizio con privilegi.
-
Identificare i ruoli richiesti per richiamare il servizio di destinazione. Concedi questi ruoli all'account di servizio sul servizio di destinazione:
-
Per i
servizi Cloud Run,
concedi il ruolo Invoker di Cloud Run (
roles/run.invoker
). -
Per Cloud Functions, concedi il ruolo Invoker di Cloud Functions (
roles/cloudfunctions.invoker
). - Per altri servizi di destinazione, consulta la documentazione del prodotto per il servizio.
-
Per i
servizi Cloud Run,
concedi il ruolo Invoker di Cloud Run (
Identifica l'entità che eseguirà la rappresentazione e configura Credenziali predefinite dell'applicazione (ADC) per utilizzare le credenziali per questa entità.
Per gli ambienti di sviluppo, l'entità di solito è l'account utente che hai fornito ad ADC mediante gcloud CLI. Tuttavia, se è in esecuzione su una risorsa a cui è collegato un account di servizio, l'account di servizio associato è l'entità.
Concedi all'entità il ruolo Creatore token di identità OpenID Connect dell'account di servizio (
roles/iam.serviceAccountOpenIdTokenCreator
).Utilizza l'API IAM Credentials per generare il token ID per l'account di servizio autorizzato.
Genera un token ID generico per lo sviluppo con Cloud Run e Cloud Functions
Puoi utilizzare gcloud CLI per ottenere un token ID per le tue credenziali utente che può essere utilizzato con qualsiasi servizio Cloud Run o Cloud Function che il chiamante dispone delle autorizzazioni IAM necessarie per richiamare. Questo token non funzionerà per altre applicazioni.
Per generare un token ID generico, utilizza il comando
gcloud auth print-identity-token
:gcloud auth print-identity-token
Passaggi successivi
- Informazioni sui token ID.
- Utilizzare i comandi shell per eseguire una query sul server metadati di Compute Engine.
- Scopri di più sui metodi di autenticazione.