Introduzione all'identità del servizio

Questa pagina descrive le due identità Cloud Run e in che modo le librerie client di Cloud utilizzano l'identità del servizio per chiamare le API Google Cloud. Esempi di prodotti Google Cloud con librerie client di Cloud includono Cloud Storage, Firestore, Cloud SQL, Pub/Sub e Cloud Tasks. Questa pagina è rivolta agli amministratori, agli operatori o agli 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 Cloud Run abbiano un'identità.

  • L'identità dell'utente di Cloud Run è detta account deployer 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 è detta 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 effettuare richieste da Cloud Run alle API Google Cloud o ad altri servizi Cloud Run.

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

Chiama l'API Cloud Run Admin con l'account deployer

Puoi chiamare l'API Cloud Run Admin da Cloud Run utilizzando l'account deployer Cloud Run. L'account deployer può essere un account utente o un account di servizio e rappresenta l'account che è stato collegato all'ambiente Google Cloud.

Quando l'account del deployer utilizza Cloud Run, IAM controlla se l'account del deployer dispone delle autorizzazioni necessarie per eseguire l'operazione 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 altri servizi Cloud Run autenticati o chiama le librerie client di Cloud tramite codice dell'applicazione o funzionalità integrate come integrazioni di Cloud Run o montaggi di volume 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à 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 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 in che modo 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 di cui ha bisogno, Cloud Run utilizza automaticamente un account di servizio come identità di servizio. Di seguito sono riportati i due tipi di account di servizio che possono essere utilizzati come identità di servizio:

  • Account di servizio gestito dall'utente (consigliato): crei manualmente questo account di servizio e determini 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 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 di PROJECT_NUMBER-compute@developer.gserviceaccount.com.

Evita 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 creato il servizio o il job Cloud Run, Cloud Run utilizza questo account di servizio.

Lo scopo dell'account di servizio predefinito è aiutare l'istanza 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 progetto Google Cloud. Per seguire il principio del privilegio minimo, Google consiglia di creare un nuovo account di servizio e di concedere all'account di servizio il numero minimo di autorizzazioni per accedere a risorse Google Cloud specifiche.

Come funziona l'identità del servizio

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

  1. Le librerie client rilevano che viene effettuata una richiesta all'API Google Cloud o alle librerie client di Cloud e richiedono un token di accesso OAuth 2.0 per l'identità del servizio al server di 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 verificare 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 che viene utilizzato da IAM 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 le librerie client di Cloud, puoi 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. Se il tuo codice Cloud Run comunica con altri servizi Cloud Run autenticati, devi aggiungere il token di accesso alle tue richieste.

Per assegnare un account di servizio come identità di servizio, consulta le seguenti guide:

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

Recuperare l'ID e i token di accesso utilizzando il server dei metadati

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

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 Compute Metadata Server 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 è il tuo 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, ad esempio un dominio personalizzato, configurato per il servizio.

https://service.domain.com

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

1234567890.apps.googleusercontent.com

Passaggi successivi