【问题标题】:gsutil works. Need to make google.cloud.storage workgsutil 有效。需要让 google.cloud.storage 工作
【发布时间】:2020-06-11 03:30:27
【问题描述】:

这是我想以编程方式解决的一个精确问题(例如,不在浏览器中手动执行某些操作)。

本机已安装 Google Cloud SDK。

gsutil ls 命令成功运行

但是python3 -c "from google.cloud import storage; storage.Client().list_buckets()" 失败:

google.auth.exceptions.DefaultCredentialsError:无法自动确定凭据。请设置 GOOGLE_APPLICATION_CREDENTIALS 或显式创建凭据并重新运行应用程序。更多信息请见https://cloud.google.com/docs/authentication/getting-started

我需要以编程方式使google.cloud.storage 工作(使用gsutil 使用的凭据/身份验证机制)。如果gsutil 可以访问凭据,那么google.cloud.storage 也应该可以这样做。

我该怎么做?

我可能需要将GOOGLE_APPLICATION_CREDENTIALS 设置为gsutil 正在使用的JSON 文件,但它使用什么文件并且格式兼容?

【问题讨论】:

  • 您能否检查以下documentation 并告诉我这是否适合您?

标签: python google-cloud-platform google-cloud-storage google-cloud-sdk


【解决方案1】:

您只需将变量 GOOGLE_APPLICATION_CREDENTIALS 添加到环境中并将其设置为您的凭据

【讨论】:

  • 您能否提供一种编程方式来解决此问题?
  • 你不能将环境作为管道的一部分吗?否则,您可以使用 os.environ stackoverflow.com/questions/5971312/… 从 python 设置变量
  • 我在我的问题中提到了环境变量。但是您的回答并没有完全提到代码需要设置哪个值(以编程方式)。
【解决方案2】:

使用凭据初始化您的客户端:

import os

from google.cloud import storage
from google.oauth2 import service_account

path_to_service_account_key = "key.json"  # TODO

credentials = service_account.Credentials.from_service_account_file(
        filename=path_to_service_account_key,
        scopes=['https://www.googleapis.com/auth/cloud-platform']
)
client = storage.Client(credentials=credentials)
client.list_buckets()

默认情况下,gsutil 使用您项目的默认服务帐户,您可以使用以下列表:

gcloud iam service-accounts list

如果您想使用同一个服务帐号,或完全生成新的服务帐号密钥,您可以从 IAM 控制台执行此操作:https://cloud.google.com/iam/docs/creating-managing-service-account-keys

【讨论】:

  • 来自问题:“我可能需要将 GOOGLE_APPLICATION_CREDENTIALS 设置为 gsutil 正在使用的 JSON 文件,但它使用什么文件并且格式兼容?”您回答中的“TODO”就是问题的全部内容。 gsutil 使用了一些东西。我需要使用同样的东西。
  • 我不清楚你在问什么。您是否在问如何以编程方式生成该文件?或者那个文件来自哪里?见cloud.google.com/iam/docs/…
  • 我已经根据您的要求更新了我的答案。
  • >"您可以从 IAM 控制台执行此操作" - 这看起来不像是一种编程方式。请参阅问题的第一行:“这是一个我想以编程方式解决的精确问题(例如,不在浏览器中手动执行某些操作)。另外,我不认为我想创建任何新的键。我不想修改用户的项目。gsutil 已经以某种方式工作。我只想使用它使用的相同键。
猜你喜欢
  • 2017-09-22
  • 2015-02-11
  • 2011-02-25
  • 1970-01-01
  • 2015-04-15
  • 2020-11-15
  • 1970-01-01
  • 1970-01-01
  • 2018-04-22
相关资源
最近更新 更多