Создание экземпляра бастиона для запуска terraform: проблема с доступом к API - PullRequest
0 голосов
/ 11 ноября 2019

TL; DR . Не могу понять, какую область действия API необходимо включить на экземпляре бастиона. Кроме того, какой-нибудь совет по созданию экземпляра бастиона?


Я работаю над экземпляром бастиона, из которого я хотел бы запускать команды terraform plan / terraform apply.

МойПлан для бастионного экземпляра таков:

  1. настройка Вход в ОС ,
  2. настройка двухфакторная аутентификация ,
  3. убедитесь, что учетная запись службы по умолчанию имеет доступ к ресурсам GCP (чтобы у terraform была возможность доступа к ресурсам):

    Если вы используете Terraform из экземпляра GCE, по умолчаниюучетные данные автоматически доступны . Дополнительные сведения см. В разделе «Создание и включение учетных записей служб для экземпляров».

    reference

  4. сохранять конфигурации terraform в экземпляре, иметь возможность terraform plan / terraform apply

После выполнения пунктов 1, 3 и 4 из приведенного выше списка у меня возникла проблема с доступом Terraform к API управления учетными записями служб - запуск terraform plan приводит кследующее:

$ terraform plan
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.

google_service_account.terraform_state_user: Refreshing state... [id=projects/xxxxxxxx-xxxxxx-xxxxxx/serviceAccounts/terraform-state-user@xxxxxxxx-xxxxxx-xxxxxx.iam.gserviceaccount.com]
google_storage_bucket.access_logs: Refreshing state... [id=xxxxxxxx-bucket-access-logs]
google_storage_bucket.terraform_state_storage: Refreshing state... [id=xxxxxxxx-terraform-state-storage]

Error: Error reading Service Account "projects/xxxxxxxx-xxxxxx-xxxxxx/serviceAccounts/terraform-state-user@xxxxxxxx-xxxxxx-xxxxxx.iam.gserviceaccount.com": googleapi: Error 403: Request had insufficient authentication scopes., forbidden

В качестве исправления PoC я изменил список областей доступа к Cloud API на виртуальной виртуальной машине на Разрешить полный доступ ко всем облачным API . После этого команды terraform plan и terraform apply были успешно выполнены. В качестве следующего шага я решил ограничить количество областей API, к которым у экземпляра есть доступ, но не смог найти правильный набор областей API для доступа к API учетной записи службы (я получаю сообщение об ошибке, как указано выше).

После пары попыток terraform plan и terraform apply на работу. Это список областей API, которые у меня сейчас есть на бастионе:

Bigtable Admin              Disabled
Bigtable Data               Disabled
Cloud Datastore             Disabled
Cloud Debugger              Disabled
Cloud Pub/Sub               Disabled
Cloud Source Repositories   Disabled
Cloud SQL                   Disabled
Compute Engine              Read Write
Service Control             Enabled
Service Management          Read Write
Stackdriver Logging API     Write Only
Stackdriver Monitoring API  Write Only
Stackdriver Trace           Write Only
Storage                     Read Write
Task queue                  Disabled
User info                   Enabled

Я пытаюсь найти ответы на следующие вопросы:

  1. Какую область API я должен разрешить, чтобы иметь возможность читать / записывать ресурсы учетной записи службы?
  2. при условии, что я использую SSH в бастион через функцию «Вход в ОС» (которая зависит от роли IAM моего собственного пользователя), используется ли моя собственная учетная записьполучить доступ к API или это учетная запись службы по умолчанию? (это просто, чтобы помочь моему пониманию),
  3. какие-либо общие рекомендации по созданию экземпляра бастиона?

1 Ответ

0 голосов
/ 11 ноября 2019

Использование выделенной виртуальной машины для развертывания скрипта Terraform часто является проблемой, и поэтому мне не понравился Terraform. Но я нашел способ выполнить это без сервера и, таким образом, избежать создания виртуальной машины и поддерживать ее: я использую Cloud Build и контейнер Terraform.

I написал эту статью по этому вопросуесли вы хотите узнать больше.

...