Controllo dell'accesso con IAM (1ª gen.)

L'utente o il service account che esegue il deployment della funzione può impostare il controllo dell'accesso utilizzando i ruoli a livello di progetto. Concedi un ruolo a un membro del progetto o a un service account per determinare il livello di accesso al tuo progettoGoogle Cloud e alle relative risorse. Per impostazione predefinita, tutti i progetti Google Cloud includono un unico utente: il Project Creator originale. Nessun altro utente ha accesso al progetto e, di conseguenza, alle funzioni, finché un utente non viene aggiunto come membro del team del progetto.

Controllo dell'accesso per gli utenti

Puoi aggiungere utenti come membri del team al tuo progetto e concedere loro ruoli utilizzando Identity and Access Management (IAM).

Cloud Run Functions supporta i ruoli di base Editor, Proprietario e Visualizzatore, che concedono le seguenti autorizzazioni:

  • Editor e Proprietario: accesso in lettura e scrittura a tutte le risorse correlate alle funzioni. Consente agli utenti di eseguire il deployment, l'aggiornamento e l'eliminazione delle funzioni. Accesso aggiuntivo ad altre risorse del progetto.
  • Visualizzatore: accesso in sola lettura a funzioni e località. Consente agli utenti di elencare le funzioni e visualizzarne i dettagli, ma non di visualizzare il codice sorgente. Accesso aggiuntivo ad altre risorse del progetto.

Cloud Run Functions supporta anche i ruoli predefiniti Cloud Run Functions Developer e Cloud Run Functions Viewer, che concedono le seguenti autorizzazioni:

  • Developer: accesso in lettura e scrittura a tutte le risorse correlate alle funzioni Consente agli utenti di eseguire il deployment, l'aggiornamento e l'eliminazione delle funzioni. Nessun accesso ad altre risorse nel progetto.
  • Visualizzatore: accesso in sola lettura a funzioni e località. Consente agli utenti di elencare le funzioni e visualizzarne i dettagli, ma non di visualizzare il codice sorgente. Nessun accesso ad altre risorse nel progetto.

Controllo dell'accesso per i service account

Un service account è un tipo speciale di accountGoogle Cloud che funge da identità per un utente non umano che deve autenticarsi ed essere autorizzato ad accedere ai dati ed eseguire varie azioni. Alcuni di questi account sono creati e gestiti da Google e sono noti come service agent.

Per Cloud Run Functions vengono utilizzati i seguenti service account:

Nome ID membro Ruolo
Service account predefinito di App Engine PROJECT_ID@appspot.gserviceaccount.com Editor
Service agent Google Cloud Run Functions service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com Cloud Run Functions Service Agent
PROJECT_NUMBER@cloudbuild.gserviceaccount.com Cloud Build Service Account
Service account Cloud Build service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com Cloud Build Service Agent
Service Agent Google Container Registry service-PROJECT_NUMBER@containerregistry.iam.gserviceaccount.com Container Registry Service Agent
Service agent Artifact Registry service-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com Artifact Registry Service Agent

Service account di runtime

In fase di runtime, Cloud Run Functions utilizza per impostazione predefinita il service account predefinito di App Engine (PROJECT_ID@appspot.gserviceaccount.com), che dispone del ruolo Editor nel progetto. Puoi modificare il ruolo di questi service account per limitare o estendere le autorizzazioni per le funzioni in esecuzione. Puoi anche modificare il service account utilizzato fornendo un service account individuale non predefinito.

Per saperne di più sui service account, consulta la documentazione sui service account.

Service account amministrativi

Per eseguire azioni amministrative sul tuo progetto durante la creazione, l'aggiornamento o l'eliminazione delle funzioni, tutti i progetti in Cloud Run Functions richiedono il service account Service agent Google Cloud Run Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com).

Inoltre, tutti i runtime eseguono la creazione e l'archiviazione delle immagini container all'interno del tuo progetto. Per supportare questa funzionalità, devi anche eseguire il provisioning di quanto segue:

Questi service account devono disporre dei ruoli elencati nella tabella precedente.

Service account Service agent Google Cloud Run Functions

Per impostazione predefinita, il service account Service agent Google Cloud Run Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) dispone del ruolo cloudfunctions.serviceAgent sul tuo progetto.

Di seguito sono riportate alcune delle autorizzazioni più importanti utilizzate da cloudfunctions.serviceAgent:

Autorizzazione Descrizione
roles/artifactregistry.admin Per gestire i repository e archiviare le immagini di build in Artifact Registry.
roles/cloudbuild.builds.editor Obbligatoria per utilizzare Cloud Build per generare build nel progetto utente.
roles/cloudbuild.customworkers.builder Per creare build nei worker personalizzati di Cloud Build.
cloudfunctions.functions.invoke Per richiamare una funzione HTTP protetta da IAM.
compute.globalOperations.get,
compute.networks.access,
vpcaccess.connectors.{get, use}
Per eseguire il provisioning delle funzioni con accesso al VPC dei progetti consumer.
firebasedatabase.instances.{get, update} Per creare funzioni attivate da Firebase Realtime Database.
iam.serviceAccounts.{actAs, getAccessToken, signBlob} Consente di ottenere le credenziali del service account di runtime.
iam.serviceAccounts.getOpenIdToken Necessaria per consentire all'agente di ottenere un token OpenID su un'autorità specificata dall'utente. Il token OpenID viene utilizzato per richiamare le funzioni abilitate per IAM.
pubsub.subscriptions Per gestire le sottoscrizioni nel progetto dell'utente.
pubsub.topics Per gestire gli argomenti nel progetto dell'utente.
storage.buckets.{get, update} Per configurare le notifiche su un bucket Cloud Storage che attivano una funzione.
storage.buckets.create,
storage.objects.{delete, get, create, list}
Obbligatoria per archiviare il codice sorgente nel progetto utente.

Puoi visualizzare l'intero insieme di autorizzazioni nei ruoli IAM predefiniti o eseguendo questo comando:

gcloud iam roles describe roles/cloudfunctions.serviceAgent

Puoi reimpostare questo service account al ruolo predefinito rimuovendo il ruolo attuale e aggiungendo il ruolo Cloud Run Functions Service Agent:

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member serviceAccount:service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com \
  --role roles/cloudfunctions.serviceAgent

Risoluzione dei problemi relativi agli errori di autorizzazione

Se ricevi errori di autorizzazione quando esegui il deployment, l'aggiornamento, l'eliminazione o l'esecuzione di funzioni nel tuo progetto, segui questi passaggi:

  1. Assicurati di avere il ruolo di Editor o Proprietario sul progetto oppure di utilizzare il ruolo Cloud Run Functions Developer.

    Se utilizzi il ruolo Cloud Run Functions Developer a livello di progetto, assicurati anche di aver concesso all'utente il ruolo IAM Service Account User.

    A livello di funzione, puoi specificare solo le autorizzazioni di esecuzione.

  2. Verifica che il service account Service agent Cloud Run Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) disponga del ruolo cloudfunctions.serviceAgent per il tuo progetto.

    Per visualizzare questo account, assicurati che sia selezionata la casella Includi concessioni di ruoli fornite da Google nella scheda Autorizzazioni della pagina Console IAM. In alternativa, puoi utilizzare gcloud projects add-iam-policy-binding PROJECT_ID.

  3. Assicurati di disporre delle autorizzazioni per le origini dei trigger, ad esempio Pub/Sub o Cloud Storage.

Se ricevi un errore "Autorizzazioni insufficienti" o riscontri altri problemi di autenticazione quando esegui le funzioni, assicurati che il service account di runtime disponga delle autorizzazioni corrette per accedere alle risorse necessarie alle tue funzioni. Poi ripeti i passaggi 2 e 3.

Se durante il deployment viene visualizzato l'errore "Servizio non disponibile", assicurati che il service account di runtime PROJECT_ID@appspot.gserviceaccount.com esista nel tuo progetto. Se questo service account è stato eliminato e desideri ricrearlo, consulta Annullamento dell'eliminazione di un service account.

Vedi anche Risoluzione dei problemi relativi a Cloud Run Functions.