Проблема с разрешениями GCP-API Python: compute.instances.list - PullRequest
0 голосов
/ 27 мая 2019

У меня 5-строчный скрипт Python, который не работает.

GCP указывает на проблему с проблемой разрешений GCP-API.Я не уверен, хотя он говорит мне правду.

Вот синтаксис Python:

import googleapiclient.discovery
compute   = googleapiclient.discovery.build('compute', 'v1')
project_s = 'shining-sol-241621'
zone_s    = 'us-central1-a'

result = compute.instances().list(project=project_s, zone=zone_s).execute()

Приведенный выше синтаксис зависит от установки переменной env:

export GOOGLE_APPLICATION_CREDENTIALS=$HOME/secret.json

Когда я запускаю синтаксис Python, я вижу:

$ python3
Python 3.5.2 (default, Nov 12 2018, 13:43:14) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import googleapiclient.discovery
>>> compute   = googleapiclient.discovery.build('compute', 'v1')
>>> project_s = 'shining-sol-241621'
>>> zone_s    = 'us-central1-a'
>>> result = compute.instances().list(project=project_s, zone=zone_s).execute()

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.5/dist-packages/googleapiclient/_helpers.py", line 130, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/googleapiclient/http.py", line 851, in execute
    raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/compute/v1/projects/shining-sol-241621/zones/us-central1-a/instances?alt=json returned "Required 'compute.instances.list' permission for 'projects/shining-sol-241621'">
>>> >>>

Выше я вижу это сообщение об ошибке:

«Требуется» разрешение compute.instances.list для проектов/ shining-sol-241621 '"

По этому URL:

https://console.cloud.google.com/iam-admin/iam?project=shining-sol-241621

Когда я смотрю разрешения учетной записи службы, прикрепленные к моему файлу secret.json, явижу, что я прикрепил эти разрешения к учетной записи:

  • Compute Admin
  • Compute Instance Admin (бета)
  • Compute Instance Admin (v1)
  • Compute Viewer
  • Администратор безопасности
  • Владелец

Когда я прикрепил разрешения к служебной учетной записи, я не увидел доступных разрешений, похожих на: 'compute.instances.list '

Я заметил, что разрешение Compute Admin имеет следующее описание:

"Полный контроль надвсе ресурсы Compute Engine "

Это описание подсказывает мне, что разрешение должно быть в состоянии сделать: 'compute.instances.list'

Я подозреваю, что GCP сообщает мне, что у меня естьпроблема с разрешениями, но проблема в другом месте.

Исходя из моего описания, какие бы хорошие вопросы можно было задать, чтобы преодолеть это плохое поведение API?

1 Ответ

1 голос
/ 27 мая 2019

Мне удалось решить эту проблему после того, как я предположил, что сервер GCP кэширует неверную информацию.

Я создал учетную запись службы с именем, которое раньше не использовал.

Я дал ему только одно разрешение: Project - Владелец

Я попросил его создать JSON-ключ.

Я скопировал ключ в $ HOME / secret.json

Iвыдал команду оболочки:

export GOOGLE_APPLICATION_CREDENTIALS=$HOME/secret.json

Я попробовал свои 6 строк Python:

$ python3
Python 3.5.2 (default, Nov 12 2018, 13:43:14) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
>>> 
>>> import googleapiclient.discovery
>>> compute   = googleapiclient.discovery.build('compute', 'v1')
>>> project_s = 'shining-sol-241621'
>>> zone_s    = 'us-central1-a'
>>> result = compute.instances().list(project=project_s, zone=zone_s).execute()
>>> result['items'][0]['status']
'RUNNING'
>>> 
>>> 

Как видите, это сработало.Ура!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...