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=<SERVICE_ACCOUNT>
進行身份驗證後,一切似乎都正常工作。確保您的使用者帳戶在服務帳戶下指派「服務帳戶令牌建立者」角色。
以上是無法使用 gcloud 預設登入名稱簽署 GCS 網址的詳細內容。更多資訊請關注PHP中文網其他相關文章!