Introduzione all'identità del servizio

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:

Chiama l'API Cloud Run Admin dalla console Google Cloud .
Figura 1. Un utente utilizza la Google Cloud console 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.

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:

  1. La libreria client richiede 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' Google Cloud API viene inviata con un token di accesso OAuth 2.0.
  4. 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.
  5. L' Google Cloud API esegue l'operazione.
Chiama l'API Google Cloud da Cloud Run.
Figura 1. Cloud Run genera un token di accesso dal server dei metadati e IAM utilizza questo token di accesso per verificare che l'identità del servizio Cloud Run assegnata sia autenticata per accedere alle Google Cloud API.

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:

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.

  1. 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.

  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 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