Fédération d'identité de charge de travail

Ce document présente la fédération d'identité pour les charges de travail externes. Grâce à la fédération d'identité, vous pouvez autoriser des charges de travail sur site ou multicloud à accéder aux ressources Google Cloud sans avoir à utiliser de clé de compte de service.

Vous pouvez utiliser la fédération d'identité avec Amazon Web Services (AWS) ou avec n'importe quel fournisseur d'identité compatible avec OpenID Connect (OIDC), tel que Microsoft Azure.

Pourquoi utiliser la fédération d'identité ?

Traditionnellement, les applications exécutées en dehors de Google Cloud ont toujours utilisé des clés de compte de service pour accéder aux ressources Google Cloud. Les clés de compte de service sont des identifiants puissants. Si elles ne sont pas gérées correctement, elles peuvent présenter un risque de sécurité.

Avec la fédération d'identité, vous pouvez utiliser la gestion de l'authentification et des accès (IAM) pour accorder des rôles IAM à des identités externes, et leur permettre d'emprunter l'identité de comptes de service. Cela vous permet ainsi d'accéder directement aux ressources à l'aide d'un jeton d'accès de courte durée, ainsi que d'éliminer les tâches de maintenance et de sécurité associées aux clés de compte de service.

Pools d'identités de charge de travail

Un pool d'identités de charge de travail est un conteneur accueillant une collection d'identités externes.

Un projet peut contenir plusieurs pools d'identités de charge de travail, et chaque pool peut avoir accès à des ressources différentes. Cela vous permet de suivre le principe du moindre privilège en regroupant les identités associées dans un même pool, puis en leur accordant un accès précis aux ressources.

En général, nous recommandons de créer un pool pour chacun des environnements autres que Google Cloud ayant besoin d'accéder aux ressources Google Cloud, tels que les environnements de développement, de préproduction ou de production.

Fournisseurs d'identité de charge de travail

Un fournisseur d'identité de charge de travail est une entité qui décrit une relation entre Google Cloud et un fournisseur d'identité externe. Voici quelques exemples de fournisseurs :

  • AWS
  • Azure Active Directory
  • Active Directory sur site
  • Okta
  • Clusters Kubernetes

La fédération d'identité de charge de travail respecte la spécification d'échange de jetons OAuth 2.0. Vous fournissez un identifiant provenant d'un fournisseur d'identité externe au service de jetons de sécurité, qui vérifie l'identité sur l'identifiant, puis renvoie un jeton fédéré en échange.

Mappages d'attributs

Les identifiants incluent généralement des attributs qui fournissent des informations sur l'identité déclarée, tels que son nom, son adresse e-mail ou l'ID utilisateur. Le mappage d'attributs applique les attributs d'un jeton externe à un jeton Google. Cela permet à IAM d'utiliser des jetons de fournisseurs externes pour autoriser l'accès aux ressources Google Cloud.

Pour AWS, Google fournit des mappages par défaut, qui couvrent les scénarios les plus courants. Vous pouvez également fournir des mappages personnalisés.

Pour les fournisseurs OIDC, vous spécifiez les mappages. Pour créer un mappage, consultez la documentation du fournisseur afin d'obtenir la liste des attributs sur ses identifiants.

Le mappage d'attributs est compatible avec Common Expression Language, qui vous permet de formuler de nouveaux attributs personnalisés en fonction de l'identifiant externe ou de rendre des attributs existants plus lisibles. Par exemple, le mappage suivant définit un attribut environment selon qu'un nom de ressource Amazon (ARN) contient :instance-profile/Production ou non :

attribute.environment=assertion.arn.contains(":instance-profile/Production") ? "prod" : "test"

Conditions d'attribut

Une condition d'attribut vous permet de limiter les identités qui peuvent s'authentifier à l'aide de votre pool d'identités de charge de travail. Vous pouvez utiliser une expression CEL pour examiner les attributs sur un identifiant de requête et choisir d'autoriser ou non l'accès.

Les conditions d'attribut sont utiles dans plusieurs scénarios :

  • Si votre charge de travail exploite un fournisseur d'identité accessible au grand public, vous pouvez limiter l'accès de sorte que seules les identités que vous choisissez puissent accéder à votre pool d'identités de charge de travail.

  • Si vous faites appel à un fournisseur d'identité pour plusieurs plates-formes cloud, vous pouvez empêcher que les identifiants destinés à être utilisés avec une autre plate-forme soient utilisés avec Google Cloud, et inversement. Cela permet d'éviter le problème de "confused deputy".

L'exemple suivant n'autorise que les requêtes provenant d'identités associées à un rôle AWS spécifique :

attribute.aws_role == "role-mapping"

Emprunter l'identité d'un compte de service

Le flux d'échange de jetons renvoie un jeton d'accès fédéré que vous pouvez utiliser pour emprunter l'identité d'un compte de service et obtenir un jeton d'accès OAuth 2.0 de courte durée. Le jeton d'accès de courte durée vous permet d'appeler les API Google Cloud auxquelles le compte de service a accès.

Pour emprunter l'identité d'un compte de service, accordez à votre identité externe le rôle Utilisateur Workload Identity (roles/iam.workloadIdentityUser) sur un compte de service disposant des rôles requis par votre charge de travail. Vous pouvez accorder un rôle à toutes les identités d'un pool d'identités de charge de travail ou à des identités externes spécifiques en fonction de leurs attributs.

Le tableau suivant décrit les scénarios courants d'attribution de rôles :

Scénario Format
Identité unique principal://iam.googleapis.com/projects/project-number/locations/global/workloadIdentityPools/pool-id/subject/subject-name
Toutes les identités d'un groupe principalSet://iam.googleapis.com/projects/project-number/locations/global/workloadIdentityPools/pool-id/group/group-name
Toutes les identités avec un attribut défini à l'aide du mappage d'attributs principalSet://iam.googleapis.com/projects/project-number/locations/global/workloadIdentityPools/pool-id/attribute.attribute-name/attribute-value
Toutes les identités d'un pool principalSet://iam.googleapis.com/projects/project-number/locations/global/workloadIdentityPools/pool-id/*

Étapes suivantes