Contrôle des accès

Vous pouvez contrôler les accès en définissant des 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 Platform et à ses ressources. Par défaut, tous les projets Google Cloud Platform sont fournis avec un seul utilisateur : le créateur du projet. 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 à la gestion de l'authentification et des accès (Identity and Access Management, ou IAM).

Cloud Functions accepte les rôles de base 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 de voir le code source. Accès à toutes les autres ressources du projet.

Cloud Functions accepte également les rôles sélectionnés de développeur et de 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 de voir 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 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.

Les comptes de service suivants sont utilisés dans tous les environnements d'exécution Cloud Functions :

Nom ID de membre Rôle
Compte de service App Engine par défaut PROJECT_ID@appspot.gserviceaccount.com Éditeur
Agent de service Google Cloud Functions service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com Agent de service Cloud Functions

De plus, dans tous les environnements d'exécution à l'exception de Node.js 8 et Go 1.11, les comptes de service suivants sont nécessaires :

Nom ID de membre Rôle
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 Éditeur

Comptes de service d'exécution

Lors de l'exécution, Cloud Functions 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. Vous pouvez modifier les rôles de ce compte 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 autre que celui par défaut pour chaque fonction.

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

Comptes de service d'administration

Pour que vous puissiez effectuer des opérations d'administration sur votre projet lors de la création, la mise à jour ou la suppression de fonctions, tous les projets 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, à l'exception de Node.js 8 et Go 1.11, tous les environnements d'exécution effectuent la compilation et le stockage d'images de conteneur dans votre projet. Par conséquent, ils nécessitent le provisionnement des comptes de service suivants :

Ces comptes de service doivent disposer des rôles répertoriés dans le tableau ci-dessus.

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.

Le rôle cloudfunctions.serviceAgent dispose des autorisations suivantes :

Autorisation Description
pubsub.subscriptions.* Gérer les abonnements dans le projet de l'utilisateur.
pubsub.topics.create Créer un sujet une fois qu'une fonction est déployée.
pubsub.topics.attachSubscription Joindre un abonnement à un sujet existant.
pubsub.topics.get Obtenir le sujet existant sur lequel la fonction doit être déclenchée.
iam.serviceAccounts.actAs Exécuter la fonction en tant que compte de service d'exécution.
iam.serviceAccounts.{getAccessToken, signBlob} Utiliser les informations d'identification du compte de service d'exécution.
resourcemanager.projects.getIamPolicy Déterminer l'origine de la fonction.
firebasedatabase.instances.{get, update} Créer des fonctions déclenchées par la base de données Firebase Realtime.
storage.buckets.{get, update},
resourcemanager.projects.get
Créer des fonctions déclenchées par un bucket Cloud Storage.

Vous pouvez réinitialiser ce compte de service au rôle par défaut en supprimant le rôle dont il dispose actuellement 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, assurez-vous d'avoir attribué à l'utilisateur le rôle d'utilisateur du compte de service IAM.
  2. Vérifiez que le compte de service Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) dispose du rôle cloudfunctions.serviceAgent sur votre projet.
  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 suivez les étapes 2 et 3 ci-dessus.

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. Ce fil de discussion sur Stack Overflow explique comment recréer ce compte de service s'il a été supprimé.

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