Учетные данные Google Cloud с Terraform

Это вопрос новичка, но я только начал работать с подготовкой 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: синтаксическая ошибка: последовательность усечена


person Scott Crooks    schedule 11.08.2019    source источник


Ответы (2)


если я настрою Terraform так, чтобы он указывал на файл application_default_credentials.json, я получаю следующие ошибки:

Поле credentials в конфигурации поставщика ожидает путь к файлу ключа учетной записи службы, а не файлу учетных данных учетной записи пользователя. Если вы хотите пройти аутентификацию с использованием своей учетной записи, попробуйте опустить credentials и затем запустить gcloud auth application-default login; если Terraform не находит ваш файл учетных данных, вы можете установить GOOGLE_APPLICATION_CREDENTIALS переменную среды так, чтобы она указывала на ~/.config/gcloud/application_default_credentials.json.

Прочтите здесь для получения дополнительной информации по теме учетных записей служб и учетных записей пользователей. Как бы то ни было, Terraform явно рекомендует не использовать application-default login:

Этот подход не рекомендуется - некоторые API-интерфейсы несовместимы с учетными данными, полученными через gcloud.

Аналогичным образом в документах GCP говорится следующее:

Важно: почти во всех случаях, независимо от того, разрабатываете ли вы локально или в производственном приложении, вы должны использовать учетные записи служб, а не учетные записи пользователей или ключи API.

person Aleksi    schedule 12.08.2019
comment
Ах, теперь я понял, большое вам спасибо! Я был так сбит с толку, почему это происходит. Часть, которую вы упомянули в документации Terraform (этот подход не рекомендуется - некоторые API-интерфейсы несовместимы с учетными данными, полученными через gcloud), все еще меня немного беспокоит. Это означает, что некоторые действия я не могу выполнить с помощью обычной команды gcloud. Это кажется очень странным. - person Scott Crooks; 12.08.2019
comment
на самом деле похоже, что пользователь должен использовать учетную запись службы. Когда я выполняю рекомендуемые действия и указываю GOOGLE_APPLICATION_CREDENTIALS на ~/.config/gcloud/application_default_credentials.json, он по-прежнему дает мне указанную выше ошибку, говоря, что это не в формате PEM. - person Scott Crooks; 12.08.2019
comment
Да ладно, моя плохая. Будет ли application-default login работать, если вы отключите переменную GOOGLE_APPLICATION_CREDENTIALS? - person Aleksi; 12.08.2019
comment
FWIW, связанные «Документы GCP» больше не содержат фразу «вам следует использовать учетные записи служб». Учетные записи пользователей не кажутся обескураженными и предназначены для разработчиков. - person Matt Drees; 17.02.2020

Тем не менее, не рекомендуется использовать gcloud auth application-default login. Лучшие подходы

https://www.terraform.io/docs/providers/google/guides/provider_reference.html#credentials-1.

person krish    schedule 26.02.2020