【问题标题】:Google Cloud from_service_account_json env variables谷歌云 from_service_account_json 环境变量
【发布时间】:2019-10-21 00:39:49
【问题描述】:

我正在开发一个 Python Cloud Function,它将数据推送到 Google Cloud Storage 存储桶触发器上的 BigQuery。

希望避免将 JSON 文件推送到 GCS 并将值保存在 Cloud Function 环境变量中。但是,不确定如何使用它们进行身份验证。 The documentation says to use the file path string.

有没有办法做到这一点?这还重要吗?

目前正在使用文件路径并且可以正常工作,但认为使用环境变量会更安全。

【问题讨论】:

  • 最好的方法是使用 --service-account 选项并且根本不分发凭据。我为 Cloud Run 写了一篇关于这个主题的文章。函数几乎完全相同。 jhanley.com/google-cloud-run-identity

标签: python google-cloud-platform google-bigquery google-cloud-functions google-cloud-storage


【解决方案1】:

如果存储桶、Cloud Function 和 BigQuery 数据库都在同一个项目中,则根本不需要使用服务帐号凭据,它会隐式地为该项目使用同一个服务帐号。

如果您确实需要使用服务帐户来跨不同的产品工作,那么明确指定带有 --service-account 标志的服务帐户将是理想的。详情请见Understanding service accounts

【讨论】:

  • 如果我使用 bigquery.Client(),它会报错。即使他们都在同一个项目中。
  • 错误是什么?你能分享一些代码来展示你是如何创建客户端的,以及完整的错误消息吗?
  • 好吧,我唯一的连接代码就是这个; bigquery_client = bigquery.Client() 在我之前... bigquery_client = bigquery.Client.from_service_account_json('key.json') 这行得通。但是,我认为如果在同一个项目中,则不需要 json 文件。这是错误; google.auth.exceptions.DefaultCredentialsError:无法自动确定凭据。请设置 GOOGLE_APPLICATION_CREDENTIALS 或显式创建凭据并重新运行应用程序。
  • 能否包含整个云函数?
【解决方案2】:

我最终将其存储在云对象存储中并在 API 启动时将其拉下。

一个例子是 amazon s3,下载文件,然后将文件传递给谷歌云方法/函数。

希望对您有所帮助。

【讨论】:

  • 我明白了,这是有道理的。目前我有大约 5 个使用相同凭据的函数,每个函数都有这个文件。功能启动时将其拉下对我来说听起来不错。
  • 这对我来说比将文件分发给每个员工要好得多。
猜你喜欢
  • 1970-01-01
  • 2019-11-10
  • 1970-01-01
  • 1970-01-01
  • 2021-03-27
  • 2017-03-09
  • 1970-01-01
  • 2021-06-19
  • 2023-03-08
相关资源
最近更新 更多