Utiliser l'authentification avec des cibles HTTP

Cloud Scheduler peut appeler des cibles HTTP nécessitant une authentification si vous avez configuré un compte de service associé disposant des identifiants appropriés.

Configurer un compte de service

Un compte de service est généralement utilisé par une application ou une charge de travail de calcul. Il est identifié par son adresse e-mail, qui est unique à ce compte.

Les applications peuvent utiliser des comptes de service pour effectuer des appels d'API autorisés en s'authentifiant en tant que compte de service et en accédant à toutes les ressources auxquelles le compte de service est autorisé à accéder.

La façon la plus courante de permettre à une application de s'authentifier en tant que compte de service consiste à associer un compte de service à la ressource exécutant l'application. Vous pouvez ensuite attribuer des rôles IAM (Identity and Access Management) au compte de service pour lui permettre d'accéder aux ressources Google Cloud .

  1. Si vous ne disposez pas déjà d'un compte de service que vous souhaitez utiliser pour les tâches Cloud Scheduler avec des cibles HTTP, créez-en un. Veuillez noter les points suivants :

    • Le compte de service doit appartenir au projet dans lequel la tâche Cloud Scheduler est créée.

    • N'utilisez pas l'agent de service Cloud Scheduler (service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com). Il ne peut pas être utilisé à cette fin.

    • Ne révoquez pas le rôle Agent de service Cloud Scheduler (roles/cloudscheduler.serviceAgent) de l'agent de service Cloud Scheduler de votre projet. Cela entraînera des réponses 403 aux points de terminaison nécessitant une authentification, même si le compte de service de votre tâche dispose du rôle approprié.

  2. Si votre cible se trouve dans Google Cloud, attribuez les rôles IAM nécessaires à votre compte de service. Chaque service de Google Cloud nécessite un rôle spécifique, et le service destinataire vérifie automatiquement le jeton généré. Par exemple, pour Cloud Run et les fonctions Cloud Run de deuxième génération, vous devez attribuer le rôle Cloud Run Invoker.

    Pour obtenir l'autorisation dont vous avez besoin pour associer un compte de service à une ressource, demandez à votre administrateur de vous accorder le rôle IAM Utilisateur du compte de service (roles/iam.serviceAccountUser) sur le compte de service. Ce rôle prédéfini contient l'autorisation iam.serviceAccounts.actAs, qui est requise pour associer un compte de service à une ressource. (Si vous avez créé le compte de service, cette autorisation vous est automatiquement accordée.)

    À l'étape précédente, si vous avez créé spécifiquement un compte de service pour appeler le service ciblé par votre tâche Cloud Scheduler, vous pouvez suivre le principe du moindre privilège en associant le compte et son autorisation d'appelant à votre service cible:

    Console

    1. Dans la console Google Cloud, sur la page de sélection du projet, sélectionnez un projet Google Cloud.

      Accéder au sélecteur de projet

    2. Accédez à la page du type de ressource que vous appelez. Par exemple, si vous appelez un service Cloud Run, accédez à la page qui répertorie les services Cloud Run.

    3. Cochez la case située à gauche du service que vous souhaitez appeler. (Ne cliquez pas sur le service lui-même.)

    4. Cliquez sur l'onglet Autorisations.

      Si le volet d'informations n'est pas visible, vous devrez peut-être cliquer sur Afficher le panneau d'informations > Autorisations.

    5. Cliquez sur Ajouter un compte principal.

    6. Dans le champ Nouveaux comptes principaux, saisissez l'adresse e-mail du compte de service que vous avez créé.

    7. Dans la liste Sélectionner un rôle, sélectionnez un rôle à attribuer.

      Suivez le principe du moindre privilège en choisissant le rôle qui n'inclut que les autorisations dont votre compte principal a besoin.

    8. Cliquez sur Enregistrer.

    gcloud

    gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID \
        --member=PRINCIPAL \
        --role=ROLE
    

    Remplacez les éléments suivants :

    • RESOURCE_TYPE: type de ressource de votre cible. Par exemple, run pour une cible Cloud Run.
    • RESOURCE_ID: identifiant de votre cible. Par exemple, le nom du service pour une cible Cloud Run.
    • PRINCIPAL: identifiant de votre compte de service. Il se présente sous la forme suivante : serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS. Par exemple, serviceAccount:my-service-account@my-project.iam.gserviceaccount.com.
    • ROLE: nom du rôle requis par votre service cible pour l'appel. Par exemple, roles/run.invoker pour une cible de fonction Cloud Run ou de fonction Cloud Run deuxième génération.
    • D'autres paramètres facultatifs sont décrits dans la documentation de référence de la ligne de commande gcloud.

    Exemples :

    • Attribuez le rôle IAM Demandeur Cloud Run (roles/run.invoker) au compte de service my-service-account@my-project.iam.gserviceaccount.com sur le service Cloud Run my-service:

      gcloud run add-iam-policy-binding my-service \
          --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \
          --role=roles/run.invoker
      
    • Attribuez le rôle IAM Demandeur Cloud Run (roles/run.invoker) requis par les fonctions Cloud Run de deuxième génération au compte de service my-service-account@my-project.iam.gserviceaccount.com sur la fonction Cloud Run my-gen2-function:

      gcloud functions add-iam-policy-binding my-gen2-function \
          --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \
          --role=roles/run.invoker \
          --gen2
      
  3. Si votre cible se trouve en dehors de Google Cloud, le service destinataire doit valider manuellement le jeton.

  4. L'agent de service Cloud Scheduler par défaut est automatiquement configuré lorsque vous activez l'API Cloud Scheduler, sauf si vous l'avez activée avant le 19 mars 2019, auquel cas vous devez accorder le rôle Agent de service Cloud Scheduler. Cela lui permet de générer des jetons d'en-tête au nom de votre compte de service en vue de l'authentification auprès de la cible.

Créer une tâche Cloud Scheduler qui utilise l'authentification

Pour vous authentifier entre Cloud Scheduler et une cible HTTP, Cloud Scheduler crée un jeton d'en-tête basé sur votre compte de service client, identifié par son adresse e-mail, et l'envoie via HTTPS à la cible. Vous pouvez utiliser un jeton d'ID (OIDC) ou un jeton OAuth (d'accès). OIDC est généralement utilisé, sauf pour les API Google hébergées sur *.googleapis.com, car ces API attendent un jeton OAuth.

Pour créer une tâche Cloud Scheduler qui utilise l'authentification, vous devez ajouter le type de jeton et l'adresse e-mail qui identifie le compte de service client lorsque vous créez votre tâche:

Console

  1. Dans Google Cloud Console, accédez à la page Cloud Scheduler.

    Accéder à Cloud Scheduler

  2. Cliquez sur Créer une tâche.

  3. Dans le champ Nom, saisissez un nom pour votre job, unique au projet. Notez que vous ne pouvez pas réutiliser un nom de tâche dans un projet, même si vous supprimez la tâche associée.

  4. Dans la liste Région, sélectionnez une région pour votre tâche.

  5. Spécifiez une fréquence et un fuseau horaire pour votre tâche. La chaîne que vous fournissez ici peut être n'importe quelle chaîne compatible avec unix-cron.

  6. Cliquez sur Continuer.

  7. Dans la liste Type de cible, sélectionnez HTTP.

  8. Spécifiez une URL et une méthode HTTP.

  9. Dans la liste Auth header (En-tête d'authentification), sélectionnez le type de jeton. Un jeton OIDC est généralement utilisé, sauf pour les API Google hébergées sur *.googleapis.com, car ces API attendent un jeton OAuth.

  10. Dans la liste Compte de service, sélectionnez l'adresse e-mail de votre compte de service.

  11. Vous pouvez également spécifier une audience qui limite les destinataires du jeton OIDC. Il s'agit généralement de l'URL cible de la tâche sans paramètres d'URL. Si cette option n'est pas spécifiée, l'URL complète, y compris les paramètres de requête, est utilisée comme audience.

  12. Configurez les paramètres facultatifs.

  13. Cliquez sur Créer.

gcloud

gcloud scheduler jobs create http JOB_ID \
    --schedule="FREQUENCY" \
    --uri=URI \
    --oidc-service-account-email=SERVICE_ACCOUNT_EMAIL

Remplacez les éléments suivants :

  • JOB_ID: nom de la tâche propre au projet. Notez que vous ne pouvez pas réutiliser un nom de tâche dans un projet, même si vous supprimez la tâche associée.
  • FREQUENCY: intervalle ou fréquence d'exécution de la tâche (par exemple, every 3 hours ou every 10 mins). La chaîne que vous fournissez ici peut être n'importe quelle chaîne compatible avec unix-cron.
  • URI: URL complète du point de terminaison.
  • SERVICE_ACCOUNT_EMAIL: adresse e-mail de votre compte de service. Un jeton OIDC est généralement utilisé, sauf pour les API Google hébergées sur *.googleapis.com, car ces API attendent un jeton OAuth. (Utilisez plutôt l'indicateur --oauth-service-account-email pour définir un type de jeton OAuth.)
  • D'autres paramètres facultatifs sont décrits dans la documentation de référence de la ligne de commande gcloud.

Attribuer le rôle Agent de service Cloud Scheduler

Certains Google Cloud services ont besoin d'accéder à vos ressources pour pouvoir agir en votre nom. Pour répondre à ce besoin, Google Cloud crée et gère des comptes de service appelés agents de service, qui sont créés et auxquels des rôles sont attribués automatiquement lorsque vous activez et utilisez des services Google Cloud.

L'agent de service Cloud Scheduler nécessite le rôle Agent de service Cloud Scheduler (roles/cloudscheduler.serviceAgent). Sans ce rôle, les tâches Cloud Scheduler échouent. Vous pouvez attribuer manuellement le rôle à votre agent de service Cloud Scheduler, qui dispose d'une adresse e-mail au format suivant:

service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com

Vous devez accorder le rôle manuellement uniquement si l'une des conditions suivantes est remplie:

  • Vous avez activé l'API Cloud Scheduler avant le 19 mars 2019
  • Vous avez supprimé le rôle Agent de service Cloud Scheduler de l'agent de service.

Vous pouvez vérifier que l'agent de service Cloud Scheduler est configuré dans votre projet et qu'il dispose du rôle "Agent de service Cloud Scheduler" en consultant l'accès actuel de votre projet. Notez que si vous utilisez la console Google Cloud pour afficher l'accès de votre projet, veillez à cocher la case Inclure les attributions de rôles fournies par Google.

Pour savoir comment attribuer un rôle à votre agent de service, consultez la section Créer et attribuer des rôles aux agents de service.

Étape suivante

Découvrez comment vous authentifier auprès de Cloud Scheduler de manière programmatique.