web-dev-qa-db-fra.com

Autorisation refusée lors du déploiement de l'application gcloud à l'aide du SDK Google Cloud

Il est incroyablement difficile de déployer une application sur Google App Engine à l'aide du SDK Google Cloud.

J'avais essayé les 2 commandes ci-dessous

C:\Users\yccheok\Desktop\jstock-Android-appengine>gcloud config set project jstock-Android
Updated property [core/project].

C:\Users\yccheok\Desktop\jstock-Android-appengine>gcloud app deploy app.yaml --log-http --verbosity=debug
DEBUG: Running [gcloud.app.deploy] with arguments: [--log-http: "true", --verbosity: "debug", DEPLOYABLES:1: "['app.yaml']"]
DEBUG: No staging command found for runtime [python27] and environment [STANDARD].
DEBUG: API endpoint: [https://appengine.googleapis.com/], API version: [v1]
=======================
==== request start ====
uri: https://appengine.googleapis.com/v1/apps/jstock-android?alt=json
method: GET
== headers start ==
Authorization: Bearer ya29.GlxEBb1XVP1JK93-ARiaN_ZgiMbvZmw5KWfvJVfibDJ4FK_ZaMRoU1jVDTiWzsY606GSduJKJd9Nm8zA-_Iql5mGn4AMk4QVl8mPRycfekeZnOOHtbUvpkBMgOLOQA
accept: application/json
accept-encoding: gzip, deflate
content-length: 0
user-agent: google-cloud-sdk x_Tw5K8nnjoRAqULM9PFAC2b gcloud/184.0.0 command/gcloud.app.deploy invocation-id/c9ae232d33b346d787b95a36e28c38c0 environment/None environment-version/None interactive/True python/2.7.13 (Windows NT 10.0.16299)
== headers end ==
== body start ==

== body end ==
==== request end ====
---- response start ----
-- headers start --
-content-encoding: gzip
alt-svc: hq=":443"; ma=2592000; quic=51303431; quic=51303339; quic=51303338; quic=51303337; quic=51303335,quic=":443"; ma=2592000; v="41,39,38,37,35"
cache-control: private
content-length: 335
content-type: application/json; charset=UTF-8
date: Tue, 16 Jan 2018 19:16:21 GMT
server: ESF
status: 403
transfer-encoding: chunked
vary: Origin, X-Origin, Referer
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block
-- headers end --
-- body start --
{
  "error": {
    "code": 403,
    "message": "Operation not allowed",
    "status": "PERMISSION_DENIED",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.ResourceInfo",
        "resourceType": "gae.api",
        "description": "The \"appengine.applications.get\" permission is required."
      }
    ]
  }
}

-- body end --
total round trip time (request+response): 1.796 secs
---- response end ----
----------------------
DEBUG: (gcloud.app.deploy) Permissions error fetching application [apps/jstock-Android]. Please make sure you are using the correct project ID and that you have permission to view applications on the project.
Traceback (most recent call last):
  File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\lib\googlecloudsdk\calliope\cli.py", line 797, in Execute
    resources = calliope_command.Run(cli=self, args=args)
  File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\lib\googlecloudsdk\calliope\backend.py", line 757, in Run
    resources = command_instance.Run(args)
  File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\lib\surface\app\deploy.py", line 65, in Run
    parallel_build=False)
  File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\lib\googlecloudsdk\command_lib\app\deploy_util.py", line 543, in RunDeploy
    app = _PossiblyCreateApp(api_client, project)
  File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\lib\googlecloudsdk\command_lib\app\deploy_util.py", line 703, in _PossiblyCreateApp
    api_client._FormatApp())))  # pylint: disable=protected-access
HttpException: Permissions error fetching application [apps/jstock-Android]. Please make sure you are using the correct project ID and that you have permission to view applications on the project.
ERROR: (gcloud.app.deploy) Permissions error fetching application [apps/jstock-Android]. Please make sure you are using the correct project ID and that you have permission to view applications on the project.

C:\Users\yccheok\Desktop\jstock-Android-appengine>

Ensuite, je suis passé par https://cloud.google.com/appengine/docs/admin-api/accessing-the-api , il a mentionné que je devais utiliser API d'administration . Je le fais donc étape par étape avec soin.

Étape 1

enter image description here

Étape 2

enter image description here

Il mentionne que l'API Admin est activée. Maintenant, j'ai besoin d'informations d'identification.

Étape 3

enter image description here

Étape 4

enter image description here

D'ACCORD. Maintenant, ils mentionnent que je n'ai pas besoin de créer de nouvelles informations d'identification. Je peux utiliser les informations d'identification par défaut de l'application ?!

Étape 5

Je suis donc allé à https://developers.google.com/identity/protocols/application-default-credentials?hl=en_GB . J'apprends que je dois courir

C:\Users\yccheok\Desktop\jstock-Android-appengine>gcloud auth application-default login
Your browser has been opened to visit:

    https://accounts.google.com/o/oauth2/auth?redirect_uri=http%3A%2F%2Flocalhost%3A8085%2F&Prompt=select_account&response_type=code&client_id=764086051850-6qr4p6gpi6hn506pt8ejuq83di341hur.apps.googleusercontent.com&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform&access_type=offline



Credentials saved to file: [C:\Users\yccheok\AppData\Roaming\gcloud\application_default_credentials.json]

These credentials will be used by any library that requests
Application Default Credentials.

Étape 6

enter image description here

Étape 7

enter image description here


Pourtant, après avoir terminé les 7 étapes ci-dessus, j'obtiens toujours le même message d'erreur exact, lorsque j'essaie d'exécuter

gcloud app deploy app.yaml --log-http --verbosity=debug

Quelqu'un peut-il me faire savoir quelle étape il me faut encore pour déployer mon Python sur Google App Engine, à l'aide du SDK Google Cloud?

8
Cheok Yan Cheng

L'API d'administration est destinée au déploiement par programme de l'application, pas au déploiement à l'aide de gcloud app deploy, pour lequel vous n'avez même pas besoin de l'API Admin activée pour votre application.

De Déploiement d'une Python App :

Pour déployer vos applications par programme, utilisez l'API Admin .

Avant que tu commences

Avant de pouvoir déployer votre application:

(mais je peux voir comment ce qui précède pourrait être mal interprété comme une invitation à utiliser l'API Admin)

Très probablement, le compte réellement utilisé par gcloud app deploy est manquant ou ne dispose pas des autorisations requises.

Vous pouvez vérifier le compte utilisé avec gcloud auth list. Dans mon cas, le compte est mon adresse e-mail, pas un compte de service (je ne sais pas si un compte de service peut être utilisé).

Utilisation gcloud auth login (et peut-être gcloud auth revoke) si vous avez besoin d'un autre compte.

Et vous pouvez vérifier les privilèges du compte (le cas échéant) sur le projet/application sur la page IAM .

10
Dan Cornilescu

Une remarque supplémentaire à ce sujet: lorsque vous activez l'API App Engine et l'API du générateur de cloud, assurez-vous que le compte de service de génération de cloud a également accès au projet.

J'ai rencontré ce problème après avoir activé les API correctes.

C'était en utilisant un déclencheur de build. J'ai pu déployer localement à partir d'une ligne de commande car j'étais authentifié en tant que moi-même. Cependant, si vous utilisez un déclencheur de build, il utilisera le compte de service de build, qui doit avoir accès.

J'espère que cela t'aides.

6
John Mann

J'ai eu ce problème. Dans mon cas, cela a été résolu en définissant le projet à l'aide de l'ID du projet, plutôt que du nom du projet. Voir cette réponse

gcloud app deploy ERROR: erreur d'autorisation lors de la récupération de l'application [apps/<PROJECT_NAME>]

3
claytronicon