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

时间:2019-02-07 15:57:20

标签: google-cloud-platform google-bigquery google-compute-engine service-accounts

我正在尝试使用对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")

1 个答案:

答案 0 :(得分:1)

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

  

无论如何,我们只能使用自己的帐户而不使用服务帐户列出BQ作业。

所以,回到您的实际问题。是的,但是如果您打算将其部署并进行生产/运营,则我不建议您这样做。

  1. SSH进入虚拟机
  2. 运行gcloud auth login
  3. 按照提示

注意:执行此操作时,Google甚至会告诉您不建议这样做,而应该使用服务帐户:

enter image description here

此处有更多信息:https://cloud.google.com/sdk/docs/authorizing