Controllo dell'accesso con IAM
Puoi impostare il controllo dell'accesso utilizzando i ruoli a livello di progetto, ovvero l'account utente o di servizio che esegue il deployment della funzione. Concedi un ruolo a un membro del progetto o a un account di servizio per determinare il livello di accesso al progetto Google Cloud e alle relative risorse. Per impostazione predefinita, tutti i progetti Google Cloud hanno un solo utente: il creatore del progetto 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 progetto e concedere loro dei ruoli utilizzando Identity and Access Management (IAM).
Cloud 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 relative 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 visualizzarne i dettagli, ma non di visualizzare il codice sorgente. Accesso aggiuntivo ad altre risorse nel progetto.
Cloud Functions supporta inoltre i ruoli Sviluppatore e Visualizzatore predefiniti di Cloud Functions, che concedono le autorizzazioni seguenti:
- Sviluppatore: accesso in lettura e scrittura a tutte le risorse relative 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 visualizzarne 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 eseguire l'autenticazione ed essere autorizzato ad accedere ai dati ed eseguire varie azioni. Alcuni di questi account sono 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 di 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 nel 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 nel 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 saperne di più sugli account di servizio, consulta la documentazione relativa agli 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 Google Cloud 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 progetto. A questo scopo, devi eseguire anche il provisioning di quanto segue:
- L'account di servizio Cloud Build di base (
PROJECT_NUMBER@cloudbuild.gserviceaccount.com
) - L'account di servizio dell'agente di servizio Cloud Build (
service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com
) - L'account di servizio dell'agente di servizio Google Container Registry (
service-PROJECT_NUMBER@containerregistry.iam.gserviceaccount.com
)
Questi account di servizio devono 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 per il progetto. Se modifichi le autorizzazioni di questo account, le funzioni di creazione, aggiornamento ed eliminazione potrebbero non riuscire.
Ecco alcune delle autorizzazioni importanti utilizzate da cloudfunctions.serviceAgent
:
Autorizzazione | Descrizione |
---|---|
roles/artifactregistry.admin |
Gestisci i repository e archivia le immagini delle build in Artifact Registry. |
roles/cloudbuild.builds.editor |
Necessario per utilizzare Cloud Build al fine di eseguire build nel progetto utente. |
roles/cloudbuild.customworkers.builder |
Creare build nei worker personalizzati di Cloud Build. |
cloudfunctions.functions.invoke |
Richiama una funzione HTTP di prima generazione protetta da 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 seconda generazione. |
firebasedatabase.instances.{get, update} |
Crea le funzioni attivate da Firebase Realtime Database. |
iam.serviceAccounts.{actAs, getAccessToken, signBlob} |
Può ottenere le credenziali dell'account di servizio di runtime. |
iam.serviceAccounts.getOpenIdToken |
Necessario affinché l'agente riceva un token OpenID su un'autorità specificata dall'utente. Il token OpenID viene utilizzato per richiamare le funzioni abilitate per IAM. |
pubsub.subscriptions |
Gestire gli abbonamenti nel progetto dell'utente. |
pubsub.topics |
Gestisci 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 in un bucket Cloud Storage che attivano una funzione di 1a generazione. |
storage.buckets.create ,storage.objects.{delete, get, create, list} |
Richiesto per memorizzare il codice sorgente nel progetto utente. |
Puoi visualizzare l'intero set di autorizzazioni sotto i ruoli IAM predefiniti o eseguendo questo comando:
gcloud iam roles describe roles/cloudfunctions.serviceAgent
Puoi reimpostare il ruolo predefinito di questo account di servizio rimuovendo il ruolo che ha attualmente 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 di autorizzazione
Se si verificano errori di autorizzazione quando esegui il deployment, l'aggiornamento, l'eliminazione o l'esecuzione di funzioni nel tuo progetto, segui questi passaggi:
Assicurati di disporre del ruolo Editor o Proprietario per il progetto o 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 le autorizzazioni di esecuzione a livello di funzione.
Verifica che l'account di servizio dell'agente di servizio Cloud Functions (
service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
) disponga del ruolo cloudfunctions.serviceAgent per il progetto.Assicurati che la casella Includi concessioni dei ruoli fornite da Google nella scheda Autorizzazioni della pagina IAM della console sia selezionata per visualizzare questo account. In alternativa, puoi utilizzare
gcloud projects add-iam-policy-binding PROJECT_ID
.Assicurati di disporre delle autorizzazioni per le origini dei trigger, come Pub/Sub o Cloud Storage.
Se visualizzi un errore di "autorizzazioni insufficienti" o 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 alle funzioni. Quindi, ripeti i passaggi 2 e 3.
Se durante il deployment viene visualizzato l'errore "servizio non disponibile", assicurati che l'account di servizio di runtime PROJECT_ID@appspot.gserviceaccount.com
esista nel progetto. Per ricreare l'account di servizio eliminato, consulta
Annullare l'eliminazione di un account di servizio.
Vedi anche Risoluzione dei problemi di Cloud Functions.