Это вопрос новичка, но я только начал работать с подготовкой GCP с помощью Terraform / Terragrunt и считаю рабочий процесс с получением учетных данных GCP довольно запутанным. Я пришел к использованию исключительно AWS, где получение учетных данных и их настройка в интерфейсе командной строки AWS было довольно простым делом.
Обычно в документации Google Cloud Provider говорится, что вы должны определить provider
блок вот так:
provider "google" {
credentials = "${file("account.json")}"
project = "my-project-id"
region = "us-central1"
zone = "us-central1-c"
}
Это поле credentials
показывает, что я (очевидно) должен создать учетную запись службы и хранить JSON где-нибудь в моей файловой системе.
Однако, если я запустил команду gcloud auth application-default login
, это сгенерирует токен, расположенный в ~/.config/gcloud/application_default_credentials.json
; в качестве альтернативы я также могу использовать gcloud auth login <my-username>
. Оттуда я могу получить доступ к Google API (что и делает Terraform под капотом) из командной строки с помощью команды gcloud
.
Так почему же провайдеру Terraform требуется JSON-файл учетной записи службы? Почему он не может просто использовать учетные данные, которые инструмент gcloud
CLI уже использует?
Кстати, если я настрою Terraform так, чтобы он указывал на файл application_default_credentials.json
, я получаю следующие ошибки:
Инициализация модулей ...
Инициализация серверной части ...
Ошибка: не удалось получить существующие рабочие области: не удалось выполнить запрос в облачное хранилище: получить https://www.googleapis.com/storage/v1/b/terraform-state-bucket/o?alt=json&delimiter=%2F&pageToken=&prefix=projects%2Fsomeproject%2F&prettyPrint=false&projection=full&versions=false: закрытый ключ должен быть PEM или обычным PKCS1 или PKCS8; ошибка синтаксического анализа: asn1: синтаксическая ошибка: последовательность усечена