Как сохранить JSON сервисного аккаунта GCP в переменной terrafrom?

Конфигурация моего провайдера terraform gcp выглядит так

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

Я хочу запустить свой файл terraform в облаке terraform и не хочу помещать файл account.json в систему управления версиями. Как я могу сохранить файл учетной записи службы json GCP в облаке terraform, а затем получить к нему доступ из сценария terraform?

3 ответа

Решение

Вы можете указать учетные данные в качестве значения Multi-Line под названием google_credentials в терраформировать Cloud UI и пометить его как Sensitive Value и ввести что - то вроде этого с правильными значениями для вашей учетной записи (вероятно, просто копия вставки из файла account.json вы уже):

{
  "type": "service_account",
  "project_id": "project-id",
  "private_key_id": "key-id",
  "private_key": "-----BEGIN PRIVATE KEY-----\nprivate-key\n-----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"
}

Затем вы можете предоставить учетные данные из переменной рабочей области своему провайдеру Google в модуле Terraform следующим образом в виде одной переменной, которая будет интерпретироваться как 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. Вы можете управлять ключевыми файлами с помощью Cloud Console.

Из справочника по настройке поставщика Google.

Вы всегда можете экспортировать переменную нижеin your shellсреду и не передавать учетные данные через запись провайдера

export GOOGLE_APPLICATION_CREDENTIALS="/~/path/to/gcp-sa.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

Скриншот конфигурации

Другие вопросы по тегам