Questa pagina descrive le due identità di Cloud Run e il modo in cui le librerie client di Cloud utilizzano l'identità del servizio per chiamare le Google Cloud API. Esempi di Google Cloud prodotti che dispongono di librerie client di Cloud includono Cloud Storage, Firestore, Cloud SQL, Pub/Sub e Cloud Tasks. Questa pagina è rivolta ad amministratori, operatori o sviluppatori che gestiscono le policy dell'organizzazione e l'accesso degli utenti o a chiunque voglia saperne di più su questi argomenti.
Identità di Cloud Run
Per utilizzare Cloud Run, Google Cloud sono necessari due tipi di identità con le autorizzazioni appropriate:
- Account del deployer di Cloud Run: l'identità (un account utente o un account di servizio) che utilizzi per eseguire il deployment e gestire una risorsa Cloud Run inviando richieste all'API Cloud Run Admin.
- Identità del servizio Cloud Run: l'identità (un account di servizio) utilizzata dall'istanza Cloud Run. Quando il codice Cloud Run che hai scritto interagisce con le librerie client di Cloud o chiama un altro servizio Cloud Run per la comunicazione tra servizi, utilizzi questa identità per inviare richieste da Cloud Run a Google Cloud API o altri servizi Cloud Run.
Per accedere alle Google Cloud API e inviare richieste o comunicare tra i servizi, ogni identità deve disporre delle autorizzazioni appropriate concesse in Identity and Access Management (IAM).
Chiamare l'API Cloud Run Admin con l'account del deployer
Chiami l'API Cloud Run Admin da Cloud Run utilizzando l'account del deployer di Cloud Run. L'account del deployer può essere un account utente o un account di servizio e rappresenta l'account con cui è stato eseguito l'accesso all'ambiente. Google Cloud
Quando l'account del deployer utilizza Cloud Run, IAM verifica se l'account del deployer dispone delle autorizzazioni necessarie per eseguire l'operazione Cloud Run. Il seguente diagramma mostra come un account utente chiama l'API Cloud Run Admin per eseguire il deployment di una nuova revisione dalla Google Cloud console:
Chiamare Google Cloud leAPI con l'identità del servizio
Quando un'istanza Cloud Run interagisce con altri servizi Cloud Run autenticati da IAM o chiama le librerie client di Cloud tramite il codice dell'applicazione o funzionalità integrate come le integrazioni di Cloud Run o i montaggi di volumi Cloud Storage, l' Google Cloud ambiente utilizza le Credenziali predefinite dell'applicazione (ADC) per rilevare automaticamente se l' identità del servizio Cloud Run è autenticata per eseguire l' operazione API. L'identità del servizio Cloud Run è un account di servizio assegnato come identità dell'istanza Cloud Run quando esegui il deployment di una revisione o esegui un job.
Un account di servizio utilizzato come account del deployer verrà utilizzato come identità del servizio solo se configuri lo stesso account di servizio nella configurazione di Cloud Run.
Il resto di questa guida descrive come una risorsa Cloud Run utilizza l'identità del servizio per chiamare e accedere ai servizi e alle API di Google. Per ulteriori informazioni sulla configurazione dell'identità del servizio, consulta le pagine di configurazione dell'identità del servizio per servizi, job e pool di worker.
Tipi di account di servizio per l'identità del servizio
Quando l'istanza Cloud Run effettua chiamate alle Google Cloud API per eseguire le operazioni necessarie, Cloud Run utilizza automaticamente un account di servizio come identità del servizio. I due tipi di account di servizio che possono essere utilizzati come identità del servizio sono i seguenti:
- Account di servizio gestito dall'utente (consigliato): crei manualmente questo account di servizio e determini l'insieme minimo di autorizzazioni di cui l'account di servizio ha bisogno per accedere a risorse specifiche. Google Cloud L'
account di servizio gestito dall'utente segue il formato
SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com. - Account di servizio predefinito di Compute Engine: Cloud Run fornisce automaticamente l'account di servizio predefinito di Compute Engine come identità del servizio predefinita. L'account di servizio predefinito di Compute Engine segue
il formato di
PROJECT_NUMBER-compute@developer.gserviceaccount.com.
Evitare l'account di servizio predefinito durante la configurazione dell'identità del servizio
Per impostazione predefinita, l'account di servizio predefinito di Compute Engine viene creato automaticamente. Se non specifichi un account di servizio quando viene creata la risorsa Cloud Run, Cloud Run utilizza questo account di servizio.
A seconda della configurazione della policy dell'organizzazione, al account di servizio predefinito potrebbe
essere assegnato automaticamente il ruolo Editor nel
progetto. Ti consigliamo vivamente di disattivare la concessione automatica dei ruoli
forzando l'applicazione del vincolo iam.automaticIamGrantsForDefaultServiceAccounts della policy
dell'organizzazione. Se hai creato la tua organizzazione dopo il 3 maggio 2024, questo
vincolo viene imposto per impostazione predefinita.
Se disattivi la concessione automatica dei ruoli, devi decidere quali ruoli concedere ai service account predefiniti, quindi concedere personalmente questi ruoli.
Se il account di servizio predefinito dispone già del ruolo Editor, ti consigliamo di sostituire il ruolo Editor con ruoli meno permissivi.Per modificare in sicurezza i ruoli del account di servizio, utilizza Policy Simulator per vedere l'impatto della modifica, quindi concedi e revoca i ruoli appropriati.
Come funziona l'identità del servizio
Quando il codice utilizza le librerie client di Cloud che inviano richieste all' Google Cloud API, si verifica quanto segue:
- La libreria client richiede un token di accesso OAuth 2.0 per l'identità del servizio dal server dei metadati dell'istanza.
- Il server dei metadati dell'istanza fornisce un token di accesso IAM per l'account di servizio configurato come identità del servizio.
- La richiesta all' Google Cloud API viene inviata con un token di accesso OAuth 2.0.
- IAM verifica le autorizzazioni necessarie per l'identità del servizio a cui fa riferimento il token di accesso e controlla i binding delle policy prima di inoltrare la chiamata all'endpoint API.
- L' Google Cloud API esegue l'operazione.
Generare un token di accesso per la richiesta Cloud Run per chiamare le Google Cloud API
Se il codice Cloud Run utilizza le librerie client di Cloud, configura l'identità del servizio in Cloud Run assegnando un account di servizio al momento del deployment o dell'esecuzione. In questo modo, la libreria acquisisce automaticamente un token di accesso per autenticare la richiesta del codice. Se il codice Cloud Run comunica con altri servizi Cloud Run autenticati, devi aggiungere il token di accesso alle richieste.
Per assegnare un account di servizio come identità del servizio, consulta le seguenti guide:
- Configurare l'identità del servizio per i servizi
- Configurare l'identità del servizio per i job
- Configurare l'identità del servizio per i pool di worker
Tuttavia, se utilizzi il tuo codice personalizzato o devi inviare richieste a livello di programmazione, puoi utilizzare direttamente il server dei metadati per recuperare manualmente i token ID e il token di accesso descritti nella sezione successiva. Tieni presente che non puoi eseguire query su questo server direttamente dalla tua macchina locale , poiché il server dei metadati è disponibile solo per i workload in esecuzione su Google Cloud.
Recuperare i token ID e di accesso utilizzando il server dei metadati
I due tipi di token che puoi recuperare con il server dei metadati sono i seguenti:
- Token di accesso OAuth 2.0, utilizzati per chiamare la maggior parte delle librerie client delle API di Google.
- Token ID, utilizzati per chiamare altri servizi Cloud Run o per richiamare qualsiasi servizio per convalidare un token ID.
Per recuperare un token, segui le istruzioni nella scheda appropriata per il tipo di token che stai utilizzando:
Token di accesso
Ad esempio, se vuoi creare un argomento Pub/Sub, utilizza il
projects.topics.create
metodo.
Utilizza il server dei metadati Compute per recuperare un token di accesso:
curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" \ --header "Metadata-Flavor: Google"Questo endpoint restituisce una risposta JSON con un attributo
access_token.Nella richiesta del protocollo HTTP, la richiesta deve essere autenticata con un token di accesso nell'intestazione
Authorization:PUT https://pubsub.googleapis.com/v1/projects/
PROJECT_ID/topics/TOPIC_IDAuthorization: BearerACCESS_TOKENDove:
PROJECT_IDè l'ID progetto.TOPIC_IDè l'ID argomento.ACCESS_TOKENè il token di accesso recuperato nel passaggio precedente.
Risposta:
{ "name": "projects/PROJECT_ID/topics/TOPIC_ID" }
Token ID
Utilizza il server dei metadati Compute per recuperare un token ID con un pubblico specifico:
curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE" \
--header "Metadata-Flavor: Google"Dove AUDIENCE è il pubblico JWT richiesto.
Per i servizi Cloud Run, il pubblico deve essere l' URL del servizio che stai richiamando o un segmento di pubblico personalizzato, ad esempio un dominio personalizzato, configurato per il servizio.
https://service.domain.com
Per altre risorse, è probabile che si tratti dell'ID client OAuth di una risorsa protetta da IAP:
1234567890.apps.googleusercontent.com
Passaggi successivi
- Configurare l'identità del servizio per servizi, job, o pool di worker.
- Scopri come gestire l'accesso o autenticare in modo sicuro sviluppatori, servizi e utenti finali ai tuoi servizi.
- Per una procedura dettagliata end-to-end di un'applicazione che utilizza l'identità del servizio per ridurre al minimo il rischio per la sicurezza, segui il tutorial sulla protezione dei servizi Cloud Run.