Go 存储客户端无法访问 GCP 存储桶

时间:2021-07-23 10:08:54

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

我有一个 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

1 个答案:

答案 0 :(得分:0)

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