为什么在列出 BQ 作业时使用来自 VM 实例的服务帐户

Why using service account from VM instance when listing BQ jobs

我正在尝试使用对 gcp 项目具有所有者访问权限的用户帐户列出许多项目的大查询中的作业 运行。我们正在使用 python API,并且所有这些过程都在 VM 实例上进行 运行。但是列出作业失败,因为 VM 实例的默认服务帐户没有其他项目的权限。

我无法理解的是,为什么在用户拥有所有访问权限的情况下使用服务帐户。我们不想创建具有所有者访问权限的服务帐户,所以无论如何我们只能使用我们自己的帐户而不使用服务帐户来列出 BQ 作业。

这是我用来列出职位的 python 代码:

from google.cloud import bigquery
import pandas as pd

client = bigquery.Client(project=<project_ID>)
job_list = client.list_jobs(project=<project_ID>,max_results=100000, state_filter='running', all_users=True)

我尝试使用以下命令为 json 文件提供凭据,但这也没有帮助。

client = bigquery.Client.from_service_account_json("0874ee00257b.json")

因为默认情况下,GCE 实例 (VM) 使用在创建时被授予访问权限的服务帐户(默认服务帐户)进行身份验证。该 VM 和服务帐户仅链接到创建它的项目,而不链接到用户。当您考虑时,这是有道理的。您不希望 VM(或实际上 GCP 上的任何服务)authenticated/tied 给单个用户。这将是不好的做法,例如那个用户离开公司并删除他们的帐户是什么。

So is there anyway that we can list the BQ jobs only with our own account and not using service account.

所以,回到你的实际问题。是的,但如果您打算部署它并且 productionize/operationalize.

,我不建议这样做
  1. 通过 SSH 连接到 VM
  2. 运行 gcloud auth login
  3. 按照提示操作

注意:当你这样做时,Google甚至会告诉你不推荐,你应该改用服务帐户:

这里有更多信息:https://cloud.google.com/sdk/docs/authorizing