Как сохранить 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.
Вы всегда можете экспортировать переменную ниже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