Contrôle des accès avec IAM

Vous (par exemple, l'utilisateur ou le compte de service qui déploie la fonction) pouvez définir le contrôle des accès à l'aide de rôles au niveau du projet. Attribuez un rôle à un membre d'un projet ou à un compte de service pour déterminer son niveau d'accès à votre projet Google Cloud et à ses ressources. Par défaut, tous les projets Google Cloud sont configurés avec un seul utilisateur : le créateur du projet d'origine. Aucun autre utilisateur n'a accès au projet et, par conséquent, aux fonctions afférentes, avant d'être ajouté en tant que membre de l'équipe de projet.

Contrôle des accès pour les utilisateurs

Vous pouvez ajouter des utilisateurs en tant que membres de l'équipe de votre projet et leur attribuer des rôles grâce à Identity and Access Management (IAM).

Cloud Functions accepte les rôles Basic d'éditeur, de propriétaire et de lecteur, qui accordent les autorisations suivantes :

  • Éditeur et propriétaire : accès en lecture et en écriture à toutes les ressources liées aux fonctions. Permet aux utilisateurs de déployer, mettre à jour et supprimer des fonctions. Accès à toutes les autres ressources du projet.
  • Lecteur : accès en lecture seule aux fonctions et aux emplacements. Permet aux utilisateurs de répertorier les fonctions et de voir leurs détails, mais ne leur permet pas d'afficher le code source. Accès à toutes les autres ressources du projet.

Cloud Functions accepte également les rôles prédéfinis Développeur et Lecteur, qui accordent les autorisations suivantes :

  • Développeur : accès en lecture et en écriture à toutes les ressources relatives aux fonctions. Permet aux utilisateurs de déployer, mettre à jour et supprimer des fonctions. Pas d'accès aux autres ressources du projet.
  • Lecteur : accès en lecture seule aux fonctions et aux emplacements. Permet aux utilisateurs de répertorier les fonctions et de voir leurs détails, mais ne leur permet pas d'afficher le code source. Pas d'accès aux autres ressources du projet.

Contrôle des accès pour les comptes de service

Un compte de service est un type de compte Google Cloud spécial qui sert d'identité à un utilisateur non humain devant s'authentifier et disposer d'autorisations pour accéder aux données et effectuer diverses opérations. Certains de ces comptes sont créés et gérés par Google et sont appelés agents de service.

Les comptes de service suivants sont utilisés pour Cloud Functions :

Nom ID de membre Rôle
Compte de service App Engine par défaut (1re génération uniquement) PROJECT_ID@appspot.gserviceaccount.com Éditeur
Compte de service Compute Engine par défaut (2e génération uniquement) PROJECT_NUMBER-compute@developer.gserviceaccount.com Éditeur
Agent de service Google Cloud Functions service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com Agent de service Cloud Functions
PROJECT_NUMBER@cloudbuild.gserviceaccount.com Compte de service Cloud Build
Compte de service Cloud Build service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com Agent de service Cloud Build
Agent de service Google Container Registry service-PROJECT_NUMBER@containerregistry.iam.gserviceaccount.com Agent de service Container Registry
Agent de service Artifact Registry service-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com Agent de service Artifact Registry

Comptes de service d'exécution

Lors de l'exécution, Cloud Functions (1re génération) utilise par défaut le compte de service App Engine par défaut (PROJECT_ID@appspot.gserviceaccount.com), qui a le rôle d'éditeur sur le projet. Cloud Functions (2nd gen) utilise par défaut le compte de service Compute Engine par défaut (PROJECT_NUMBER-compute@developer.gserviceaccount.com), qui a également le rôle d'éditeur sur le projet. Vous pouvez modifier les rôles de ces comptes de service pour limiter ou étendre les autorisations de vos fonctions en cours d'exécution. Vous pouvez également modifier le compte de service utilisé en fournissant un compte de service individuel autre que celui par défaut.

Pour en savoir plus sur les comptes de service, consultez la documentation relative aux comptes de service.

Comptes de service d'administration

Pour effectuer des actions d'administration sur votre projet lors de la création, de la mise à jour ou de la suppression de fonctions, tous les projets dans Cloud Functions nécessitent le compte de service de l'agent de service Google Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com).

De plus, tous les environnements d'exécution effectuent la compilation et le stockage d'images de conteneur dans votre projet. Pour permettre ceci, vous devez également provisionner les éléments suivants :

Ces comptes de service doivent être associés aux rôles répertoriés dans le tableau précédent.

Compte de service de l'agent de service Google Cloud Functions

Par défaut, le compte de service de l'agent de service Google Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) dispose du rôle cloudfunctions.serviceAgent sur votre projet. La création, la mise à jour et la suppression de fonctions peuvent échouer si vous modifiez les autorisations de ce compte.

Voici quelques-unes des autorisations notables utilisées par cloudfunctions.serviceAgent :

Permission Description
roles/artifactregistry.admin Gérer les dépôts et stocker des images de compilation dans Artifact Registry.
roles/cloudbuild.builds.editor Nécessaire pour utiliser Cloud Build pour exécuter des builds dans le projet de l'utilisateur.
roles/cloudbuild.customworkers.builder Créer des builds dans des nœuds de calcul personnalisés Cloud Build.
cloudfunctions.functions.invoke Appeler une fonction HTTP 1re génération surveillée par IAM.
compute.globalOperations.get,
compute.networks.access,
vpcaccess.connectors.{get, use}
Provisionner des fonctions ayant accès au VPC des projets client.
roles/eventarc.developer Gérer les déclencheurs Eventarc pour les fonctions de 2e génération.
firebasedatabase.instances.{get, update} Créer des fonctions déclenchées par la base de données Firebase Realtime.
iam.serviceAccounts.{actAs, getAccessToken, signBlob} Utiliser les informations d'identification du compte de service d'exécution.
iam.serviceAccounts.getOpenIdToken Nécessaire pour que l'agent obtienne un jeton OpenID auprès d'une autorité spécifiée par l'utilisateur. Le jeton OpenID est utilisé pour appeler des fonctions exploitant IAM.
pubsub.subscriptions Gérer les abonnements dans le projet de l'utilisateur.
pubsub.topics Gérer les sujets dans le projet de l'utilisateur.
roles/run.developer Gérer le service Cloud Run pour les fonctions de 2e génération.
storage.buckets.{get, update} Configurer des notifications sur un bucket Cloud Storage qui déclenche une fonction de 1re génération.
storage.buckets.create,
storage.objects.{delete, get, create, list}
Obligatoire pour le stockage du code source dans le projet de l'utilisateur.

Vous pouvez afficher l'ensemble des autorisations sous les rôles IAM prédéfinis ou en exécutant la commande suivante :

gcloud iam roles describe roles/cloudfunctions.serviceAgent

Vous pouvez réinitialiser ce compte de service sur le rôle par défaut en supprimant le rôle dont il dispose actuellement, quel qu'il soit, et en ajoutant le rôle d'agent de service 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

Résolution des erreurs d'autorisation

Si vous obtenez des erreurs d'autorisation lorsque vous déployez, mettez à jour, supprimez ou exécutez des fonctions dans votre projet, procédez comme suit :

  1. Assurez-vous que vous disposez du rôle d'éditeur ou de propriétaire sur votre projet ou que vous utilisez le rôle de développeur Cloud Functions.

    Si vous utilisez le rôle de développeur Cloud Functions au niveau du projet, assurez-vous d'avoir attribué à l'utilisateur le rôle d'utilisateur du compte de service IAM.

    Actuellement, seules les autorisations d'exécution sont autorisées au niveau de la fonction.

  2. Vérifiez que le compte de service de l'agent de service Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) dispose du rôle cloudfunctions.serviceAgent pour votre projet.

    Assurez-vous que la case Inclure les rôles attribués par Google située dans l'onglet Autorisations de la page Console IAM est cochée pour ce compte. Vous pouvez également utiliser gcloud projects add-iam-policy-binding PROJECT_ID.

  3. Vérifiez que vous disposez des autorisations nécessaires pour les sources de déclenchement, telles que Pub/Sub ou Cloud Storage.

Si vous obtenez une erreur "autorisations insuffisantes" ou rencontrez d'autres problèmes d'authentification lorsque vous exécutez vos fonctions, assurez-vous que le compte de service d'exécution dispose des autorisations nécessaires pour accéder aux ressources dont vos fonctions ont besoin, puis répétez les étapes 2 et 3.

Si vous obtenez une erreur "service indisponible" lors du déploiement, assurez-vous que le compte de service d'exécution PROJECT_ID@appspot.gserviceaccount.com existe dans votre projet. Pour recréer ce compte de service s'il a été supprimé, consultez la section Annuler la suppression d'un compte de service.

Pour plus d'informations, consultez également la page Résoudre les problèmes liés à Cloud Functions.