【问题标题】:Go storage client not able to access GCP bucketGo 存储客户端无法访问 GCP 存储桶
【发布时间】:2021-07-26 20:06:48
【问题描述】:

我有一个 golang 服务,它公开了一个 API,我们尝试将 CSV 上传到 GCP 存储桶。在我的本地主机上,我设置了环境变量 GOOGLE_APPLICATION_CREDENTIAL 并将此变量指向服务帐户 json 的文件路径。但是在部署到实际的 GCP 实例时,我在尝试访问此 API 时遇到以下错误。理想情况下,服务应该与 GCP 元数据服务器通信并获取凭据,然后将它们存储在 json 文件中。所以这里有两个问题:

  1. 服务未查询元数据服务以获取凭据。
  2. 如果文件存在(我手动创建的),由于权限问题无法访问。

任何帮助将不胜感激。

Error while initializing storage Client:dialing: google: error getting credentials using well-known file (/root/.config/gcloud/application_default_credentials.json): open /root/.config/gcloud/application_default_credentials.json: permission denied

【问题讨论】:

  • “权限被拒绝”表示运行您的应用程序的用户对该文件没有读取权限。默认情况下,/root 目录只能由 root 用户访问。尝试将您的 json 放到您的应用程序可以读取它的目录并使用 chmod 设置文件权限。
  • 但是首先,它应该自动查询元数据服务器,不知道为什么它没有发生。
  • 在 Compute Engine 上,如果您运行 gcloud auth application-default login' or similar commands, that will supersede reading metadata for credentials. Execute the command sudo gcloud auth application-default revoke`。
  • 您是如何设置计算引擎的?你设置环境变量了吗?

标签: go google-cloud-platform google-cloud-storage


【解决方案1】:

最后,经过长时间的调试和网上搜索,发现已经有一个开放的 go-storage 客户端的 PR 是开放的:https://github.com/golang/oauth2/issues/337。我必须使用这种方法对代码进行一些更改:https://pkg.go.dev/golang.org/x/oauth2/google#ComputeTokenSource 基本上我们正在尝试从元数据服务器显式获取令牌,然后调用后续的云 API。

【讨论】:

    猜你喜欢
    • 2019-07-26
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 2022-01-10
    • 2018-07-08
    • 1970-01-01
    相关资源
    最近更新 更多