Google-Cloud-Platform

如何從命令行使用服務帳戶訪問Google云儲存桶?

  • September 5, 2018

我認為這樣做很簡單,但我無法讓它工作:

我正在嘗試將文件從伺服器(GCE)推送到Google云儲存桶。為了避免在伺服器上授予gsutil命令太多權限,我在我的Google項目的憑據部分創建了一個“服務帳戶”。

在儲存桶gs://mybucket中,我已將具有 OWNER 權限的服務帳戶的電子郵件地址作為使用者添加到儲存桶中。

在伺服器上,我像這樣啟動了服務帳戶:

$gcloud auth activate-service-account --key-file <path-to-keyfile> myservice

$gcloud auth list
Credentialed accounts:
- 1234567890@project.gserviceaccount.com
- myservice (active)

To set the active account, run:
 $ gcloud config set account <account>

所以到目前為止一切似乎都很好。但是,訪問儲存桶失敗:

$gsutil cp tempfile gs://mybucket
CommandException: Error retrieving destination bucket gs://mybucket/: [('PEM routines', 'PEM_read_bio', 'no start line')]

$gsutil cp tempfile gs://mybucket/tempfile
Failure: [('PEM routines', 'PEM_read_bio', 'no start line')].

當然,我確實驗證了儲存桶的 ACL 確實將服務帳戶顯示為 OWNER。我也在另一台具有不同作業系統的機器上嘗試了這個。結果相同。不用說,我自己無法理解錯誤消息。我將不勝感激任何建議。此要點中的詳細錯誤日誌。

更新:

刪除後~/.config,其中gcloud儲存其授權數據,使用不推薦使用的命令

gsutil config -e

~/.boto將按預期使用服務帳戶生成。後續訪問gs://mybucket 確實有效

但是,我不確定這是我應該遵循的道路。我如何使用它來工作gcloud auth

我遇到了同樣的問題。Google Developers Console 給我的預設密鑰文件實際上是一個 .json 文件,其中密鑰材料位於 json 欄位中。我用“gcloud auth revoke”撤銷了服務帳戶,從開發人員控制台生成了一個新密鑰,並將密鑰下載為 .p12 文件,這一次在啟動服務帳戶後它起作用了。

作為記錄,我今天在嘗試通過生成的json key file在 GCE 實例上啟用服務帳戶時看到了相同的錯誤消息。實例上預裝的 Gcloud sdk 太舊,無法正確使用 json 密鑰。此外,當嘗試以這種方式啟用我的帳戶時,該工具不會提供任何回饋,但嘗試使用該帳戶進行授權將失敗並出現上述錯誤。

安裝目前版本後,我能夠通過啟用我的服務帳戶gcloud auth activate-service-account --key-file /key.json然後gsutil cp file gs://testbucket/正常工作。

引用自:https://serverfault.com/questions/612672