Introduzione all'identità del servizio

Questa pagina descrive le due identità Cloud Run e come le librerie client di Cloud utilizzano l'identità di servizio per chiamare le API Google Cloud. Alcuni esempi di prodotti Google Cloud che dispongono di librerie client Cloud sono Cloud Storage, Firestore, Cloud SQL, Pub/Sub e Cloud Tasks. Questa pagina è rivolta ad amministratori, operatori o sviluppatori che gestiscono i criteri dell'organizzazione e l'accesso degli utenti oppure a chiunque voglia saperne di più su questi argomenti.

Identità Cloud Run

Per utilizzare Cloud Run, Google Cloud richiede che l'utente Cloud Run e l'istanza Cloud Run abbiano ciascuno un'identità.

  • L'identità dell'utente Cloud Run è indicata come account di deployment di Cloud Run. Quando gestisci una revisione o un job, utilizzi questa identità per effettuare richieste all'API Cloud Run Admin.
  • L'identità dell'istanza Cloud Run è indicata come identità del servizio 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 alle API Google Cloud o ad altri servizi Cloud Run.

Per accedere e inviare richieste alle API Google Cloud o comunicare tra i servizi, a ogni identità devono essere concesse le autorizzazioni appropriate in Identity and Access Management (IAM).

Chiama l'API Cloud Run Admin con l'account di deployment

Puoi chiamare l'API Cloud Run Admin da Cloud Run utilizzando l'account di deployer Cloud Run. L'account di deployment 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 di deployment utilizza Cloud Run, IAM controlla se l'account di deployment 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 console Google Cloud:

Chiama l'API Cloud Run Admin dalla console Google Cloud.
Figura 1. Un utente utilizza la console Google Cloud per eseguire il deployment di una nuova revisione inviando una richiesta con un token di accesso all'API Cloud Run Admin. IAM utilizza questo token di accesso per verificare che l'account utente sia autenticato per accedere all'API Cloud Run Admin prima di eseguire l'operazione.

Chiama le API Google Cloud con l'identità del servizio

Quando un'istanza Cloud Run interagisce con altri servizi Cloud Run autenticati tramite IAM o chiama le librerie client di Cloud tramite il codice dell'applicazione o funzionalità integrate come le integrazioni Cloud Run o i montaggi dei volumi Cloud Storage, l'ambiente Google Cloud utilizza le credenziali predefinite dell'applicazione (ADC) per rilevare automaticamente se l'identità del servizio Cloud Run è autenticata per eseguire l'operazione dell'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 un job.

Un account di servizio utilizzato come account di deployment verrà utilizzato come identità di servizio solo se configuri lo stesso account di servizio nella configurazione di Cloud Run.

Il resto di questa guida descrive come un servizio o un job 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 e job.

Tipi di account di servizio per l'identità del servizio

Quando l'istanza Cloud Run effettua chiamate alle API Google Cloud 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:

  • Account di servizio gestito dall'utente (consigliato): crei manualmente questo account di servizio e determini l'insieme di autorizzazioni minime di cui ha bisogno per accedere a risorse Google Cloud specifiche. L'account di servizio gestito dall'utente segue il formato di SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.
  • Account di servizio predefinito Compute Engine: Cloud Run fornisce automaticamente l'account di servizio predefinito di Compute Engine come identità del servizio predefinita. L'account di servizio predefinito Compute Engine segue il formato di PROJECT_NUMBER-compute@developer.gserviceaccount.com.

Evita l'account di servizio predefinito quando configuri l'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 creato il servizio o il job Cloud Run, Cloud Run lo utilizza.

A seconda della configurazione delle norme dell'organizzazione, all'account di servizio predefinito potrebbe essere assegnato automaticamente il ruolo Editor nel progetto. Ti consigliamo vivamente di disattivare la concessione automatica dei ruoli applicando il vincolo iam.automaticIamGrantsForDefaultServiceAccounts delle norme dell'organizzazione. Se hai creato la tua organizzazione dopo il 3 maggio 2024, questo vincolo viene applicato per impostazione predefinita.

Se disattivi la concessione automatica dei ruoli, devi decidere quali ruoli concedere agli account di servizio predefiniti, quindi concedere personalmente questi ruoli.

Se l'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 dell'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 chiama o invia richieste alle librerie client di Cloud, avviene quanto segue:

  1. Le librerie client rilevano che è stata effettuata una richiesta a un'API Google Cloud o alle librerie client di Cloud e richiedono un token di accesso OAuth 2.0 per l'identità del servizio dal server dei metadati dell'istanza.
  2. Il server dei metadati dell'istanza fornisce un token di accesso IAM per l'account di servizio configurato come identità del servizio.
  3. La richiesta all'API Google Cloud viene inviata con un token di accesso OAuth 2.0.
  4. IAM verifica l'identità del servizio a cui fa riferimento il token di accesso per le autorizzazioni necessarie e controlla le associazioni dei criteri prima di inoltrare la chiamata all'endpoint API.
  5. L'API Google Cloud esegue l'operazione.
Chiama l'API Google Cloud da Cloud Run.
Figura 1. Cloud Run genera un token di accesso dal server di metadati e IAM lo utilizza per verificare che l'identità del servizio Cloud Run assegnata sia autenticata per accedere alle API Google Cloud.

Genera un token di accesso per la richiesta Cloud Run per chiamare le API Google Cloud

Se il codice Cloud Run utilizza librerie client Cloud, puoi configurare l'identità servizio in Cloud Run assegnando un account di servizio al deployment o all'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:

Tuttavia, se utilizzi il tuo codice personalizzato o devi effettuare richieste programmaticamente, puoi utilizzare direttamente il server di metadati per recuperare manualmente i token di identità e i token di accesso descritti nella sezione successiva. Tieni presente che non puoi eseguire query su questo server direttamente dalla tua macchina locale, in quanto il server dei metadati è disponibile solo per i carichi di lavoro in esecuzione su Google Cloud.

Recuperare gli ID e i token di accesso utilizzando il server di metadati

I due tipi di token che puoi recuperare con il server dei metadati sono:

Per recuperare un token, segui le istruzioni riportate 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 metodo projects.topics.create.

  1. Utilizza il server metadati di 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.

  2. 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_ID
    Authorization: Bearer ACCESS_TOKEN
    

    Dove:

    • 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 Compute Metadata Server per recuperare un token di identità con un segmento di pubblico specifico:

curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE" \
    --header "Metadata-Flavor: Google"

Dove AUDIENCE è il segmento di pubblico JWT richiesto.

Per i servizi Cloud Run, il segmento di pubblico deve essere l'URL del servizio che stai richiamando o un segmento di pubblico personalizzato, come 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