使用项目 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 上的另一个服务帐户吗?
我要先说明一下:
- 我注意到您将服务帐户存储在 项目 2 中,您如何将其传递给您的云功能?您是否使用某些 gcs 客户端读取服务帐户的内容,然后将其设置为
GOOGLE_APPLICATIONS_CREDENTIALS
环境变量?
- 如果您已经创建了一个服务帐户并从 项目 1 下载了密钥,那么您只需要确保您可以通过获得必要的访问权限来查询数据,例如 BigQuery 查看器,如果你只需要查询数据。通过凭据后,您可以继续之前提到的步骤。
感谢您的帮助。我们能够让它发挥作用。
如下:
在项目 2 中创建服务帐户
在项目 1 中,将新成员添加为项目 2 服务帐户 ID 的新 IAM 角色,并授予对项目 1 的 BigQuery 的访问权限
在项目2中,添加服务账号ID来执行云函数
在 Cloud Function 中,只需像 client = bigquery.Client(project='Project 1) 一样引用项目 1,我们就可以从 BigQuery 中检索数据。 –
我在 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 上的另一个服务帐户吗?
我要先说明一下:
- 我注意到您将服务帐户存储在 项目 2 中,您如何将其传递给您的云功能?您是否使用某些 gcs 客户端读取服务帐户的内容,然后将其设置为
GOOGLE_APPLICATIONS_CREDENTIALS
环境变量? - 如果您已经创建了一个服务帐户并从 项目 1 下载了密钥,那么您只需要确保您可以通过获得必要的访问权限来查询数据,例如 BigQuery 查看器,如果你只需要查询数据。通过凭据后,您可以继续之前提到的步骤。
感谢您的帮助。我们能够让它发挥作用。
如下:
在项目 2 中创建服务帐户
在项目 1 中,将新成员添加为项目 2 服务帐户 ID 的新 IAM 角色,并授予对项目 1 的 BigQuery 的访问权限
在项目2中,添加服务账号ID来执行云函数
在 Cloud Function 中,只需像 client = bigquery.Client(project='Project 1) 一样引用项目 1,我们就可以从 BigQuery 中检索数据。 –