卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章64334本站已运行4115

无法使用 gcloud 默认登录名签署 GCS 网址

无法使用 gcloud 默认登录名签署 gcs 网址

php小编子墨在使用gcloud时,可能会遇到一个问题,就是无法使用默认的登录名签署GCS网址。这个问题可能会导致一些困扰,但我们可以找到解决办法。在这篇文章中,我们将介绍如何解决这个问题,让您能够顺利地使用gcloud来签署GCS网址。无论您是初学者还是有经验的开发者,本文都将为您提供清晰明了的解决方案。让我们一起来看看吧!

问题内容

我正在开发 golang 后端,并使用 cloud.google.com/go/storage 库与我们的 gcs 实例进行通信。目前,我正在使用这个库来签署 url 并将媒体上传到我们的实例。但是,我想避免下载服务帐户密钥文件并出于本地开发目的显式设置 google_application_credentials 环境变量。为了实现这一目标,我按照参考文档提供了 adc 的用户凭据。

使用新的 adc 配置上传媒体工作正常。但是,当尝试使用以下代码片段对 url 进行签名时:

u, err := client.bucket(bucket).signedurl(object, &storage.signedurloptions{
        method:  http.methodget,
        expires: time.now().add(365 * 24 * time.hour),
    })

我收到一条错误消息:

storage: unable to detect default GoogleAccessID: storage: empty client email in credentials

此错误消息令人费解,因为我在执行代码之前使用 gcloud auth application-default login 进行了身份验证。这里可能存在什么问题,我该如何解决它?

编辑: 我尝试添加 --impersonate-service-account 标志,指向具有令牌创建权限的服务帐户,但这似乎也不起作用。

解决方法

显然,这个问题在最新版本的 cloud.google.com/go/storage 中得到了解决(我在 GitHub 讨论中读到了相关内容,但由于某种原因无法再找到链接)。您必须将服务帐户附加到签名 URL,并且该库现在能够获取与模拟关联的 GoogleAccessID。升级到 v1.29.0 并使用 gcloud auth application-default login --impersonate-service-account= 进行身份验证后,一切似乎都正常工作。确保您的用户帐户在服务帐户下分配有“服务帐户令牌创建者”角色。

卓越飞翔博客
上一篇: 如何限制Golang GRPC中客户端的并发连接
下一篇: Docker 运行错误:exec /app/backend/server:没有这样的文件或目录
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏