cloud-scheduler-permission-denied

Par divinevideo · divine-mobile

Corrige l'échec silencieux de Google Cloud Scheduler lors du déclenchement de jobs Cloud Run avec le code de statut 7 (PERMISSION_DENIED). À utiliser quand : (1) les jobs Cloud Run cessent de s'exécuter alors que les schedulers affichent ENABLED, (2) `gcloud scheduler jobs describe` affiche `lastAttemptTime` mais `status.code: 7`, (3) les jobs fonctionnaient auparavant mais se sont arrêtés après des modifications IAM ou des mises à jour du projet. Le compte de service du scheduler a besoin du rôle `roles/run.invoker` sur le projet.

npx skills add https://github.com/divinevideo/divine-mobile --skill cloud-scheduler-permission-denied

Erreur de permission Cloud Scheduler (Code 7)

Problème

Les jobs Cloud Scheduler échouent silencieusement à déclencher les jobs Cloud Run. Le scheduler s'affiche comme ENABLED, des tentatives sont effectuées (lastAttemptTime se met à jour), mais les jobs Cloud Run ne démarrent jamais. Le seul indicateur est status.code: 7 qui signifie PERMISSION_DENIED.

Contexte / Conditions de déclenchement

  • Les jobs Cloud Run s'exécutaient précédemment selon un calendrier mais se sont arrêtés
  • Le tableau de bord affiche les jobs comme « FAILED » ou « DONE » avec des horodatages anciens
  • gcloud scheduler jobs describe <name> affiche :
    lastAttemptTime: '2026-02-08T14:00:03.316530Z'
    state: ENABLED
    status:
      code: 7
  • Aucune erreur évidente dans Cloud Logging pour le scheduler

Solution

  1. Identifiez le compte de service du scheduler :

    gcloud scheduler jobs describe <scheduler-name> \
      --location=<region> \
      --project=<project> \
      --format="yaml(httpTarget.oauthToken.serviceAccountEmail)"
  2. Accordez le rôle run.invoker à ce compte de service :

    gcloud projects add-iam-policy-binding <project-id> \
      --member="serviceAccount:<service-account-email>" \
      --role="roles/run.invoker"
  3. Testez en déclenchant manuellement le scheduler :

    gcloud scheduler jobs run <scheduler-name> \
      --location=<region> \
      --project=<project>
  4. Vérifiez que le job Cloud Run a démarré :

    gcloud run jobs executions list \
      --region=<region> \
      --project=<project> \
      --limit=5

Vérification

Après avoir accordé les permissions et déclenché :

  • status.code ne devrait plus être 7 à la prochaine tentative
  • Une nouvelle exécution de job Cloud Run devrait apparaître dans la liste des exécutions
  • L'exécution devrait afficher le statut RUNNING

Exemple

# Vérifiez le statut du scheduler - notez code: 7
gcloud scheduler jobs describe profile-crawler-schedule \
  --location=us-central1 \
  --project=my-project

# Accordez la permission
gcloud projects add-iam-policy-binding my-project \
  --member="serviceAccount:my-scheduler@my-project.iam.gserviceaccount.com" \
  --role="roles/run.invoker"

# Testez
gcloud scheduler jobs run profile-crawler-schedule \
  --location=us-central1 \
  --project=my-project

Notes

  • Le code de statut 7 est PERMISSION_DENIED de gRPC - non documenté de façon visible pour Cloud Scheduler
  • Cela se produit couramment après :
    • La création de nouveaux comptes de service
    • La migration de projets
    • Les mises à jour de politique IAM qui suppriment les permissions héritées
    • L'utilisation d'un compte de service personnalisé au lieu du compte par défaut
  • Le scheduler continue à tenter (et échouer) silencieusement - pas d'alertes par défaut
  • Envisagez d'ajouter des alertes Cloud Monitoring pour les échecs du scheduler

Références

Skills similaires