Установить политику IAM работает на локальном компьютере, но не в экземпляре GCE - PullRequest
0 голосов
/ 05 июня 2018

Следующие строки из моего приложения Python выполняются без проблем на моем локальном компьютере.

import googleapiclient.discovery
project_id = 'some-project-id'
resource_manager = googleapiclient.discovery.build('cloudresourcemanager', 'v1')
iam_policy_request = resource_manager.projects().getIamPolicy(resource=project_id, body={})
iam_policy_response = iam_policy_request.execute(num_retries=3)
new_policy = dict()
new_policy['policy'] = iam_policy_response
del new_policy['policy']['version']
iam_policy_update_request = resourcemanager.projects().setIamPolicy(resource=project_id, body=new_policy)
update_result = iam_policy_update_request.execute(num_retries=3)

Когда я запускаю приложение в экземпляре GCE, а точнее из контейнера Docker внутри экземпляра GCE, Я получаю исключение:

URL being requested: POST https://cloudresourcemanager.googleapis.com/v1/projects/some-project-id:setIamPolicy?alt=json
Traceback (most recent call last):
  File "/env/lib/python3.5/site-packages/google/api_core/grpc_helpers.py", line 54, in error_remapped_callable
    return callable_(*args, **kwargs)
  File "/env/lib/python3.5/site-packages/grpc/_channel.py", line 487, in __call__
    return _end_unary_response_blocking(state, call, False, deadline)
  File "/env/lib/python3.5/site-packages/grpc/_channel.py", line 437, in _end_unary_response_blocking
    raise _Rendezvous(state, None, None, deadline)
grpc._channel._Rendezvous: <_Rendezvous of RPC that terminated with (StatusCode.PERMISSION_DENIED, User not authorized to perform this action.)>

т.е. ошибка авторизации.Как ни странно, когда я открываю сеанс терминала Python внутри экземпляра GCE и построчно запускаю код Python, я не получаю исключения.Исключение выдается только тогда, когда код работает как часть приложения.

Я использую служебную учетную запись внутри экземпляра GCE, в отличие от моей обычной учетной записи на локальном компьютере.Но я не думаю, что это проблема, так как я могу запускать строки кода одну за другой внутри экземпляра, все еще полагаясь на роли учетной записи службы.

Я хотел бы иметь возможность запуститьприложение без исключения в контейнере Docker внутри GCE.Я чувствую, что что-то упустил, но не могу понять, что это за недостающий кусок.

1 Ответ

0 голосов
/ 14 июня 2018

Что касается вашей проблемы, то она кажется проблемой аутентификации, потому что ваше приложение не аутентифицировано должным образом:

1- Сначала запустите эту команду, чтобы приложение временно использовало ваши собственные учетные данные: gcloud beta auth application-логин по умолчанию

выходные данные должны быть такими:

Учетные данные сохраняются в файле: $ SOME_PATH / application_default_credentials.json

2 - Затем вы установили среду GOOGLE_APPLICATION_CREDENTIALS переменная к пути к файлу ключа:

export GOOGLE_APPLICATION_CREDENTIALS = $ SOME_PATH / application_default_credentials.json

Попробуйте запустить приложение после этого.

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