Cloud Scheduler peut appeler des cibles HTTP nécessitant une authentification si vous vous devez avoir configuré un compte de service associé dispose des identifiants appropriés.
Configurer le compte de service
Si vous ne possédez pas encore de compte de service Jobs Cloud Scheduler avec des cibles HTTP Créez un compte de service. Veuillez noter les points suivants :
Le compte de service doit appartenir au projet dans lequel le job Cloud Scheduler est créé.
Ne pas utiliser l'agent de service Cloud Scheduler (
service-YOUR_PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com
). Elle ne peut pas être utilisée à cette fin.Ne pas révoquer le rôle d'agent de service Cloud Scheduler (
roles/cloudscheduler.serviceAgent
) depuis Cloud Scheduler sur l'agent de service de votre projet. Cela entraînera des403
aux points de terminaison nécessitant une authentification, même si le service dispose du rôle approprié.
Si votre cible se trouve dans Google Cloud, accordez les autorisations Rôles IAM pour votre service de service. Chaque service de Google Cloud requiert un rôle spécifique, et le service destinataire vérifie automatiquement le jeton généré. Pour (exemple : pour Cloud Run et Cloud Run fonctions Cloud Functions, vous devez ajouter le rôle
Cloud Run Invoker
.Notez que pour déployer une ressource avec un compte de service géré par l'utilisateur, le déployeur doit disposer de l'autorisation
iam.serviceAccounts.actAs
pour cela de service géré. Si vous avez créé le compte de service, accordera automatiquement cette autorisation. Sinon, quelqu'un qui a la bonne doit vous accorder cette autorisation sur le compte de service.Bonne pratique:À l'étape précédente, si vous avez créé un compte de service spécifiquement pour appeler le service utilisé par votre job Cloud Scheduler cibles, envisagez de suivre le principe du moindre privilège (les bonnes pratiques en liant le compte et l'autorisation de demandeur Google Cloud. Pour ce faire, vous pouvez utiliser la console Google Cloud ou gcloud CLI:
Console
1. Ouvrez la console Google Cloud.
2. Sélectionnez votre projet.
3. Accédez à la page correspondant au type de ressource que vous appelez. Pour Par exemple, si vous appelez un service Cloud Run, accédez à la page répertorie les services Cloud Run.
4. Cochez la case à gauche du service que vous souhaitez appeler. (Ne cliquez pas sur le service lui-même.)
5. 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, puis sur Autorisations.
6. Cliquez sur
Ajouter un compte principal.7. Sous Ajouter des comptes principaux, saisissez l'adresse e-mail du service. que vous avez créé.
8. Sous Attribuer des rôles, sélectionnez un rôle dans la liste déroulante. Suivez le principe du moindre privilège en choisissant le rôle qui inclut dont le compte principal a besoin.
9. Cliquez sur Enregistrer.
gcloud
Exécutez la commande
add-iam-policy-binding
:gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID \ --member=PRINCIPAL --role=ROLE
Remplacez :
RESOURCE_TYPE
: type de ressource de votre cible. Par exemple,run
pour une cible Cloud Run.RESOURCE_ID
: identifiant de votre cible. Pour (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 que votre cible service requis pour l'appel. Par exemple,roles/run.invoker
pour une cible Cloud Run ou Cloud Functions de deuxième génération.
Exemples :
Cible Cloud Run:la commande suivante accorde au Demandeur Cloud Run au compte de service
my-service-account@my-project.iam.gserviceaccount.com
pourmy-service
du service Cloud Run:gcloud run add-iam-policy-binding my-service \ --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \ --role=roles/run.invoker
Cible Cloud Functions:la commande suivante accorde au Rôle Demandeur Cloud Run requis par la deuxième génération Cloud Functions au compte de service
my-service-account@my-project.iam.gserviceaccount.com
pour la seconde la fonction Cloud Functions de générationmy-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
Si votre cible se situe en dehors de Google Cloud, le service destinataire doit valider manuellement le jeton.
Le compte de service Cloud Scheduler par défaut est automatiquement défini lorsque vous activez l'API Cloud Scheduler, sauf si vous l'avez activée avant 19 mars 2019, auquel cas vous devez ajoutez le rôle
Cloud Scheduler Service Agent
manuellement. C’est tellement qu'il peut générer des jetons d'en-tête au nom de votre compte de service client pour s'authentifier auprès de votre cible.Vous pouvez vérifier que le compte de service Cloud Scheduler par défaut est configuré dans votre projet et qu'il dispose du rôle
Cloud Scheduler Service Agent
qui lui est attribué par afficher l'accès actuel de votre projet. Notez que si vous utilisez la console Google Cloud pour afficher l'accès à votre projet, veillez à cocher la case Inclure les attributions de rôles fournies par Google.
Créer un job de planification avec authentification
Pour créer une tâche qui utilise l'authentification, vous devez ajouter le type de jeton.
et l'adresse e-mail qui identifie le compte de service client
Requête create-job
:
Console
- Spécifiez la fréquence "Toujours".
- Spécifiez HTTP comme type de cible.
- Ajoutez l'URL et la méthode HTTP comme d'habitude.
- Dans la liste Auth header (En-tête d'authentification), sélectionnez le type de jeton. Notez qu'OIDC
(jeton d'ID) est généralement utilisé, sauf pour les API Google hébergées sur
*.googleapis.com
, car ces API attendent un jeton d'accès OAuth. - Dans le champ Compte de service, spécifiez l'adresse e-mail du compte de service client.
- L'option Audience est facultative et limite le nombre de destinataires pour le jeton OIDC. généralement l'URL cible de l'offre d'emploi (sans paramètres d'URL). Si ce n'est pas le cas spécifiée, l'URL complète est utilisée par défaut en tant qu'audience (y compris paramètres de requête).
gcloud
gcloud scheduler jobs create http JOB_ID \ --schedule="FREQUENCY" --uri=URI \ --oidc-service-account-email=CLIENT_SERVICE_ACCOUNT_EMAIL
Remplacez les éléments suivants :
JOB_ID
: nom de la tâche. Il doit s'agir uniques dans le projet. Notez que vous ne pouvez pas réutiliser un nom de job dans un projet même si vous supprimez le job associé.FREQUENCY
: l'intervalle de la tâche correspond à la fréquence à laquelle doit s'exécuter, par exemple,every 3 hours
ouevery 10 mins
. La chaîne que vous fournissez ici peut être n'importe quelle chaîne compatible avec Crontab. Même si nous ne recommandons plus son utilisation, Syntaxe Cron d'App Engine est toujours pris en charge pour les jobs existants.)URI
: URL complète du point de terminaison.--oidc-service-account-email
ou--oauth-service-account-email
: définit le type de jeton. Notez qu'OIDC est généralement utilisé, sauf pour Les API Google hébergées sur*.googleapis.com
, car elles requièrent un protocole OAuth à partir d'un jeton d'accès.CLIENT_SERVICE_ACCOUNT_EMAIL
: adresse e-mail de le compte de service client.- D'autres paramètres facultatifs sont disponibles et décrits dans la Documentation de référence sur l'outil de ligne de commande gcloud
Choisir des types de jetons
Pour s'authentifier entre Cloud Scheduler et une cible HTTP,
Cloud Scheduler crée un jeton d'en-tête basé sur votre service client
identifié par son adresse e-mail et l'envoie à la cible via HTTPS.
Vous pouvez utiliser un jeton d'ID (OIDC)
ou un jeton OAuth (accès). OIDC est généralement utilisé, sauf pour les API Google
hébergé sur *.googleapis.com
, car ces API attendent un jeton OAuth.
Ajoutez manuellement le rôle Agent de service Cloud Scheduler à votre compte de service Cloud Scheduler
Cela n'est nécessaire que 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 d'agent de service Cloud Scheduler de votre service compte
Le compte de service Cloud Scheduler requiert Rôle d'agent de service Cloud Scheduler. Sans ce rôle, Les jobs Cloud Scheduler échouent. Vous pouvez ajouter Rôle d'agent de service Cloud Scheduler pour votre programme Cloud Scheduler compte de service depuis la console Google Cloud ou à l'aide du gcloud CLI:
Console
Dans la console Google Cloud, accédez à API Cloud Scheduler.
Accéder à l'API Cloud Scheduler
Si un champ Status (État) s'affiche et que l'état indique Enabled (Activé), continuer. Si ce n'est pas le cas, cliquez sur Activer.
Dans la console Google Cloud, accédez à la page Paramètres. .
Recherchez et copiez le numéro de votre projet.
Dans la console Google Cloud, accédez à IAM .
Cliquez sur Accorder l'accès. Le volet Accorder l'accès s'affiche.
Dans le champ Nouveaux comptes principaux, ajoutez une adresse e-mail au format suivant:
service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com
Remplacez
PROJECT_NUMBER
par votre Numéro de projet Google Cloud.Dans la liste Sélectionner un rôle, recherchez et sélectionnez Cloud Scheduler Agent de service.
Cliquez sur Enregistrer.
gcloud
Vérifiez que l'API Cloud Scheduler est activée pour votre projet:
gcloud services list --enabled \ --filter=cloudscheduler.googleapis.com
Si le résultat suivant s'affiche, l'API est activée:
NAME: cloudscheduler.googleapis.com TITLE: Cloud Scheduler API
Si ce n'est pas le cas (par exemple, si vous voyez
Listed 0 items.
), activez l'API:gcloud services enable cloudscheduler.googleapis.com
Recherchez le numéro de votre projet :
gcloud projects describe PROJECT_ID --format='table(projectNumber)'
Remplacez
PROJECT_ID
par l'ID du projet.Copiez le numéro.
Accordez au compte de service Cloud Scheduler le rôle
Cloud Scheduler Service Agent
:gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com \ --role roles/cloudscheduler.serviceAgent
Remplacez les éléments suivants :
PROJECT_ID
: ID de votre projet.PROJECT_NUMBER
: numéro du projet précédemment copié