2015-04-01 250 views
3

我想要通過gcloud auth登錄激活的服務帳戶被gsutil接收。大查詢命令行工具bq正在撿起它。gsutil使用gcloud激活服務帳戶的問題

操作我下面的順序:

第一:

gcloud auth activate-service-account --key-file snip.json [email protected] 

這將導致輸出: 激活服務帳戶憑據[[email protected]]

第二: 我確認憑證是活動的:

gcloud auth list 

導致: **資格的帳戶: - [email protected](活動)...

第三: 我看BQ工具將它拾起:

bq ls 

哪個正確列出了我的項目中的數據集。

第四: 我嘗試gsutil對着我的桶。我已將我的服務帳戶用戶添加爲此存儲桶的所有者,以確保其具有權限。

gsutil ls gs://snip 

這導致:漫長的等待,然後最終: 您正在嘗試沒有配置 憑據訪問受保護的數據。請訪問https://cloud.google.com/console#/project 並註冊一個帳戶,然後運行「gcloud auth login」 命令來配置gsutil以使用這些憑據。

然後我使用debug命令:

gsutil -D 

輸出:

gsutil version: 4.11 
checksum: snip (OK) 
boto version: 2.30.0 
python version: 2.7.5 (default, Jun 17 2014, 18:11:42) [GCC 4.8.2 20140120 (Red Hat 4.8.2-16)] 
OS: Linux 3.10.0-123.20.1.el7.x86_64 
multiprocessing available: True 
using cloud sdk: True 
config path: no config found 
gsutil path: /home/blah/google-cloud-sdk/platform/gsutil/gsutil 
compiled crcmod: False 
installed via package manager: False 
editable install: False 
Command being run: /home/blah/google-cloud-sdk/platform/gsutil/gsutil -o GSUtil:default_project_id=snip -D 
config_file_list: [] 
config: [('debug', '0'), ('working_dir', '/mnt/pyami'),'https_validate_certificates', 'true'), ('debug', '0'), ('working_dir', '/mnt/pyami'), ('default_project_id', 'snip')] 

在此之後,如果我通過gcloud身份驗證登錄添加自己的用戶ID憑據存儲方式不同,gsutil LS gs:// snip工作正常。如果我然後將服務帳戶切換爲活動狀態而不是我的用戶標識(使用gcloud config set account),那麼它將不再工作 - 我得到與上述相同的錯誤消息。

最後一條信息 - 我在自己的虛擬機上運行這個,不在GCE內運行。

+0

嘿fyi,我安裝了PyOpenSSL並切換到了p12。這很好,但JSON仍然無法正常工作。 – manofport 2015-04-01 21:51:26

回答

0

您需要從雲端控制檯授權存儲桶上的服務帳戶,請點擊「編輯存儲桶權限」,然後爲該服務帳戶的電子郵件地址添加權限。

enter image description here

+0

嗨aqquadro - 謝謝,但我已經完成了這一步。我給了服務帳戶所有者權限。 – manofport 2015-04-05 14:14:43

2

我能夠重現該問題。這似乎只發生在JSON密鑰文件中。 Google根據this發現此問題。在解決問題之前,我建議使用P12密鑰文件進行身份驗證,或者將缺省項目服務帳戶添加爲您嘗試訪問的存儲桶中的所有者。

0

無可否認,我不確定這是問題的答案(請讓我知道,我會刪除它),但看到沒有可接受的答案和我看到的兩個答案沒有解決問題對我來說,這裏是固定的,我的gsutil問題:

我就通過控制檯shell項目級別重新初始化gcloud(單擊控制檯右上角拿到殼>_圖標),然後運行像這樣: [email protected]:~$ gcloud init

它會問你一堆問題。我認爲選擇「用新設置重新初始化此配置[cloudshell - [#]]」是關鍵,但我不是100%確定的。

當我完成後,gsutil開始工作。我正在做一些不同的事情,但我希望這將有助於解決這個問題。我是這樣做的:

gsutil mv gs://bucketname/filename instance-name:/a/path/filename

(在上面的,我正在從一個項目水桶filename文件,以一個實例instance-name和目錄/a/path/。)

中途下來此鏈接有一些有用的info: https://cloud.google.com/compute/docs/disks/gcs-buckets

這個固定gsutil對我來說! (我認爲它的工作原理是因爲在執行上述操作之前,我的gsutil已配置爲我的存儲桶和實例不在其中的區域。)