通过云函数进行 BigQuery 跨项目访问
BigQuery cross project access via cloud functions
假设我有两个 GCP 项目,A 和 B。我是这两个项目的所有者。当我使用 UI 时,我可以从两个项目中查询项目 B 中的 BigQuery tables。但是当我尝试 运行 项目 A 中的云功能时,我 运行 遇到了问题,我试图从中访问项目 B 中的 BigQuery table。具体来说,我 运行 进入一个403 Access Denied: Table <>: User does not have permission to query table <>.
。我有点困惑为什么我不能访问 B 中的数据以及我需要做什么。在我的 Cloud Function 中,我所做的就是:
from google.cloud import bigquery
client = bigquery.Client()
query = cient.query(<my-query>)
res = query.result()
项目 A 中存在用于 运行 函数的服务帐户 - 如何授予它对项目 B 中 BigQuery 的编辑权限? (或者我还应该做什么?)。
基本上,用于运行该功能的服务帐户的 IAM 权限和角色存在问题。
您应该在您的服务帐户上定义角色 bigquery.admin,这样就可以了。
但是,就最佳实践而言,它可能不是合适的解决方案。下面的 link 提供了一些场景,其中包含最适合您的情况的角色示例。
https://cloud.google.com/bigquery/docs/access-control-examples
假设我有两个 GCP 项目,A 和 B。我是这两个项目的所有者。当我使用 UI 时,我可以从两个项目中查询项目 B 中的 BigQuery tables。但是当我尝试 运行 项目 A 中的云功能时,我 运行 遇到了问题,我试图从中访问项目 B 中的 BigQuery table。具体来说,我 运行 进入一个403 Access Denied: Table <>: User does not have permission to query table <>.
。我有点困惑为什么我不能访问 B 中的数据以及我需要做什么。在我的 Cloud Function 中,我所做的就是:
from google.cloud import bigquery
client = bigquery.Client()
query = cient.query(<my-query>)
res = query.result()
项目 A 中存在用于 运行 函数的服务帐户 - 如何授予它对项目 B 中 BigQuery 的编辑权限? (或者我还应该做什么?)。
基本上,用于运行该功能的服务帐户的 IAM 权限和角色存在问题。
您应该在您的服务帐户上定义角色 bigquery.admin,这样就可以了。
但是,就最佳实践而言,它可能不是合适的解决方案。下面的 link 提供了一些场景,其中包含最适合您的情况的角色示例。
https://cloud.google.com/bigquery/docs/access-control-examples