Emprunter l'identité d'un compte de service

Lorsqu'un compte principal authentifié, tel qu'un utilisateur ou un autre compte de service, s'authentifie en tant que compte de service pour obtenir les autorisations de ce dernier, cela s'appelle emprunter l'identité du compte de service. Emprunter l'identité d'un compte de service permet à un compte principal authentifié d'accéder à ce que le compte de service peut accéder. Seuls les comptes principaux authentifiés disposant des autorisations appropriées peuvent emprunter l'identité des comptes de service.

L'emprunt d'identité est utile lorsque vous souhaitez modifier les autorisations d'un utilisateur sans modifier vos stratégies IAM (Identity and Access Management). Par exemple, vous pouvez utiliser l'emprunt d'identité pour accorder temporairement à un utilisateur un accès avec privilèges élevés ou pour tester si un ensemble spécifique d'autorisations est suffisant pour une tâche. Vous pouvez également emprunter l'identité pour développer localement des applications qui ne peuvent s'exécuter qu'en tant que compte de service, ou pour authentifier des applications exécutées en dehors de Google Cloud.

L'emprunt d'identité d'un compte de service Google Cloud est semblable aux méthodes de l'API Security Token Service d'Amazon Web Services (AWS), telles que AssumeRole.

Fonctionnement de l'emprunt d'identité de compte de service

L'emprunt d'identité d'un compte de service implique toujours deux identités: un compte principal authentifié et le compte de service dont l'identité est empruntée. Pour emprunter l'identité du compte de service, le compte principal authentifié obtient un jeton pour le compte de service, puis utilise ce jeton pour s'authentifier en tant que compte de service.

Il existe plusieurs façons d'emprunter l'identité d'un compte de service:

  • Définissez l'option --impersonate-service-account ou la propriété impersonate-service-account lors de l'exécution d'une commande Google Cloud CLI. Lorsque vous exécutez une commande de gcloud CLI avec ce paramètre, gcloud CLI crée des identifiants éphémères pour le compte de service, puis exécute la commande avec ces identifiants.

    Vous pouvez également utiliser l'option --impersonate-service-account lors de la configuration de votre fichier d'identifiants par défaut de l'application. Cette configuration permet aux bibliothèques clientes compatibles avec l'emprunt d'identité d'emprunter automatiquement l'identité du compte de service.

  • Créez des identifiants éphémères à l'aide de l'API Service Account Credentials, puis utilisez-les pour authentifier une requête API.

    Les identifiants éphémères ont une durée de vie limitée, de quelques heures ou moins, et ne sont pas actualisés automatiquement. Ils présentent moins de risques que les identifiants de longue durée, tels que les clés de compte de service.

  • Utilisez un fichier de configuration des identifiants pour configurer une application externe afin qu'elle emprunte l'identité d'un compte de service. Cette option n'est disponible que pour les applications qui utilisent la fédération d'identité de charge de travail.

    Lorsqu'une application utilise un fichier de configuration d'identifiants pour accéder à Google Cloud, elle utilise d'abord ses identifiants spécifiques à l'environnement pour obtenir des identifiants éphémères pour un compte de service désigné. Les identifiants éphémères sont ensuite utilisés pour s'authentifier auprès de Google Cloud.

Si un compte principal accède à des ressources en empruntant l'identité d'un compte de service, la plupart des journaux d'audit incluent à la fois leur identité et celle du compte de service dont ils empruntent l'identité. Pour en savoir plus, consultez la page Interpréter les journaux d'audit.

Lorsque vous utilisez la console Google Cloud, vous vous authentifiez toujours avec vos identifiants utilisateur. vous ne pouvez pas emprunter l'identité d'un compte de service pour accéder aux ressources de la console Google Cloud.

Authentification sans emprunt d'identité

Une charge de travail ou un utilisateur peut s'authentifier de plusieurs manières en tant que compte de service sans emprunter l'identité du compte de service:

  • Une charge de travail utilise un compte de service associé pour s'authentifier auprès des API Google. Dans ce cas, le compte de service associé agit comme identité de la charge de travail. Il s'agit de la seule identité authentifiée impliquée dans la requête.

    Pour en savoir plus sur l'authentification des charges de travail auprès de Google Cloud, consultez la page Identités pour les charges de travail.

  • Une entité principale utilise une clé de compte de service pour s'authentifier en tant que compte de service. L'utilisation d'une clé de compte de service pour s'authentifier en tant que compte de service n'implique qu'une seule identité authentifiée : celle du compte de service. Comme il n'y a qu'une seule identité impliquée, l'utilisation d'une clé n'est pas un emprunt d'identité d'un compte de service.

Dans ces cas, les journaux d'audit n'enregistrent que l'identité du compte de service. Ils n'enregistrent aucune autre identité, par exemple les identités des utilisateurs ayant exécuté le code sur la charge de travail ou les identités des utilisateurs ayant utilisé la clé de compte de service pour s'authentifier. Par conséquent, utiliser des clés de compte de service ou autoriser les développeurs à exécuter du code sur des ressources privilégiées, par exemple une session SSH sur une instance de VM, peut créer des risques d'élévation des privilèges et de non-répudiation.

Autorisations requises

Pour emprunter l'identité d'un compte de service, vous devez disposer de l'autorisation iam.serviceAccounts.getAccessToken. Cette autorisation est associée à des rôles tels que Rôle Créateur de jetons du compte de service (roles/iam.serviceAccountTokenCreator).

Pour en savoir plus sur les rôles requis pour l'emprunt d'identité, consultez la section Rôles pour l'authentification du compte de service.

Cas d'utilisation pour emprunter l'identité d'un compte de service

L'emprunt d'identité d'un compte de service est utile lorsque vous devez effectuer des tâches telles que:

  • Accorder à un utilisateur un accès temporaire avec privilèges élevés
  • Tester si un ensemble spécifique d'autorisations est suffisant pour une tâche
  • Développer localement des applications ne pouvant s'exécuter que sous forme de compte de service
  • Authentifier des applications externes

Accorder un accès avec privilèges élevés temporaire

Dans certains cas, vous pouvez autoriser un utilisateur à accéder temporairement à des ressources spécifiques. Par exemple, vous pouvez accorder un accès supplémentaire à une personne pour lui permettre de résoudre un incident, ou laisser des personnes accéder à des données sensibles pendant une durée limitée après l'enregistrement par ces personnes d'une justification.

Emprunter l'identité d'un compte de service est l'un des moyens permettant d'accorder aux utilisateurs cet accès avec privilèges élevés temporaire. Pour utiliser un compte de service afin d'obtenir un accès temporaire avec privilèges élevés, vous devez d'abord lui attribuer les rôles IAM que vous souhaitez attribuer temporairement aux utilisateurs. Ensuite, vous pouvez autoriser les utilisateurs à emprunter l'identité du compte de service, soit en leur accordant l'autorisation d'emprunter l'identité du compte de service, soit en utilisant un agent de jeton pour émettre un identifiant éphémère pour le compte de service.

Pour en savoir plus sur les méthodes permettant d'accorder aux utilisateurs un accès avec privilèges élevés temporaire, consultez la page Présentation de l'accès avec privilèges élevés temporaire.

Tester les autorisations

Dans certains cas, vous pouvez vérifier si un ensemble spécifique d'autorisations est suffisant pour une tâche. Par exemple, vous pouvez confirmer qu'un compte de service peut toujours exécuter une application si vous supprimez certaines autorisations en excès. Vous pouvez également aider un utilisateur à résoudre des problèmes liés à une tâche et vérifier qu'il peut exécuter une commande donnée avec ses rôles IAM actuels.

Vous pouvez emprunter l'identité d'un compte de service pour tester un ensemble d'autorisations spécifique. Commencez par créer un compte de service et attribuez-lui un ou plusieurs rôles IAM avec les autorisations que vous souhaitez tester. Ensuite, empruntez l'identité du compte de service et relancez la tâche. Cette méthode vous permet de tester les autorisations sans créer de comptes utilisateur de test ni modifier vos propres autorisations IAM.

Pour savoir comment emprunter l'identité des comptes de service, consultez la page Utiliser l'emprunt d'identité des comptes de service.

Développer des applications localement

Lorsque vous développez des applications en local, vous pouvez généralement vous authentifier à l'aide de vos identifiants utilisateur. Toutefois, dans certains cas, cela peut ne pas être possible, par exemple si vous souhaitez vous authentifier auprès d'un service nécessitant un jeton avec une audience personnalisée, que les utilisateurs ne peuvent généralement pas configurer. Dans ce cas, vous devez vous authentifier en tant que compte de service au lieu de vous authentifier à l'aide de vos identifiants utilisateur.

Dans ces situations, nous vous recommandons d'utiliser l'emprunt d'identité de compte de service. L'emprunt de l'identité d'un compte de service vous permet d'éviter d'utiliser des clés de compte de service, ce qui crée un risque de sécurité supplémentaire.

Pour savoir comment emprunter l'identité des comptes de service pour développer des applications, consultez la section Emprunter l'identité d'un compte de service.

Authentifier des applications externes

Pour accéder aux ressources Google Cloud, les applications exécutées en dehors de Google Cloud doivent s'authentifier auprès de Google Cloud. Pour authentifier ces applications, vous pouvez utiliser l'emprunt d'identité de compte de service.

Pour permettre à votre application d'emprunter l'identité d'un compte de service, vous devez d'abord configurer la fédération d'identité de charge de travail, qui fournit une identité authentifiée pour votre application. Vous pouvez ensuite utiliser un fichier de configuration des identifiants pour configurer votre application afin qu'elle emprunte l'identité d'un compte de service.

Bien qu'il soit possible d'utiliser des clés de compte de service pour authentifier des applications externes, nous vous le déconseillons fortement. Les clés de compte de service créent un risque de sécurité supplémentaire et doivent être évitées autant que possible.

Étapes suivantes