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
标志,指向具有令牌创建权限的服务帐户,但这似乎也不起作用。--impersonate-service-account
标志,指向具有令牌创建权限的服务帐户,但这似乎也不起作用。
显然,这个问题在最新版本的 cloud.google.com/go/storage
中得到了解决(我在 GitHub 讨论中读到了相关内容,但由于某种原因无法再找到链接)。您必须将服务帐户附加到签名 URL,并且该库现在能够获取与模拟关联的 GoogleAccessID
。升级到 v1.29.0
并使用 gcloud auth application-default login --impersonate-service-account=<SERVICE_ACCOUNT>
cloud.google.com/go/storage
中得到了解决(我在 GitHub 讨论中读到了相关内容,但由于某种原因无法再找到链接)。您必须将服务帐户附加到签名 URL,并且该库现在能够获取与模拟关联的 GoogleAccessID
。升级到 v1.29.0
并使用 gcloud auth application-default login --impersonate-service-account=<SERVICE_ACCOUNT>
进行身份验证后,一切似乎都正常工作。确保您的用户帐户在服务帐户下分配有“服务帐户令牌创建者”角色。🎜以上是无法使用 gcloud 默认登录名签署 GCS 网址的详细内容。更多信息请关注PHP中文网其他相关文章!