使用项目1的服务帐户Json密钥从项目2中的Python云函数访问项目1的BigQuery数据存储

使用项目1的服务帐户Json密钥从项目2中的Python云函数访问项目1的BigQuery数据存储,json,google-bigquery,google-cloud-functions,credentials,Json,Google Bigquery,Google Cloud Functions,Credentials,我在GCP有两个不同的项目 我需要访问Project-1的BigQuery数据库。已创建所需的服务帐户Json密钥 在Project-2中编写了一个Python云函数。我需要访问Project-1的BigQuery数据存储。据我所知,我需要从服务帐户json密钥文件(从Project-1)检索凭据。已将服务帐户json密钥文件上传到Project-2的bucket存储中 我正在尝试从此Json密钥文件检索凭据。尝试了以下不同的方法: 凭据=服务\帐户。凭据。来自\服务\帐户\文件(文件名,作用域

我在GCP有两个不同的项目

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

在Project-2中编写了一个Python云函数。我需要访问Project-1的BigQuery数据存储。据我所知,我需要从服务帐户json密钥文件(从Project-1)检索凭据。已将服务帐户json密钥文件上传到Project-2的bucket存储中

我正在尝试从此Json密钥文件检索凭据。尝试了以下不同的方法:
凭据=服务\帐户。凭据。来自\服务\帐户\文件(文件名,作用域=“”) 或 client=bigquery.client.from\u service\u account\u json(文件名) 或 client=bigquery.client.from_service_account_文件(文件名) 或 凭据=服务帐户。凭据。来自服务帐户信息(服务帐户信息)

而我不断收到错误,

[Errno 2]没有这样的文件或目录:filename 我尝试将文件名作为bucket Json文件的URL或LinkURL或Public URL

请告知我们如何从Project-2的云功能访问Project-1的BigQuery,我确实拥有Project-1的服务帐户Json密钥。

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

#client = bigquery.Client.from_service_account_json(filetest)

从项目2中的Python云函数使用项目1的服务帐户Json键,服务帐户具有类似用户帐户的邮件地址

因此,您可以向user@project2.iam.gserviceaccount.com关于项目1数据集/表格?
您真的需要在项目2上使用另一个服务帐户吗?

服务帐户的邮件地址与用户帐户类似

因此,您可以向user@project2.iam.gserviceaccount.com关于项目1数据集/表格?
您真的需要另一个关于项目2的服务帐户吗?

我需要首先澄清:

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

  • 我首先要澄清:

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

  • 谢谢你的帮助。我们能够使它工作

    详情如下:

  • 在项目2中创建服务帐户

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

  • 在项目2中,添加服务帐户ID以执行云功能

  • 在云函数中,只需参考项目1,如client=bigquery.client(Project='Project 1),我们就可以从bigquery检索数据了


  • 谢谢你的帮助。我们能够使它工作

    详情如下:

  • 在项目2中创建服务帐户

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

  • 在项目2中,添加服务帐户ID以执行云功能

  • 在云函数中,只需参考项目1,如client=bigquery.client(Project='Project 1),我们就可以从bigquery检索数据了


  • 无法在Project-2的服务帐户中添加对Project-1数据表的访问权限。所以这可能行不通。我们需要在Project-2的云函数中找到如何访问Project-1的任何服务帐户json密钥。请推荐。它对我有用。我在ProjectA有一个服务帐户。我在ProjectB中的数据集和表格。我还对另一个ProjectC运行查询。(用于向ProjectC计费查询成本)您不能在Project-2的服务帐户中添加对Project-1数据表的访问权限。所以这可能行不通。我们需要在Project-2的云函数中找到如何访问Project-1的任何服务帐户json密钥。请推荐。它对我有用。我在ProjectA有一个服务帐户。我在ProjectB中的数据集和表格。我还对另一个ProjectC运行查询。(对于ProjectC目的的账单查询成本)嘿@RakeshGupta,如果这对您有帮助,请回答您自己的问题并将其标记为已解决。这允许其他有相同问题的人直接看到解决方案,而不是在评论中。其他人也可以投票支持这个答案。。。谢谢嘿@RakeshGupta,如果这对你有帮助,那么请回答你自己的问题并标记它已解决。这允许其他有相同问题的人直接看到解决方案,而不是在评论中。其他人也可以投票支持这个答案。。。谢谢