Учетная запись службы не может получить доступ к результатам запроса BQ, инициированным AppEng - PullRequest
0 голосов
/ 26 августа 2018

Мои облачные функции, CF (с использованием учетных данных учетной записи службы, SERVICE-ACCOUNT@PROJECT-ID.iam.gserviceaccount.com) не может получить результаты запроса BQ, когда запрос инициируется в приложении, запущенном в AppEngine (с использованием учетных данных учетной записи службы App Engine по умолчанию, PROJECT-ID@appspot.gserviceaccount.com)

Файл "/env/local/lib/python3.7/site-packages/google/cloud/_http.py", строка 293, в api_request поднять exceptions.from_http_response (response) google.api_core.exceptions. Запрещено: 403 GET https://www.googleapis.com/bigquery/v2/projects/[PROJECT]/queries/[BQ-JOB-ID]?maxResults=0: Доступ запрещен: набор данных [TEMP-DATASET-ID-STORING-QUERY-RESULTS]: пользователь [SERVICE-ACCOUNT-EMAIL] не имеет разрешения на доступ к результатам работы другого пользователя.`` `

Все это состоит из 2 частей (все с использованием клиентских библиотек PY3.x)

ЧАСТЬ A : работает в AppEng Flexible env.(Py3.x) инициирует запрос BQ job.insert.Запрос заканчивается публикацией этого job_id в теме Pubsub.

ЧАСТЬ B : Облачная функция (среда выполнения python37, запускаемая по этому событию Pubsub):

  • STEP1 : получает этот запрос job_idв PubsubMessage
  • STEP2 : проверяет состояние запроса до ВЫПОЛНЕНО, job.done
  • STEP3 : когда DONE извлекает результаты запроса
  • STEP4 : после получения результата запроса выполните окончательную обработку (по крайней мере, это намерение)

На STEP4 я получаю вышеупомянутую ошибку (полученоrrom Stackdriver Logging)

Я подтверждаю, хотя

  • владелец задания PROJECT-ID@appspot.gserviceaccount.com
  • и, потребитель результатов запроса SERVICE-ACCOUNT@PROJECT-ID.iam.gserviceaccount.com

отличаются, но оба письма электронной почты учетной записи Google имеют разрешения уровня редактирования проекта, и, таким образом, ожидается, что CF сможет получить доступ к результатам задания!Более того, когда CF (с использованием учетных данных учетной записи службы) может передать STEP2 (job.get, опрашивая состояние задания до его завершения), только получение результата запроса (STEP4) приводит к ошибке

Anyруководство будет весьма заметно!

1 Ответ

0 голосов
/ 27 августа 2018

Если вы выполняете задание и используете результаты с разными удостоверениями, сохраните результаты в именованной таблице назначения.Вы можете настроить назначенный набор данных с коротким TTL, чтобы таблицы автоматически удалялись после этого времени.Кэшированные / анонимные результаты по умолчанию ограничены создателем запроса.

Пример построения запроса с таблицей назначения можно найти в документации BigQuery .

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