Google-Cloud-Platform

如何在伺服器上將 GOOGLE_APPLICATION_CREDENTIALS 與 gcloud 一起使用?

  • December 16, 2021

gcloud在 GCE 之外以非互動方式使用命令行的最簡單方法是什麼?最好不要用憑證文件亂扔文件系統,這就是這樣gcloud auth activate-service-account --key-file=...做的。

有許多使用gcloud服務帳戶的案例。例如,在伺服器上,我想GOOGLE_APPLICATION_CREDENTIALS在執行我的應用程序之前測試是否正確設置並具有所需的權限。或者,我想執行一些設置腳本或 cron 腳本,用gcloud命令行執行一些檢查。

Google Cloud 庫(例如pythonjava)自動使用環境變數GOOGLE_APPLICATION_CREDENTIALS向 Google Cloud 進行身份驗證。但不幸的是,這個命令行似乎對gcloud. gcloud在保持文件系統完好無損的情況下,什麼是乾淨的使用方法?

$ GOOGLE_APPLICATION_CREDENTIALS=/etc/my-service-account-4b4b6e63aaed.json gcloud alpha pubsub topics publish testtopic hello
ERROR: (gcloud.alpha.pubsub.topics.publish) You do not currently have an active account selected.
Please run:

 $ gcloud auth login

to obtain new credentials, or if you have already logged in with a
different account:

 $ gcloud config set account ACCOUNT

to select an already authenticated account to use.

gcloud一般不使用GOOGLE_APPLICATION_CREDENTIALS環境變數。它只有一些命令來幫助在gcloud auth application-default [login|revoke|print-access-token...].

預設情況下gcloud,其配置儲存在 ${HOME}/.config/gcloud 中。可以通過設置CLOUDSDK_CONFIG環境變數來覆蓋該位置。

也可以(雖然更乏味)覆蓋大多數設置,這樣它們就不需要通過gcloud config set ...和/或預先配置gcloud auth activate-service-account。對於每個設置,都可以指定環境變數。

例如,您嘗試使用服務帳戶密鑰文件的等效命令是:

$ CLOUDSDK_AUTH_CREDENTIAL_FILE_OVERRIDE=/etc/my-service-account-4b4b6e63aaed.json \
   gcloud alpha pubsub topics publish testtopic hello

請注意,這仍然會記憶體憑據,CLOUDSDK_CONFIG因為它需要記憶體訪問令牌,因此它不必在每次呼叫時刷新它。

在我看來,對於您的案例,最佳選擇是

  1. 設置CLOUDSDK_CONFIG為某個臨時目錄
  2. gcloud auth activate-service-account --key-file=...
  3. gcloud用來做你的工作…
  4. 刪除臨時CLOUDSDK_CONFIG目錄。

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