Cette page décrit plusieurs façons d'obtenir un jeton d'identification OpenID Connect (OIDC) signé par Google.
Vous avez besoin d'un jeton d'ID signé par Google pour les cas d'utilisation d'authentification suivants :
- Accéder à un service Cloud Run
- Appeler une fonction Cloud
- Authentifier un utilisateur auprès d'une application sécurisée par Identity-Aware Proxy (IAP)
- Effectuer une requête auprès d'une API déployée avec API Gateway ou Cloud Endpoints
Pour en savoir plus sur le contenu et la durée de vie des jetons d'ID, consultez la section Jetons d'ID.
Les jetons d'ID ont un service ou une application spécifique pour lesquels ils peuvent être utilisés, spécifiés par la valeur de leur revendication aud
. Cette page utilise le terme service cible pour désigner le service ou l'application auxquels le jeton d'ID peut être utilisé pour s'authentifier.
Lorsque vous obtenez le jeton d'ID, vous pouvez l'inclure dans un en-tête Authorization
de la requête adressée au service cible.
Méthodes permettant d'obtenir un jeton d'ID
Il existe différentes manières d'obtenir un jeton d'ID. Cette page décrit les méthodes suivantes :
- Obtenir un jeton d'ID à partir du serveur de métadonnées
- Utiliser un service de connexion pour générer un jeton d'ID
- Générer un jeton d'ID en empruntant l'identité d'un compte de service
- Générer un jeton d'ID générique pour le développement avec Cloud Run et Cloud Functions
Si vous avez besoin qu'un jeton d'ID soit accepté par une application non hébergée sur Google Cloud, vous pouvez probablement utiliser ces méthodes, mais vous devez déterminer quels sont les jetons d'ID requis par l'application.
Obtenir un jeton d'ID à partir du serveur de métadonnées
Lorsque votre code est exécuté sur une ressource à laquelle un compte de service est associé, le serveur de métadonnées du service associé peut généralement fournir un jeton d'ID. Le serveur de métadonnées génère des jetons d'ID pour le compte de service associé. Vous ne pouvez pas obtenir de jeton d'ID en fonction des identifiants utilisateur à partir du serveur de métadonnées.
Vous pouvez obtenir un jeton d'ID à partir du serveur de métadonnées lorsque votre code s'exécute sur les services Google Cloud suivants :
- Compute Engine
- Environnement standard App Engine
- Environnement flexible App Engine
- Cloud Functions
- Cloud Run
- Google Kubernetes Engine
- Cloud Build
Pour récupérer un jeton d'ID à partir du serveur de métadonnées, vous interrogez le point de terminaison de l'identité du compte de service, comme indiqué dans cet exemple.
curl
Remplacez AUDIENCE
par l'URI du service cible, par exemple http://www.example.com
.
curl -H "Metadata-Flavor: Google" \ 'http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE'
PowerShell
Remplacez AUDIENCE
par l'URI du service cible, par exemple http://www.example.com
.
$value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE") $value
Java
Pour exécuter cet exemple de code, vous devez installer la bibliothèque cliente Auth pour Java.
Go
Node.js
Pour exécuter cet exemple de code, vous devez installer la bibliothèque Google Auth pour Node.js.
Python
Pour exécuter cet exemple de code, vous devez installer la bibliothèque Google Auth pour Python.
Ruby
Pour exécuter cet exemple de code, vous devez installer la bibliothèque Google Auth pour Ruby.
Utiliser un service de connexion pour générer un jeton d'ID
Certains services Google Cloud vous aident à appeler d'autres services. Ces services de connexion peuvent vous aider à déterminer quand l'appel est effectué ou à gérer un workflow incluant l'appel du service. Les services suivants peuvent automatiquement inclure un jeton d'ID, avec la valeur appropriée pour la revendication aud
, lorsqu'ils appellent un service nécessitant un jeton d'ID :
- Cloud Scheduler
- Cloud Scheduler est un planificateur de jobs Cron entièrement géré, spécialement conçu pour les entreprises. Vous pouvez configurer Cloud Scheduler de manière à inclure un jeton d'ID ou un jeton d'accès lorsqu'il appelle un autre service. Pour en savoir plus, consultez la section Utiliser l'authentification avec des cibles HTTP.
- Cloud Tasks
- Cloud Tasks vous permet de gérer l'exécution de tâches distribuées. Vous pouvez configurer une tâche de manière à inclure un jeton d'ID ou un jeton d'accès lorsqu'elle appelle un service. Pour en savoir plus, consultez la section Utiliser des tâches HTTP Target avec des jetons d'authentification.
- Pub/Sub
- Pub/Sub permet la communication asynchrone entre les services. Vous pouvez configurer Pub/Sub de façon à inclure un jeton d'ID avec un message. Pour en savoir plus, consultez la section Authentification pour les abonnements push.
- Workflows
- Workflows est une plate-forme d'orchestration entièrement gérée qui exécute des services dans un ordre que vous définissez : un workflow. Vous pouvez définir un workflow de manière à inclure un jeton d'ID ou un jeton d'accès lorsqu'il appelle un autre service. Pour plus d'informations, consultez la page Effectuer des requêtes authentifiées à partir d'un workflow.
Générer un jeton d'ID en empruntant l'identité d'un compte de service
Emprunter l'identité d'un compte de service permet à un compte principal de générer des identifiants éphémères pour un compte de service approuvé. Le compte principal peut ensuite utiliser ces identifiants pour s'authentifier en tant que compte de service.
Pour qu'un compte principal puisse emprunter l'identité d'un compte de service, il doit disposer d'un rôle IAM permettant d'emprunter une identité sur ce compte de service. Si le compte principal est lui-même un autre compte de service, il peut sembler plus simple de fournir les autorisations requises directement à ce compte de service et de lui permettre d'emprunter une identité. Cette configuration, appelée "auto-emprunt d'identité", crée une faille de sécurité, car elle permet au compte de service de créer un jeton d'accès pouvant être actualisé à l'infini.
L'emprunt d'identité d'un compte de service doit toujours impliquer deux comptes principaux : le compte principal qui représente l'appelant, et le compte de service dont l'identité est empruntée, appelé compte de service porteur de privilèges.
Vous pouvez appliquer le processus général suivant pour générer un jeton d'ID en empruntant l'identité d'un compte de service.
Pour obtenir des instructions détaillées, consultez la section Créer un jeton d'ID.
Identifiez ou créez un compte de service en tant que compte de service avec privilège.
-
Identifiez les rôles requis pour appeler le service cible. Attribuez ces rôles au compte de service sur le service cible :
- Pour les services Cloud Run, attribuez le rôle Demandeur Cloud Run (
roles/run.invoker
). - Pour Cloud Functions, attribuez le rôle Demandeur Cloud Functions (
roles/cloudfunctions.invoker
). - Pour les autres services cibles, consultez la documentation du produit concerné.
- Pour les services Cloud Run, attribuez le rôle Demandeur Cloud Run (
Identifiez le compte principal qui effectuera l'emprunt d'identité et configurez les ADC (Identifiants par défaut de l'application) pour utiliser les identifiants de ce compte principal.
Pour les environnements de développement, le compte principal est généralement le compte utilisateur que vous avez fourni aux ADC en utilisant gcloud CLI. Toutefois, si l'exécution se déroule sur une ressource à laquelle un compte de service est associé, le compte de service associé est le compte principal.
Attribuez au compte principal le rôle "Créateur de jetons d'identité OpenID Connect du compte de service" (
roles/iam.serviceAccountOpenIdTokenCreator
).Utilisez l'API IAM Credentials pour générer le jeton d'ID pour le compte de service autorisé.
Générer un jeton d'ID générique pour le développement avec Cloud Run et Cloud Functions
Vous pouvez utiliser gcloud CLI afin d'obtenir un jeton d'ID pour vos identifiants utilisateur, qui peut être utilisé avec n'importe quel service Cloud Run ou fonction Cloud pour lequel ou laquelle l'appelant dispose des autorisations IAM requises pour effectuer l'appel. Ce jeton ne fonctionnera avec aucune autre application.
Pour générer un jeton d'ID générique, vous devez utiliser la commande
gcloud auth print-identity-token
:gcloud auth print-identity-token
Étapes suivantes
- Consultez la documentation sur les jetons d'ID.
- Utilisez les commandes shell pour interroger le serveur de métadonnées Compute Engine.
- Obtenez davantage d'informations sur les méthodes d'authentification.