
我想使用 CircleCI 將程式碼部署到 Compute Engine 實例。我建立了一個服務帳戶使用者並使用下面的 gcloud scp 命令:
gcloud --quiet compute scp --recurse dev/test/ [DEST_INSTANCE]:/var/www/dev/dev/test --zone=northamerica-northeast1-a --project [PROJECT_NAME]
將檔案上傳到 var 子資料夾,但部署失敗並出現以下錯誤:
scp: /var/www/dev/dev/test: Permission denied
ERROR: (gcloud.compute.scp) [/usr/bin/scp] exited with return code [1].
Exited with code 1
現在,我想授予對服務帳戶的存取權限,但當我使用cat /etc/passwd
.如何向服務帳戶授予權限?我分配給該帳戶的角色是:
答案1
您的使用者名稱似乎沒有 GCE VM 的寫入權限/var/www/dev/dev/test
。
解決您的問題您可以選擇以下兩種解決方法之一:
更改權限:
直接為您的使用者名稱提供寫入權限
/var/www/dev/dev/test
,例如:sudo chown -R $USER /var/www/dev/dev/test
複製文件
gcloud compute scp
直接到/var/www/dev/dev/test
.
複製文件分兩步驟:
使用
gcloud compute scp
傳輸使用者可以寫入的檔案/目錄,例如,/tmp
或/home/$USER
;透過 SSH 連接到 VM 實例
gcloud compute ssh
或通過控制台並從臨時位置複製文件sudo
以獲得適當的權限。
筆記因為這個問題是關於GCE虛擬機的,所以你不能直接透過SSH連接到虛擬機器實例root
,也不能直接複製文件root
,出於同樣的原因:gcloud compute scp
使用scp
依賴ssh
於身份驗證。
另外,請看一下文檔將檔案傳輸到實例部分使用 gcloud 命令列工具傳輸文件。
答案2
請檢查正在使用的服務帳戶。 GCE 預設有一個服務帳戶,由 GCP 建立。另一件是您創建的。
如果您使用的是您建立的帳戶,您是否已使用 JSON 金鑰檔案授權服務帳戶登入?
答案3
使用以下命令啟動您已在螢幕截圖中授予角色的正確服務帳戶:
gcloud auth activate-service-account $account --key-file=the_key_file.json