如何将 GCP 服务帐号 JSON 存储在 terrafrom 变量中?



我的地形 gcp 提供程序配置看起来像

provider "google" {
project     = var.project
region      = var.region
credentials = file("account.json")
}

我想在地形云上运行我的地形文件,但我不想将 account.json 文件放在源代码管理中。如何将 json GCP 服务帐户文件存储在地形云中,然后从地形脚本访问它?

您可以在 Terraform Cloud UI 中以名为google_credentials的多行值的形式提供凭据,并将其标记为敏感值,然后输入类似以下内容,其中包含您帐户的正确值(可能只是您已经拥有的 account.json 文件的复制粘贴(:

{
  "type": "service_account",
  "project_id": "project-id",
  "private_key_id": "key-id",
  "private_key": "-----BEGIN PRIVATE KEY-----nprivate-keyn-----END PRIVATE KEY-----n",
  "client_email": "service-account-email",
  "client_id": "client-id",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://accounts.google.com/o/oauth2/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/service-account-email"
}

然后,您可以在 Terraform 模块中将工作区变量中的凭据提供给您的 google提供商,如下所示为单个变量,该变量将被解释为 JSON:

provider "google" {
project     = var.project
region      = var.region
credentials = var.google_credentials
}
variable "google_credentials" {
description = "the contents of a service account key file in JSON format."
type = string
}

凭据 -(可选(JSON 格式的服务帐户密钥文件的路径或内容。您可以使用云控制台管理密钥文件。

来自谷歌提供商配置参考。

更好的答案是通过运行以下命令删除服务帐户密钥文件中的换行

tr -d 'n' < current_service_key.json > no_new_line_key.json

将"no_new_line_key.json"的内容粘贴到 Terraform Cloud 的变量部分,并使用此处记录的任何变量名称,例如 GOOGLE_CREDENTIALS 或 GOOGLE_CLOUD_KEYFILE_JSON:(https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference(。我用了GOOGLE_CREDENTIALS

配置的屏幕截图

您始终可以在in your shell环境中导出以下变量,并省略通过提供程序条目传递凭据

export GOOGLE_APPLICATION_CREDENTIALS="/~/path/to/gcp-sa.json"

最新更新