透過 Google scp 指令使用服務帳戶時權限被拒絕

透過 Google scp 指令使用服務帳戶時權限被拒絕

我想使用 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

解決您的問題您可以選擇以下兩種解決方法之一:

  1. 更改權限:

    • 直接為您的使用者名稱提供寫入權限/var/www/dev/dev/test,例如:

      sudo chown -R $USER /var/www/dev/dev/test

    • 複製文件gcloud compute scp直接到/var/www/dev/dev/test.

  2. 複製文件分兩步驟:

    • 使用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

相關內容