如何從命令行使用服務帳戶訪問Google云儲存桶?
我認為這樣做很簡單,但我無法讓它工作:
我正在嘗試將文件從伺服器(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/
正常工作。