Мои облачные функции, 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руководство будет весьма заметно!