Controllo dell'accesso con IAM

Tu (ovvero l'account utente o di servizio che esegue il deployment della funzione) puoi impostare il controllo dell'accesso utilizzando i ruoli a livello di progetto. Concedi un ruolo a un membro del progetto o a un account di servizio per determinare il livello di accesso al tuo progetto Google Cloud e alle relative risorse. Per impostazione predefinita, tutti i progetti Google Cloud includono un unico utente. Nessun altro utente ha accesso al progetto e, di conseguenza, alle funzioni, finché un utente non viene aggiunto come membro del team di progetto.

Controllo dell'accesso per gli utenti

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

Cloud Functions supporta i ruoli di base di 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, aggiornare ed eliminare le funzioni. Accesso aggiuntivo ad altre risorse nel progetto.
  • Visualizzatore: accesso di sola lettura a funzioni e posizioni. Consente agli utenti di elencare le funzioni e di vederne i dettagli, ma non di visualizzare il codice sorgente. Accesso aggiuntivo ad altre risorse nel progetto.

Cloud Functions supporta inoltre i ruoli predefiniti di Sviluppatore e Visualizzatore di Cloud Functions, che concedono le seguenti autorizzazioni:

  • Sviluppatore: accesso in lettura e scrittura a tutte le risorse correlate alle funzioni. Consente agli utenti di eseguire il deployment, aggiornare ed eliminare le funzioni. Nessun accesso ad altre risorse nel progetto.
  • Visualizzatore: accesso di sola lettura a funzioni e posizioni. Consente agli utenti di elencare le funzioni e di vederne i dettagli, ma non di visualizzare il codice sorgente. Nessun accesso ad altre risorse nel progetto.

Controllo dell'accesso per gli account di servizio

Un account di servizio è un tipo speciale di account Google 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 vengono creati e gestiti da Google stessa e sono noti come agenti di servizio.

Per Cloud Functions vengono utilizzati i seguenti account di servizio:

Nome ID membro Ruolo
Account di servizio predefinito App Engine (solo 1ª generazione.) PROJECT_ID@appspot.gserviceaccount.com Editor
Account di servizio predefinito Compute Engine (solo 2ª generazione) PROJECT_NUMBER-compute@developer.gserviceaccount.com Editor
Agente di servizio Google Cloud Functions service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com Agente di servizio Cloud Functions
PROJECT_NUMBER@cloudbuild.gserviceaccount.com Account di servizio Cloud Build
Account di servizio Cloud Build service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com Agente di servizio Cloud Build
Agente di servizio Google Container Registry service-PROJECT_NUMBER@containerregistry.iam.gserviceaccount.com Agente di servizio Container Registry
Agente di servizio Artifact Registry service-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com Agente di servizio Artifact Registry

Account di servizio di runtime

In fase di runtime, Cloud Functions (1ª generazione.) utilizza per impostazione predefinita l'account di servizio predefinito di App Engine (PROJECT_ID@appspot.gserviceaccount.com), che dispone del ruolo Editor per il progetto. Per impostazione predefinita, Cloud Functions (2nd gen) utilizza l'account di servizio predefinito di Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com), che dispone anche del ruolo Editor per il progetto. Puoi modificare i ruoli di questi account di servizio per limitare o estendere le autorizzazioni per le funzioni in esecuzione. Puoi anche modificare l'account di servizio utilizzato fornendo un account di servizio individuale non predefinito.

Per ulteriori informazioni sugli account di servizio, consulta la documentazione sugli account di servizio.

Account di servizio amministrativi

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

Inoltre, tutti i runtime eseguono la creazione e l'archiviazione di immagini container all'interno del tuo progetto. A questo scopo, dovrai anche eseguire il provisioning di quanto segue:

Questi account di servizio dovrebbero avere i ruoli elencati nella tabella precedente.

Account di servizio dell'agente di servizio Google Cloud Functions

Per impostazione predefinita, l'account di servizio dell'agente di servizio Google Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com ha il ruolo cloudfunctions.serviceAgent nel progetto. La creazione, l'aggiornamento e l'eliminazione delle funzioni potrebbero non riuscire se modifichi le autorizzazioni di questo account.

Ecco alcune delle autorizzazioni più importanti utilizzate da cloudfunctions.serviceAgent:

Autorizzazione Descrizione
roles/artifactregistry.admin Gestisci repository e archivia immagini build in Artifact Registry.
roles/cloudbuild.builds.editor Necessaria per utilizzare Cloud Build per eseguire build nel progetto utente.
roles/cloudbuild.customworkers.builder Crea build nei worker personalizzati di Cloud Build.
cloudfunctions.functions.invoke Richiama una funzione HTTP di prima generazione con protezione IAM.
compute.globalOperations.get,
compute.networks.access,
vpcaccess.connectors.{get, use}
Esegui il provisioning delle funzioni con accesso al VPC dei progetti consumer.
roles/eventarc.developer Gestisci i trigger Eventarc per le funzioni di 2a generazione.
firebasedatabase.instances.{get, update} Creare funzioni attivate da Firebase Realtime Database.
iam.serviceAccounts.{actAs, getAccessToken, signBlob} Può recuperare le credenziali dell'account di servizio di runtime.
iam.serviceAccounts.getOpenIdToken necessario all'agente per ottenere un token OpenID su un'autorità specificata dall'utente. Il token OpenID viene utilizzato per richiamare funzioni abilitate per IAM.
pubsub.subscriptions Gestire gli abbonamenti nel progetto dell'utente.
pubsub.topics Gestire gli argomenti nel progetto dell'utente.
roles/run.developer Gestire il servizio Cloud Run per le funzioni di 2a generazione.
storage.buckets.{get, update} Configura le notifiche su un bucket Cloud Storage che attivano una funzione di 1a generazione.
storage.buckets.create,
storage.objects.{delete, get, create, list}
Obbligatorio per archiviare il codice sorgente nel progetto utente.

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

gcloud iam roles describe roles/cloudfunctions.serviceAgent

Puoi reimpostare il ruolo predefinito per questo account di servizio rimuovendo qualsiasi ruolo attualmente assegnato e aggiungendo il ruolo Agente di servizio Cloud Functions:

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

Risoluzione degli errori relativi alle autorizzazioni

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

  1. Assicurati di disporre del ruolo Editor o Proprietario per il progetto oppure di utilizzare il ruolo Sviluppatore Cloud Functions.

    Se utilizzi il ruolo Sviluppatore Cloud Functions a livello di progetto, assicurati anche di aver concesso all'utente il ruolo Utente account di servizio IAM.

    Attualmente, sono consentite solo autorizzazioni di esecuzione a livello di funzione.

  2. Verifica che l'account di servizio dell'agente di servizio Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) abbia il ruolo cloudfunctions.serviceAgent per il progetto.

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

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

Se ricevi un errore di "autorizzazioni insufficienti" o si verificano altri problemi di autenticazione quando esegui le funzioni, assicurati che l'account di servizio di runtime disponga delle autorizzazioni corrette per accedere alle risorse necessarie per le funzioni. Quindi, ripeti i passaggi 2 e 3.

Se ricevi un errore di tipo "servizio non disponibile" durante il deployment, assicurati che nel progetto sia presente l'account di servizio di runtime PROJECT_ID@appspot.gserviceaccount.com. Per ricreare questo account di servizio se è stato eliminato, vedi Annullare l'eliminazione di un account di servizio.

Vedi anche Risoluzione dei problemi di Cloud Functions.