Ответ
Для защиты Terraform State File от случайного или злонамеренного удаления я использую комбинацию подходов:
-
Удаленный бэкенд с блокировкой Хранение 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 } } -
Включение версионирования и политик жизненного цикла на бакете S3 Это позволяет восстановить state из предыдущей версии, если он был ошибочно перезаписан. Я также настраиваю правило жизненного цикла, запрещающее удаление (
DenyDelete), или требую MFA-удаление. -
Строгий контроль доступа через IAM Право на запись в бакет state и таблицу блокировок получает только CI/CD-пайплайн (например, Jenkins, GitLab Runner). Разработчики имеют доступ только на чтение. Это реализуется через IAM-роли и политики.
-
Резервное копирование в отдельный регион/аккаунт Для критичных сред я настраиваю асинхронную репликацию бакета S3 в другой регион или даже в отдельный, изолированный аккаунт AWS, используемый исключительно для бэкапов.
-
Использование Terraform Cloud/Enterprise В корпоративной среде эти платформы предоставляют встроенную защиту state, включая шифрование, детализированный аудит доступа и управление версиями через интерфейс.