Google-Cloud-Platform
無法在 Terraform #GCP 中導出服務帳戶密鑰
我已將 GCP 服務帳戶密鑰下載到本地系統。在 Terraform 中,我在堡壘實例的啟動腳本部分中將 GOOGLE_APPLICATION_CREDENTIALS 設置為該文件的路徑。下面是一個片段:
variable "credentials"{ default="C:/GCP/service-account-key.json" }
. . . . . .
metadata= { startup-script=<<SCRIPT export GOOGLE_APPLICATION_CREDENTIALS="${file("${var.credentials}")}" SCRIPT }
後來我編寫了一個 #!/bin/bash 腳本來將此憑據儲存到另一個文件中,如下所示:
#!/bin/bash printf "$GOOGLE_APPLICATION_CREDENTIALS" > /home/ubuntu/credentials
但是當我打開上面的憑證文件時,該文件被截斷如下,並且整個密鑰都失去了:
{ type: service_account, project_id: acn-devopsgcp, private_key_id: xxxxx, private_key: -----BEGIN
請有人告訴我為什麼服務帳戶密鑰沒有正確導出到文件中,或者是否有任何需要更正的地方。
如果此堡壘實例是 Google Cloud Compute Engine (GCE) 實例,則無需將 JSON 密鑰傳遞給 VM。
您應該使用 GCE 實例執行的服務帳戶 -如果沒有使用環境變數提供憑據,則任何使用 GCP API/SDK(例如
gsutil
或)的工具將預設使用此服務帳戶。gcloud
每個 GCP 項目都配備了一個“預設計算”服務帳戶,或者您可以使用 Terraform 專門為相關實例創建一個,並根據需要通過 IAM 授予權限。
- 有關服務帳戶的更多資訊:https ://cloud.google.com/iam/docs/understanding-service-accounts
- GCE 上上述連結的特定部分:https ://cloud.google.com/iam/docs/understanding-service-accounts#using_service_accounts_with_compute_engine
但是,專門回答您的問題,由於嵌套雙引號,您的密鑰沒有被部署。您的 JSON 密鑰包含雙引號,如果沒有轉義,它將終止開始字元串的引號。
如果您必須使用 JSON 密鑰文件,我會將其作為文件部署到 VM,然後在啟動腳本中讀取該文件:
#!/bin/bash cat <<EOF > /etc/gce_credentials.json ${file("${var.credentials}")} EOF export GOOGLE_APPLICATION_CREDENTIALS=$(cat /etc/gce_credentials.json)