14 votes

Pourquoi est-ce que je vois cette erreur : 'ERROR : (gcloud.run.deploy) PERMISSION_DENIED : The caller does not have permission' pendant le déploiement du conteneur ?

Supposons que j'ai un cloudbuild.yaml comme celui ci-dessous. Supposons également que je puisse exécuter et déployer manuellement le conteneur en question en utilisant gcloud pour les fonctionnalités séparées (construction et fonctionnement).

Lors du déploiement, la troisième étape donne lieu à l'erreur suivante ERROR: (gcloud.run.deploy) PERMISSION_DENIED: The caller does not have permission

steps:
# Build the container image
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-t', 'gcr.io/[PROJECT_ID]/[IMAGE]:$COMMIT_SHA', '.']
# Push the image to Container Registry
- name: 'gcr.io/cloud-builders/docker'
  args: ['push', 'gcr.io/[PROJECT_ID]/[IMAGE]:$COMMIT_SHA']
# Deploy image to Cloud Run
- name: 'gcr.io/cloud-builders/gcloud'
  args:
  - 'run'
  - 'deploy'
  - '[SERVICE_NAME]'
  - '--image'
  - 'gcr.io/[PROJECT_ID]/[IMAGE]:$COMMIT_SHA'
  - '--region'
  - '[REGION]'
  - '--platform'
  - 'managed'
images:
- gcr.io/[PROJECT_ID]/[IMAGE]

31voto

derekbaker783 Points 2159

Voir les documents à l'adresse suivante :

https://cloud.google.com/cloud-build/docs/deploying-builds/deploy-cloud-run#before_you_begin

Vous devez suivre les étapes disponibles ici :

  1. Accordez le rôle d'administrateur de Cloud Run au compte de service Cloud Build :

    • Dans la console Cloud, accédez à la page Paramètres de construction du Cloud :

    • Ouvrez la page des paramètres

    • Localisez la ligne avec le rôle Cloud Run Admin et définissez son statut sur ENABLED.

    • Dans la fenêtre pop-up Additional steps may be required, cliquez sur Skip.

  2. Accordez le rôle d'utilisateur de compte de service IAM au compte de service Cloud Build sur le compte de service d'exécution Cloud Run :

    • Dans la Console Cloud, accédez à la page Comptes de service :

    • Ouvrez la page Comptes de service

    • Dans la liste des membres, localisez et sélectionnez [PROJECT_NUMBER]-compute@developer.gserviceaccount.com. Il s'agit du compte de service d'exécution Cloud Run.

    • Cliquez sur SHOW INFO PANEL dans le coin supérieur droit.

    • Dans le panneau Permissions, cliquez sur le bouton Ajouter un membre.

    • Dans le champ Nouveau membre, saisissez l'adresse électronique du compte de service Cloud Build. Celle-ci est de la forme [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com. Remarque : L'adresse électronique du compte de service Cloud Build est différente de celle du compte de service d'exécution Cloud Run.

    • Dans la liste déroulante Rôle, sélectionnez Comptes de service, puis Utilisateur de compte de service.

    • Cliquez sur Enregistrer.


Dans mon cas, le compte @cloudbuild n'apparaissait pas dans les suggestions IAM à l'étape 2, mais si vous effectuez l'étape 1, et exécutez votre build, le message d'erreur se transformera en quelque chose de similaire au message expurgé ci-dessous, qui contient le compte dont vous avez besoin.

ERROR: (gcloud.run.deploy) User [<SOME_NUMBER_HERE>@cloudbuild.gserviceaccount.com] does not have permission to access namespace [<YOUR_PROJECT_ID>] (or it may not exist): Permission 'iam.serviceaccounts.actAs' denied on service account <SOME_OTHER_NUMBER_HERE>-compute@developer.gserviceaccount.com (or it may not exist).

4voto

Joe Edgar Points 447

Pour faire cela via le CLI gcloud :

gcloud run services add-iam-policy-binding [CLOUD_RUN_SERVICE_NAME] \ 
  --member=serviceAccount:[CLOUD BUILD SERVICE ACCOUNT EMAIL] \
  --role=roles/run.admin \
  --project=$PROJECT \
  --region=$REGION
gcloud iam service-accounts add-iam-policy-binding [SERVICE ACCOUNT THAT CLOUD RUN RUNS AS] \
  --member=serviceAccount:[CLOUD BUILD SERVICE ACCOUNT] \
  --role roles/iam.serviceAccountUser
  --project=$PROJECT \
  --region=$REGION

0voto

Pavul Zavala Points 171

Au cas où vous vérifiez vos comptes/rôles de service et que tout semble correct, vous pouvez également initialiser le sdk gcloud, dans mon cas, j'ai eu affaire à cette erreur parce qu'après avoir installé le sdk gcloud et m'être connecté, je ne l'ai jamais initialisé, donc les options comme le projet, le compte/le compte de service, etc. n'étaient pas correctement configurées après avoir exécuté gcloud init et défini toutes les options, il a commencé à fonctionner.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X