Назад | Перейти на главную страницу

Как можно настроить безопасное хранилище состояний Terraform для разных уровней инфраструктуры, используя S3 в качестве серверной части?

Контекст

После того, как я много прочитал о Terraform и поигрался с ним в небольших проектах, я хотел бы начать использовать его в реальной производственной среде.

Поскольку среда в основном находится в AWS, я бы выбрал серверную часть S3, но я готов изменить это.

Задача

Я хотел бы иметь отдельные проекты (состояния) Terraform для каждого уровня инфраструктуры. Очевидно, что верхние слои должны иметь доступ к выводам нижних слоев. Я могу использовать Terraform удаленное государство источник данных для получения этих данных.

Я видел разные настройки в Интернете.

Установка # 1

|–globals
|–modules
|-infrastucture1
| |-layer1
| | |-layer2

Установка # 1

|–globals
|–modules
|-infrastucture1
| |-layer1
| |-layer2

Настройка # 3

У всего вышеперечисленного есть отдельный репозиторий git.

Вопрос

>What would be the recommended code organisation for this?

Во-первых, позвольте мне сказать, что общего правила нет, но оно зависит от ваших потребностей. Однако я бы посоветовал не использовать отдельный репозиторий git для каждого модуля, так как это приведет к большому количеству дублирования и не будет иметь внутренней ценности.

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

Вот образец из блога Gruntwork, в котором используется аналогичная организация. https://www.gruntwork.io/infrastructure-as-code-library/v0.17.1/module-ecs

Вот образец из довольно известного репо на github https://github.com/airbnb/streamalert/tree/master/terraform

>What access rights do I have to add to the lower layers' S3 buckets to keep their >state safe, but still allow Terraform remote state to access it?

Я не очень понимаю, в каком смысле вы хотите сохранить свое состояние «безопасным». Но поскольку вы упоминаете о праве доступа к ведру s3, я, как и Amazon, посоветую фактически включить управление версиями и удаление MFA.

Следующая ссылка включает в себя все лучшие практики Amazon по обеспечению безопасности корзины s3. https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html

Эта ссылка - руководство по разрешениям корзины s3 https://docs.aws.amazon.com/AmazonS3/latest/dev/example-walkthroughs-managing-access-example1.html

Если вы хотите, вы также можете использовать подписанные URL-адреса для своего бэкэнда, хотя я считаю, что это не тот способ работы с terraform.