使用项目 1 的服务帐户 Json 密钥从项目 2 中的 Python Cloud Function 访问项目 1 的 BigQuery DataStore

Access BigQuery DataStore of Project1 from Python Cloud Function in Project 2 using Service Account Json Key of Project 1

我在 GCP 中有 2 个不同的项目。

我需要访问 Project-1 的 BigQuery DataStore。已创建所需的服务帐户 Json 密钥。

已在 Project-2 中编写了 Python Cloud Function。我需要访问 Project-1 的 BigQuery 数据存储。据我了解,我需要从服务帐户 json 密钥文件(来自 Project-1)中检索凭据。已将服务帐户 json 密钥文件上传到 Project-2 的存储桶中。

我正在尝试从此 Json 密钥文件中检索凭据。尝试了以下不同的方法:
credentials = service_account.Credentials.from_service_account_file(filename,scopes='https://www.googleapis.com/auth/cloud-platform') 或者 客户端 = bigquery.Client.from_service_account_json(文件名) 或者 客户端 = bigquery.Client.from_service_account_file(文件名) 或者 凭证 = service_account.Credentials.from_service_account_info(service_account_info)

而且我不断收到错误,

[Errno 2] 没有这样的文件或目录:文件名

我尝试将文件名作为存储桶URL或链接URL或PublicURL 52=] 文件.

请告知我们如何从 Project-2 的 Cloud Function 访问 Project-1 的 BigQuery,我确实有来自 Project-1 的服务帐户 Json 密钥。

client = bigquery.Client(credentials=credentials,project=credentials.project_id,)

#client = bigquery.Client.from_service_account_json(filetest)

来自 Python 项目 2 中的 Cloud Function 使用服务帐户 Json 项目 1 的密钥

服务帐户与用户帐户一样具有邮件地址。

所以您可以在 project1 dataset/tables 上授予 user@project2.iam.gserviceaccount.com 所需的权限? 您真的需要 project2 上的另一个服务帐户吗?

我要先说明一下:

  1. 我注意到您将服务帐户存储在 项目 2 中,您如何将其传递给您的云功能?您是否使用某些 gcs 客户端读取服务帐户的内容,然后将其设置为 GOOGLE_APPLICATIONS_CREDENTIALS 环境变量?
  2. 如果您已经创建了一个服务帐户并从 项目 1 下载了密钥,那么您只需要确保您可以通过获得必要的访问权限来查询数据,例如 BigQuery 查看器,如果你只需要查询数据。通过凭据后,您可以继续之前提到的步骤。

感谢您的帮助。我们能够让它发挥作用。

如下:

  1. 在项目 2 中创建服务帐户

  2. 在项目 1 中,将新成员添加为项目 2 服务帐户 ID 的新 IAM 角色,并授予对项目 1 的 BigQuery 的访问权限

  3. 在项目2中,添加服务账号ID来执行云函数

  4. 在 Cloud Function 中,只需像 client = bigquery.Client(project='Project 1) 一样引用项目 1,我们就可以从 BigQuery 中检索数据。 –