Как защитить State File от удаления в Terraform

«Как защитить State File от удаления в Terraform» — вопрос из категории Terraform, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для защиты Terraform State File от случайного или злонамеренного удаления я использую комбинацию подходов:

  1. Удаленный бэкенд с блокировкой Хранение state локально — антипаттерн. Я настраиваю удаленный бэкенд (например, AWS S3) с обязательным использованием блокировок (через DynamoDB). Это предотвращает параллельное выполнение terraform apply и гарантирует целостность.

    terraform {
      backend "s3" {
        bucket         = "company-terraform-state-prod"
        key            = "network/terraform.tfstate"
        region         = "eu-west-1"
        dynamodb_table = "terraform-state-locks"
        encrypt        = true
      }
    }
  2. Включение версионирования и политик жизненного цикла на бакете S3 Это позволяет восстановить state из предыдущей версии, если он был ошибочно перезаписан. Я также настраиваю правило жизненного цикла, запрещающее удаление (DenyDelete), или требую MFA-удаление.

  3. Строгий контроль доступа через IAM Право на запись в бакет state и таблицу блокировок получает только CI/CD-пайплайн (например, Jenkins, GitLab Runner). Разработчики имеют доступ только на чтение. Это реализуется через IAM-роли и политики.

  4. Резервное копирование в отдельный регион/аккаунт Для критичных сред я настраиваю асинхронную репликацию бакета S3 в другой регион или даже в отдельный, изолированный аккаунт AWS, используемый исключительно для бэкапов.

  5. Использование Terraform Cloud/Enterprise В корпоративной среде эти платформы предоставляют встроенную защиту state, включая шифрование, детализированный аудит доступа и управление версиями через интерфейс.