Questa pagina descrive alcuni modi per acquisire un token ID OpenID Connect (OIDC) firmato da Google.
Hai bisogno di 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 Run
- Autenticazione di un utente a un'applicazione protetta da Identity-Aware Proxy (IAP)
- Invio di una 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 la sezione Token ID.
I token ID hanno un servizio o un'applicazione specifici per cui possono essere utilizzati,
specificati dal valore della rivendicazione aud
. Questa pagina utilizza il termine servizio di destinazione per fare riferimento al servizio o all'applicazione a cui è possibile autenticarsi utilizzando il token ID.
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. Questa pagina descrive i seguenti metodi:
- Ottieni un token ID dal server dei metadati
- Utilizzare un servizio di connessione per generare un token ID
- Genera un token ID eseguendo l'impersonificazione di un service account
- Genera un token ID generico per lo sviluppo con Cloud Run e Cloud Run Functions
Se hai bisogno che un token ID venga accettato da un'applicazione non ospitata su Google Cloud, probabilmente puoi utilizzare questi metodi. Tuttavia, devi determinare quali rivendicazioni del token ID richiede l'applicazione.
Recupera un token ID dal server dei metadati
Quando il codice viene eseguito su una risorsa a cui può essere collegato un service account, il server dei metadati per il servizio associato può in genere fornire un token ID. Il server dei metadati genera token ID per il account di servizio collegato. Non puoi ottenere un token ID basato sulle credenziali utente dal server dei metadati.
Puoi ottenere un token ID dal server dei metadati quando il codice viene eseguito sui seguenti servizi: Google Cloud
- Compute Engine
- Ambiente standard di App Engine
- Ambiente flessibile di App Engine
- Cloud Run Functions
- Cloud Run
- Google Kubernetes Engine
- Cloud Build
Per recuperare un token ID dal server dei metadati, esegui una query sull'endpoint dell'identità per ilaccount di serviziot, 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 Auth per Java.
Vai
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 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 Google Cloud servizi ti aiutano a chiamare altri servizi. Questi servizi di connessione
possono contribuire a determinare quando effettuare la chiamata o 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 l'attestazione aud
, quando avviano
una chiamata a un servizio che richiede un token ID:
- Cloud Scheduler
- Cloud Scheduler è un servizio di livello aziendale completamente gestito per la pianificazione di cron job. Puoi configurare Cloud Scheduler in modo che includa un token ID o un token di accesso quando richiama un altro servizio. Per saperne di più, consulta la sezione Utilizzo dell'autenticazione con target HTTP.
- Cloud Tasks
- Cloud Tasks consente di gestire l'esecuzione di attività distribuite. Puoi configurare un'attività in modo che includa un token ID o un token di accesso quando chiama un servizio. Per saperne di più, vedi Utilizzo delle attività target HTTP con token di autenticazione.
- Pub/Sub
- Pub/Sub consente la comunicazione asincrona tra i servizi. Puoi configurare Pub/Sub in modo che includa un token ID con un messaggio. Per ulteriori informazioni, consulta la sezione Autenticazione per la sottoscrizione push.
- Workflow
- Workflows è una piattaforma di orchestrazione completamente gestita che esegue i servizi in un ordine definito da te: un workflow. Puoi definire un flusso di lavoro in modo che includa un token ID o un token di accesso quando richiama un altro servizio. Per maggiori informazioni, vedi Effettuare richieste autenticate da un flusso di lavoro.
Generare un token ID rappresentando un account di servizio
L'impersonificazione del service account consente a un'entità di generare credenziali di breve durata per unaccount di serviziot attendibile. Il principal può quindi utilizzare queste credenziali per autenticarsi come account di servizio.
Prima che un principal possa rappresentare un account di servizio, deve disporre di un ruolo IAM su quel account di servizio che consenta la rappresentazione. Se l'entità è un altro account di servizio, potrebbe sembrare più semplice fornire direttamente le autorizzazioni richieste a questoaccount di serviziot e consentirgli di rappresentare se stesso. Questa configurazione, nota come auto-impersonificazione, crea una vulnerabilità di sicurezza, perché consente alaccount di serviziont di creare un token di accesso che può essere aggiornato per sempre.
L'impersonificazione del service account deve sempre coinvolgere due entità: un'entità che rappresenta il chiamante e ilaccount di serviziot che viene impersonato, chiamataccount di serviziont con privilegi.
Per generare un token ID eseguendo l'impersonificazione di un account di servizio, segui la seguente procedura generale.
Per istruzioni passo passo, vedi Creare un token ID.
Identifica o crea un service account che funga da account di servizio con privilegi.
-
Identifica 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 Cloud Run Invoker (
roles/run.invoker
). -
Per
Cloud Run Functions,
concedi il ruolo Cloud Functions Invoker
(
roles/cloudfunctions.invoker
). - Per altri servizi di destinazione, consulta la documentazione del prodotto per il servizio.
-
Per i
servizi Cloud Run,
concedi il ruolo Cloud Run Invoker (
Identifica l'entità che eseguirà la rappresentazione e configura le credenziali predefinite dell'applicazione (ADC) per utilizzare le credenziali per questa entità.
Per gli ambienti di sviluppo, l'entità è in genere l'account utente che hai fornito ad ADC utilizzando l'interfaccia alla gcloud CLI. Tuttavia, se esegui l'operazione su una risorsa con unaccount di serviziot collegato, il service account collegato è l'entità.
Concedi al principal il ruolo Service Account OpenID Connect Identity Token Creator (
roles/iam.serviceAccountOpenIdTokenCreator
).Utilizza l'API IAM Credentials per generare il token ID per l'account di servizio autorizzato.
Sostituisci quanto segue:
- AUDIENCE: l'URI del servizio di destinazione, ad esempio
http://www.example.com
. - SERVICE_ACCOUNT_EMAIL: l'indirizzo email del account di servizio con privilegi.
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -d '{"audience": "AUDIENCE", "includeEmail": "true"}' \ https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateIdToken
- AUDIENCE: l'URI del servizio di destinazione, ad esempio
Genera un token ID generico per lo sviluppo con Cloud Run e Cloud Run Functions
Puoi utilizzare gcloud CLI per ottenere un token ID per le credenziali utente che può essere utilizzato con qualsiasi servizio Cloud Run o funzione Cloud Run che il chiamante ha le autorizzazioni IAM richieste 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.
- Utilizza i comandi della shell per eseguire query sul server di metadati di Compute Engine.
- Scopri di più sui metodi di autenticazione.