Identità della funzione (1ª gen.)
Per motivi di sicurezza, la maggior parte delle interazioni tra le entità in Google Cloud richiede che ogni entità abbia un'identità verificabile, protetta da un qualche tipo di segreto, come una password o una chiave. Proprio come altre entità hanno bisogno di un'identità per accedere alle funzioni Cloud Run, le funzioni stesse spesso hanno bisogno di accedere ad altre risorse in Google Cloud per svolgere le loro operazioni. Ogni funzione è associata a un service account che funge da identità quando la funzione accede ad altre risorse. Il service account utilizzato da una funzione come identità è noto anche come service account di runtime.
Per l'uso in produzione, Google consiglia di assegnare a ogni funzione un'identità dedicata mediante l'assegnazione di un service account gestito dall'utente. I service account gestiti dall'utente consentono di controllare l'accesso concedendo un insieme minimo di autorizzazioni tramite Identity and Access Management.
Service account di runtime
A meno che tu non specifichi un service account di runtime diverso durante il deployment di una funzione, Cloud Run Functions utilizza un service account predefinito come identità per l'esecuzione della funzione:
Cloud Run Functions utilizza il service account predefinito di App Engine,
PROJECT_ID@appspot.gserviceaccount.com.Tieni presente che il numero di progetto è diverso dall'ID progetto e dal nome del progetto. Puoi trovare il numero di progetto nella console Google Cloud , nella pagina della dashboard.
Questi service account predefiniti hanno il ruolo Editor, che consente loro un ampio accesso a molti servizi Google Cloud . Sebbene questo sia il modo più rapido per sviluppare funzioni, Google consiglia di utilizzare il service account predefinito solo per test e sviluppo. Per la produzione, devi concedere al service account di runtime solo l'insieme di autorizzazioni minimo necessario per raggiungere il suo obiettivo.
Per proteggere le tue funzioni in produzione:
- Modifica le autorizzazioni per il service account di runtime predefinito oppure
- Crea service account individuali per le tue funzioni
Modifica delle autorizzazioni per il service account di runtime predefinito
Console
Vai alla pagina IAM nella console Google Cloud :
Seleziona Service account predefinito di App Engine o Service account predefinito di Compute Engine dalla tabella.
Fai clic sull'icona a forma di matita sul lato destro della riga per visualizzare la scheda Modifica autorizzazioni.
Aggiungi o rimuovi i ruoli nel menu a discesa Ruolo per fornire l'accesso con privilegio minimo.
Fai clic su Salva.
gcloud
Rimuovi il ruolo Editor, quindi utilizza il comando gcloud projects add-iam-policy-binding per aggiungere un nuovo ruolo:
# Remove the Editor role gcloud projects remove-iam-policy-binding PROJECT_ID \ --member="SERVICE_ACCOUNT_EMAIL" \ --role="roles/editor" # Add the desired role gcloud projects add-iam-policy-binding PROJECT_ID \ --member="SERVICE_ACCOUNT_EMAIL" \ --role="ROLE"
Dove PROJECT_ID è l'ID progetto del progetto che stai utilizzando, SERVICE_ACCOUNT_EMAIL è l'indirizzo email del service account di runtime predefinito, come mostrato in precedenza in Service account di runtime e ROLE è il nuovo ruolo da assegnare al service account di runtime predefinito.
Utilizzo di service account individuali per le funzioni
Per una maggiore flessibilità nel controllo dell'accesso per le tue funzioni, puoi assegnare a ciascuna il proprio service account gestito dall'utente.
- Crea il service account. Prendi nota del nome.
- Concedi i ruoli appropriati, in base alle risorse a cui deve accedere la funzione per svolgere le sue operazioni.
Se il service account e la funzione si trovano in progetti diversi, vai al progetto in cui si trova il service account e procedi come segue:
- Configura il service account in modo che funzioni in più progetti.
Concedi il ruolo Service Account Token Creator (
roles/iam.serviceAccountTokenCreator) al service agent Cloud Run Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com), dovePROJECTsi riferisce al progetto in cui si trova la funzione. Il service agent Cloud Run Functions gestisce l'accesso tra progetti per il tuo service account.Concedi l'autorizzazione
iam.serviceaccounts.actAsal service agent Cloud Run Functions sul service account dell'altro progetto.
Concedi l'accesso alla risorsa al service account. Il metodo per farlo dipende dal tipo di risorsa.
Collega il service account con la funzione. Puoi farlo al momento del deployment o aggiornando una funzione di cui è già stato eseguito il deployment.
Aggiunta di un service account gestito dall'utente al momento del deployment
Console
Vai alla console Google Cloud :
Specifica e configura la funzione come preferisci.
Fai clic su Impostazioni di runtime, build, connessioni e sicurezza per visualizzare impostazioni aggiuntive.
Seleziona la scheda Runtime.
Fai clic sul menu a discesa Service account e seleziona il service account che preferisci.
Fai clic su Avanti e su Esegui il deployment.
gcloud
Quando esegui il deployment di una funzione utilizzando gcloud functions deploy, aggiungi il flag --service-account. Ad esempio:
gcloud functions deploy --no-gen2 FUNCTION_NAME --service-account SERVICE_ACCOUNT_EMAIL
dove FUNCTION_NAME è il nome della funzione e SERVICE_ACCOUNT_EMAIL è l'email del service account.
Aggiornamento del service account di una funzione esistente
Puoi aggiornare il service account di runtime di una funzione esistente.
Console
Vai alla console Google Cloud :
Fai clic sul nome della funzione desiderata per passare alla relativa pagina dei dettagli.
Fai clic sull'icona a forma di matita Modifica nella parte superiore della pagina dei dettagli per modificare la funzione.
Fai clic su Impostazioni di runtime, build, connessioni e sicurezza per visualizzare impostazioni aggiuntive.
Seleziona la scheda Runtime.
Fai clic sul menu a discesa Service account e seleziona il service account che preferisci.
Fai clic su Avanti e su Esegui il deployment.
gcloud
Quando esegui il deployment di una funzione utilizzando gcloud functions deploy, aggiungi il flag --service-account:
gcloud functions deploy FUNCTION_NAME --service-account SERVICE_ACCOUNT_EMAIL
dove FUNCTION_NAME è il nome della funzione e SERVICE_ACCOUNT_EMAIL è il service account.
La funzione di cui è stato rieseguito il deployment ora utilizza il nuovo service account di runtime.
Utilizzo del server dei metadati per acquisire token
Sebbene i service account definiti da IAM siano il metodo preferito per gestire l'accesso in Google Cloud, alcuni servizi potrebbero richiedere altre modalità, ad esempio una chiave API, un client OAuth 2.0 o una chiave del service account. Anche l'accesso a una risorsa esterna potrebbe richiedere metodi alternativi.
Se il servizio di destinazione richiede la presentazione di un token ID OpenID Connect o di un token di accesso OAuth 2.0, potresti essere in grado di utilizzare il server dei metadati Compute per recuperare questi token anziché configurare un client OAuth completo.
Token di identità
Puoi utilizzare il server dei metadati Compute per recuperare i token ID con un pubblico specifico come segue:
curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE" \ -H "Metadata-Flavor: Google"
Dove AUDIENCE è la destinazione richiesta, ad esempio l'URL di un servizio che stai richiamando, come https://service.domain.com, o l'ID client OAuth di una risorsa protetta da IAP, come 1234567890.apps.googleusercontent.com.
Token di accesso
I token di accesso OAuth 2.0 utilizzano gli ambiti per definire le autorizzazioni di accesso. Per impostazione predefinita, i token di accesso all'interno di Google Cloud hanno l'ambito cloud-platform. Per accedere ad altre API di Google o Google Cloud , devi recuperare un token di
accesso con l'ambito appropriato.
Puoi utilizzare il server dei metadati Compute per recuperare i token di accesso.
Se hai bisogno di un token di accesso con un ambito specifico, puoi generarne uno come segue:
curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token?scopes=SCOPES" \ -H "Metadata-Flavor: Google"
Dove SCOPES è un elenco separato da virgole degli ambiti OAuth richiesti, ad esempio: https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/spreadsheets.
Consulta l'elenco completo degli ambiti OAuth di Google per trovare quelli che ti servono.
Passaggi successivi
Scopri come autorizzare l'accesso alle tue funzioni o come autenticare sviluppatori e altre funzioni in modo che possano richiamare le tue funzioni.