Google-Cloud-Platform

無法在 Terraform #GCP 中導出服務帳戶密鑰

  • October 4, 2019

我已將 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 授予權限。


但是,專門回答您的問題,由於嵌套雙引號,您的密鑰沒有被部署。您的 JSON 密鑰包含雙引號,如果沒有轉義,它將終止開始字元串的引號。

如果您必須使用 JSON 密鑰文件,我會將其作為文件部署到 VM,然後在啟動腳本中讀取該文件:

#!/bin/bash

cat <<EOF > /etc/gce_credentials.json
${file("${var.credentials}")}
EOF

export GOOGLE_APPLICATION_CREDENTIALS=$(cat /etc/gce_credentials.json)

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