Introduzione all'identità del servizio

Questa pagina descrive le due identità Cloud Run e in che modo Cloud Run utilizza l'identità di servizio per chiamare le librerie client di Cloud. Esempi 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 i criteri dell'organizzazione e l'accesso degli utenti o a chiunque voglia saperne di più su questi argomenti.

Identità Cloud Run

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

  • L'identità dell'utente di Cloud Run è denominata account del 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 è denominata identità del servizio Cloud Run. Quando il servizio o il job Cloud Run interagisce con le librerie client di Cloud, puoi utilizzare questa identità per effettuare richieste alle API Google Cloud da Cloud Run.

Per accedere alle API Google Cloud ed effettuare richieste, ogni identità deve disporre delle autorizzazioni appropriate in Identity and Access Management (IAM).

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

Puoi chiamare l'API Cloud Run Admin da Cloud Run utilizzando l'account del deployment di Cloud Run. L'account del deployment può essere un account utente o di account di servizio e rappresenta l'account a cui è stato eseguito l'accesso all'ambiente Google Cloud.

Quando l'account del deployment utilizza Cloud Run, IAM controlla se l'account del deployment dispone delle autorizzazioni necessarie per eseguire l'operazione di Cloud Run. Il seguente diagramma mostra in che modo 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 le librerie client di Cloud tramite codice dell'applicazione o funzionalità integrate come integrazioni Cloud Run o montaggi dei volumi Cloud Storage, l'ambiente Google Cloud utilizza Credenziali predefinite dell'applicazione (ADC) per rilevare automaticamente se l'identità del servizio Cloud Run è autenticata per eseguire l'operazione API. L'identità di servizio Cloud Run è un account di servizio che è stato 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 deployment viene utilizzato come identità di servizio solo se configuri lo stesso account di servizio nella configurazione di Cloud Run.

Il resto della guida descrive in che modo un servizio o un job Cloud Run utilizza l'identità di servizio per chiamare e accedere ai servizi e alle API di Google. Per ulteriori informazioni sulla configurazione delle identità dei servizi, consulta le pagine di configurazione delle identità di servizio per servizi e job.

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

Quando la tua istanza di Cloud Run effettua chiamate alle API Google Cloud per eseguire le operazioni necessarie, Cloud Run utilizza automaticamente un account di servizio come identità di servizio. I due tipi di account di servizio che possono essere utilizzati come identità di servizio sono i seguenti:

  • Account di servizio gestito dall'utente (consigliato): devi creare manualmente questo account di servizio e determinare l'insieme minimo di autorizzazioni necessario all'account di servizio 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 di Compute Engine: Cloud Run fornisce automaticamente l'account di servizio predefinito di Compute Engine come identità di servizio predefinita. L'account di servizio predefinito di Compute Engine segue il formato PROJECT_NUMBER-compute@developer.gserviceaccount.com.

Evita l'account di servizio predefinito durante la configurazione dell'identità di servizio

Per impostazione predefinita, l'account di servizio predefinito di Compute Engine viene creato automaticamente. Se non specifichi un account di servizio quando vengono creati il servizio o il job Cloud Run, Cloud Run utilizza questo account di servizio.

Lo scopo dell'account di servizio predefinito è aiutare l'istanza di Cloud Run a essere operativa senza errori di autorizzazione. A questa entità viene concesso il ruolo Editor, che concede autorizzazioni di lettura e scrittura su tutte le risorse nel tuo progetto Google Cloud. Per seguire il principio del privilegio minimo, Google consiglia di creare un nuovo account di servizio e concedergli l'insieme di autorizzazioni minimo per accedere a risorse Google Cloud specifiche.

Come funziona l'identità del servizio

Quando il codice chiama o effettua richieste alle librerie client di Cloud, si verifica quanto segue:

  1. Le librerie client rilevano che viene 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à di servizio al server metadati dell'istanza.
  2. Il server di metadati dell'istanza fornisce un token di accesso IAM per l'account di servizio configurato come identità di 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 viene fatto riferimento nel token di accesso per le autorizzazioni necessarie e controlla le associazioni di criteri prima di inoltrare la chiamata all'endpoint API.
  5. L'operazione viene eseguita dall'API Google Cloud.
Chiama l'API Google Cloud da Cloud Run.
Figura 1. Cloud Run genera un token di accesso dal server dei metadati e IAM lo utilizza per verificare che l'identità del servizio Cloud Run assegnata sia autenticata per accedere alle API Google Cloud.

Generare un token di accesso per la richiesta Cloud Run al fine di chiamare le API Google Cloud

Se il codice Cloud Run utilizza le librerie client di Cloud, devi configurare l'identità del servizio in Cloud Run assegnando un account di servizio al momento del deployment o dell'esecuzione. Ciò consente alla libreria di acquisire automaticamente un token di accesso per autenticare la richiesta del codice. Per assegnare un account di servizio come identità di servizio, consulta le seguenti guide:

Tuttavia, se utilizzi il tuo codice personalizzato o devi effettuare richieste in modo programmatico, 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 perché il server dei metadati è disponibile solo per i carichi di lavoro in esecuzione su Google Cloud.

Recuperare ID e token di accesso utilizzando il server dei metadati

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

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 metodo projects.topics.create.

  1. Utilizza il server 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 di 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 del tuo argomento.
    • ACCESS_TOKEN è il token di accesso recuperato nel passaggio precedente.

    Risposta:

    {
        "name": "projects/PROJECT_ID/topics/TOPIC_ID"
    }
    

Token ID

Utilizza il server metadati Compute 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, ad esempio un dominio personalizzato, configurato per il servizio.

https://service.domain.com

Per le altre risorse, è probabile che l'ID client OAuth di una risorsa protetta da IAP:

1234567890.apps.googleusercontent.com

Passaggi successivi