Comptes de service

Cette page décrit les différents types de comptes de service, ainsi que les rôles IAM disponibles pour ces comptes.

Avant de commencer

  • Explorez les concepts fondamentaux de Cloud IAM.

Que sont les comptes de service ?

Un compte de service est un type particulier de compte utilisé par une application ou une instance de machine virtuelle (VM), et non par une personne. Les applications utilisent des comptes de service pour effectuer les appels d'API autorisés.

Par exemple, une VM Compute Engine peut s'exécuter en tant que compte de service, et ce compte peut recevoir les autorisations requises pour accéder aux ressources dont il a besoin. Dans ce cas, le compte de service constitue l'identité du service, tandis que les autorisations qui lui sont accordées déterminent les ressources auxquelles il peut accéder.

Un compte de service est identifié par son adresse e-mail, qui est unique au compte.

Différences entre un compte de service et un compte utilisateur

Les comptes de service diffèrent des comptes utilisateur sur plusieurs points :

  • Les comptes de service n'ont pas de mot de passe, et la connexion à ces comptes ne peut être effectuée via un navigateur ou des cookies.
  • Les comptes de service sont associés à des paires de clés RSA publiques/privées permettant l'authentification à Google.
  • Des autorisations Cloud IAM peuvent être accordées afin de permettre à d'autres utilisateurs (ou à d'autres comptes de service) de se faire passer pour un compte de service donné.
  • Contrairement aux comptes utilisateur, les comptes de service ne sont pas des membres de votre domaine G Suite. De ce fait, les éléments que vous partagez avec tous les membres de votre domaine G Suite ne seront pas partagés avec les comptes de service. De même, les administrateurs G Suite ne peuvent être ni propriétaires, ni gestionnaires d'éléments créés par un compte de service.

Clés de compte de service

Chaque compte de service est associé à deux ensembles de paires de clés RSA publiques/privées permettant l'authentification à Google : des clés gérées par Google et des clés gérées par l'utilisateur.

Clés gérées par Google

Les paires de clés gérées par Google impliquent que Google stocke à la fois la partie publique et privée des clés, et les alterne régulièrement (chaque clé pouvant être utilisée pour la signature pendant deux semaines maximum). De plus, la clé privée est toujours conservée à titre de caution et n'est jamais directement accessible. Cloud IAM fournit des API permettant d'utiliser ces clés pour signer au nom du compte de service. Pour en savoir plus, consultez la page Créer des identifiants de compte de service éphémères.

Clés gérées par l'utilisateur

Les paires de clés gérées par l'utilisateur impliquent de posséder à la fois les parties publique et privée d'une paire de clés. Vous pouvez créer une ou plusieurs paires de clés gérées par l'utilisateur (également connues sous le nom de clés "externes") qui pourront être utilisées hors de Google Cloud. Google ne stocke que la partie publique d'une clé gérée par l'utilisateur.

En outre, vous pouvez créer une clé publique au format approprié et l'importer dans Google, où elle est associée de manière permanente au compte de service spécifié. Lorsque vous devez effectuer des opérations de signature au nom de ce compte de service, par exemple lors de la création de clés de compte de service, la clé publique importée est utilisée.

La partie privée d'une paire de clés gérée par l'utilisateur est généralement utilisée avec les identifiants par défaut de l'application. La clé privée permet ensuite l'authentification serveur à serveur des applications.

Avec les clés gérées par l'utilisateur, vous êtes responsable de la sécurité de la clé privée ainsi que d'autres opérations de gestion telles que la rotation des clés. Les clés gérées par l'utilisateur peuvent être gérées à partir de l'API Cloud IAM, de l'outil de ligne de commande gcloud ou de la page des comptes de service dans Google Cloud Console. Afin de faciliter la rotation des clés, vous pouvez créer jusqu'à 10 clés par compte de service.

Pensez à utiliser Cloud Key Management Service (Cloud KMS) pour gérer vos clés en toute sécurité.

Bloquer les clés gérées par l'utilisateur

Les clés gérées par l'utilisateur constituent des identifiants extrêmement puissants. Si elles ne sont pas gérées correctement, elles peuvent présenter un risque de sécurité.

Vous pouvez restreindre leur utilisation en appliquant la contrainte de règle d'administration constraints/iam.disableServiceAccountKeyCreation à des projets, des dossiers, voire à votre organisation toute entière. Après avoir appliqué la contrainte, vous pouvez activer des clés gérées par l'utilisateur dans des emplacements bien contrôlés afin de minimiser le risque que peuvent présenter les clés non gérées.

Types de comptes de service

Comptes de service gérés par l'utilisateur

Vous pouvez créer des comptes de service gérés par l'utilisateur dans votre projet à l'aide de l'API Cloud IAM, de Cloud Console ou de l'outil de ligne de commande gcloud. Vous êtes responsable de la gestion et de la sécurisation de ces comptes.

Par défaut, vous pouvez créer jusqu'à 100 comptes de service gérés par l'utilisateur dans un projet. Si ce quota ne répond pas à vos besoins, vous pouvez demander une augmentation de quota à l'aide de Cloud Console. Les comptes de service par défaut décrits sur cette page ne sont pas comptabilisés dans ce quota.

Lorsque vous créez un compte de service géré par l'utilisateur dans votre projet, vous choisissez un nom pour ce compte de service. Ce nom apparaît dans l'adresse e-mail qui identifie le compte de service, au format suivant :

service-account-name@project-id.iam.gserviceaccount.com

Comptes de service par défaut

Lorsque vous utilisez des services Google Cloud, ceux-ci créent des comptes de service gérés par l'utilisateur qui permettent au service de déployer des tâches qui accèdent à d'autres ressources Google Cloud. Ces comptes sont appelés comptes de service par défaut.

Les comptes de service par défaut vous aident à faire vos premiers pas avec les services Google Cloud. Pour les charges de travail de production, nous vous recommandons vivement de créer vos propres comptes de service gérés par l'utilisateur et d'attribuer les rôles appropriés à chaque compte de service.

Lorsqu'un compte de service par défaut est créé, le rôle Éditeur (roles/editor) lui est automatiquement attribué sur votre projet. Ce rôle inclut un très grand nombre d'autorisations. Pour respecter le principe du moindre privilège, nous vous recommandons vivement de désactiver l'attribution automatique des rôles en ajoutant une contrainte à votre règle d'administration ou en révoquant manuellement le rôle Éditeur. Si vous désactivez ou révoquez l'attribution de rôle, vous devez choisir les rôles à attribuer aux comptes de service par défaut.

Le tableau suivant répertorie les services qui créent des comptes de service par défaut :

Service Nom du compte de service Adresse e-mail
App Engine, et tout service Google Cloud utilisant App Engine Compte de service App Engine par défaut project-id@appspot.gserviceaccount.com
Compute Engine, et tout service Google Cloud utilisant Compute Engine Compte de service Compute Engine par défaut project-number-compute@developer.gserviceaccount.com

Comptes de service gérés par Google

En plus des comptes de service gérés par l'utilisateur et des comptes de service par défaut, vous pouvez voir d'autres comptes de service dans la stratégie Cloud IAM de votre projet ou dans Cloud Console. Ces comptes de service sont créés et gérés par Google, et sont utilisés par les services Google.

Le nom à afficher de chaque compte de service géré par Google se termine par "Agent de service" ou "Compte de service". Certains de ces comptes de service sont visibles, d'autres sont masqués.

Par exemple, votre projet est susceptible de contenir un compte de service nommé Agent de service des API Google, avec une adresse e-mail au format suivant : project-number@cloudservices.gserviceaccount.com

Ce compte de service exécute des processus Google internes en votre nom. Le rôle Éditeur (roles/editor) lui est automatiquement attribué sur le projet. Ne modifiez pas et ne révoquez pas ce rôle.

De même, les rôles peuvent être automatiquement attribués à d'autres comptes de service gérés par Google sur le projet. Le nom de ces rôles se termine généralement par serviceAgent. Ne modifiez pas et ne révoquez pas ces rôles.

Le tableau suivant répertorie certains autres comptes de service gérés par Google qui peuvent exister dans votre projet. Il présente également le format de l'adresse e-mail pour chacun de ces comptes de service. Remplacez project-number par le numéro de votre projet, qui figure dans le tableau de bord Cloud Console de votre projet.

Comptes de service gérés par Google
Agent de service AI Platform service-project-number@gcp-sa-aiplatform.iam.gserviceaccount.com
Compte de service Cloud AI Platform Notebooks service-project-number@gcp-sa-notebooks.iam.gserviceaccount.com
Agent de service Cloud Composer service-project-number@cloudcomposer-accounts.iam.gserviceaccount.com
Compte de service Cloud Data Fusion service-project-number@gcp-sa-datafusion.iam.gserviceaccount.com
Compte de service Cloud Dataflow service-project-number@dataflow-service-producer-prod.iam.gserviceaccount.com
Agent de service Cloud Life Sciences service-project-number@gcp-sa-lifesciences.iam.gserviceaccount.com
Compte de service Cloud Pub/Sub service-project-number@gcp-sa-pubsub.iam.gserviceaccount.com
Compte de service Cloud Scheduler service-project-number@gcp-sa-cloudscheduler.iam.gserviceaccount.com
Agent de service Cloud Source Repositories service-project-number@sourcerepo-service-accounts.iam.gserviceaccount.com
Agent de service Compute Engine service-project-number@compute-system.iam.gserviceaccount.com
Agent de service Google Cloud Dataproc service-project-number@dataproc-accounts.iam.gserviceaccount.com
Agent de service Google Cloud Functions service-project-number@gcf-admin-robot.iam.gserviceaccount.com
Agent de service Google Cloud ML Engine service-project-number@cloud-ml.google.com.iam.gserviceaccount.com
Agent de service Google Cloud Run service-project-number@serverless-robot-prod.iam.gserviceaccount.com
Agent de service Kubernetes Engine service-project-number@container-engine-robot.iam.gserviceaccount.com
Agent de service Cloud TPU service-project-number@cloud-tpu.iam.gserviceaccount.com

Autorisations de compte de service

Un compte de service constitue non seulement une identité, mais aussi une ressource à laquelle des stratégies IAM sont associées. Ces stratégies déterminent qui peut utiliser le compte de service.

Par exemple, Alice peut disposer du rôle d'éditeur sur un compte de service et Bob du rôle de lecteur sur un autre compte de service. Cela équivaut à attribuer des rôles à une autre ressource Google Cloud.

Les comptes de service Compute Engine et App Engine par défaut se voient attribuer des rôles d'éditeur sur le projet lors de leur création, de sorte que le code exécuté dans votre instance d'application ou de machine virtuelle dispose des autorisations nécessaires. Dans ce cas, les comptes de service sont des identités qui reçoivent le rôle d'éditeur pour une ressource (le projet).

Si vous souhaitez autoriser votre application à accéder à un bucket Cloud Storage, il vous suffit d'accorder au compte de service (utilisé par l'application) les autorisations nécessaires pour lire ce bucket Cloud Storage. Dans ce cas, le compte de service est l'identité à laquelle vous accordez des autorisations sur une autre ressource (le bucket Cloud Storage).

Rôle Utilisateur du compte de service

Vous pouvez attribuer le rôle Utilisateur du compte de service (roles/iam.serviceAccountUser) au niveau du projet pour tous les comptes de service de ce projet, ou au niveau du compte de service.

  • En attribuant le rôle Utilisateur du compte de service à un utilisateur pour un projet, vous permettez à cet utilisateur d'accéder à tous les comptes de service du projet, y compris ceux qui pourraient être créés ultérieurement.

  • Le rôle Utilisateur du compte de service attribué à un utilisateur pour un compte de service spécifique ne permet à cet utilisateur d'accéder qu'à ce compte de service.

Les utilisateurs auxquels le rôle Utilisateur du compte de service est attribué sur un compte de service peuvent accéder indirectement à toutes les ressources auxquelles le compte de service a lui-même accès. Par exemple, si le compte de service s'est vu attribuer le rôle Administrateur de Compute (roles/compute.admin), un utilisateur ayant le rôle Utilisateur du compte de service (roles/iam.serviceAccountUser) sur ce compte de service peut agir en tant que compte de service pour démarrer une instance Compute Engine. Dans ce cas de figure, l'utilisateur emprunte l'identité du compte de service pour pouvoir réaliser des tâches avec les rôles et autorisations qui lui ont été accordés.

Pour en savoir plus sur l'attribution à des utilisateurs de rôles sur des comptes de service, consultez la page Gérer l'emprunt d'identité d'un compte de service.

Les comptes de service représentent votre sécurité au niveau du service. La sécurité du service est déterminée par les personnes disposant des rôles Cloud IAM nécessaires pour gérer et utiliser les comptes de service, ainsi que par les personnes qui détiennent les clés externes privées associées à ces comptes de service. Voici quelques-unes des pratiques recommandées pour assurer la sécurité :

  • Utilisez l'API Cloud IAM pour auditer les comptes de service ainsi que les clés et les stratégies associées à ces comptes.
  • Si vos comptes de service n'ont pas besoin de clés externes, supprimez-les.
  • Si les utilisateurs n'ont pas besoin d'être autorisés à gérer ou utiliser des comptes de service, supprimez-les de la stratégie Cloud IAM applicable.

Pour en savoir plus sur les bonnes pratiques, consultez la section Comprendre les comptes de service.

Le rôle de créateur de jetons du compte de service

Ce rôle permet d'emprunter l'identité d'un compte de service pour créer des jetons d'accès OAuth2, ou pour signer des blobs ou des jetons JWT.

Le rôle d'acteur du compte de service

Ce rôle est obsolète. Si vous devez exécuter des opérations en tant que compte de service, utilisez le rôle d'utilisateur du compte de service. Pour fournir en pratique les mêmes autorisations que le rôle d'acteur du compte de service, vous devez également accorder le rôle de créateur de jetons du compte de service.

Niveaux d'accès

Les niveaux d'accès représentent l'ancienne méthode de spécification des autorisations associées à votre VM. Avant l'existence des rôles IAM, les champs d'application d'accès étaient le seul moyen d'accorder des autorisations aux comptes de service. Bien qu'il ne s'agisse pas de la méthode la plus courante pour accorder des autorisations à l'heure actuelle, vous devez toujours définir des champs d'application d'accès lorsque vous configurez une instance pour exécution en tant que compte de service. Pour plus d'informations sur les champs d'application d'accès, consultez la documentation de Google Compute Engine.

Identifiants de compte de service à court terme

Vous avez la possibilité de créer des identifiants à court terme vous permettant d'emprunter l'identité d'un compte de service Google Cloud. Ces identifiants peuvent servir à authentifier les appels vers les API Google Cloud ou vers des API autres que Google.

Le cas d'utilisation le plus courant de ces identifiants consiste à déléguer temporairement l'accès aux ressources Google Cloud à l'échelle de différents projets, organisations ou comptes. Par exemple, au lieu de fournir à un appelant externe les identifiants permanents d'un compte de service à privilèges élevés, vous pouvez lui accorder un accès d'urgence à titre temporaire. De même, un appelant externe pourra emprunter l'identité d'un compte de service désigné disposant d'autorisations moindres sans avoir besoin des identifiants d'un compte de service à privilèges plus élevés.

Pour plus d'informations, consultez la page Créer des identifiants de compte de service à court terme.

Identifiants par défaut de l'application

Les identifiants par défaut de l'application sont un mécanisme qui facilite l'utilisation des comptes de service lorsque vous opérez à la fois à l'intérieur et à l'extérieur de Google Cloud, ou à l'échelle de plusieurs projets Google Cloud. Le cas d'utilisation le plus courant consiste à d'abord tester le code sur un ordinateur local, puis passer à un projet de développement dans Google Cloud, puis à un projet de production dans Google Cloud. L'utilisation des identifiants par défaut de l'application garantit le bon fonctionnement du compte de service. Lors des tests sur l'ordinateur local, il utilise une clé de compte de service stockée localement, mais lorsqu'il est exécuté sur Compute Engine, il utilise le compte de service par défaut du projet Compute Engine. Pour plus d'informations, consultez la documentation sur les Identifiants par défaut de l'application.

Étapes suivantes

Pour découvrir les bonnes pratiques relatives à l'utilisation des comptes de service, consultez la section Comprendre les comptes de service.

Vous lirez également avec profit les pages suivantes :