【发布时间】:2019-01-31 22:12:37
【问题描述】:
当在 AppEngine 上运行的应用程序(使用 App Engine 默认服务帐户凭据,PROJECT-ID@appspot.gserviceaccount.com)上启动查询时,我的云功能 CF(使用服务帐户凭据,SERVICE-ACCOUNT@PROJECT-ID.iam.gserviceaccount.com)无法获取 BQ 查询结果
文件“/env/local/lib/python3.7/site-packages/google/cloud/_http.py”,第 293 行,在 api_request 中引发 exceptions.from_http_response(response) google.api_core.exceptions.Forbidden: 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:在
PubsubMessage接收这个查询job_id -
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)会引发错误
任何指导都将受到高度评价!
【问题讨论】:
标签: python-3.x google-app-engine google-cloud-platform google-bigquery google-cloud-functions