Шифруется ли state-файл в Terraform?

«Шифруется ли state-файл в Terraform?» — вопрос из категории Terraform, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, локальный state-файл (terraform.tfstate) по умолчанию не шифруется. Он хранится в виде обычного JSON-файла, содержащего в открытом виде все ресурсы, их атрибуты, а иногда и чувствительные данные (пароли, приватные ключи, токены). Хранить его локально или в Git — серьезная угроза безопасности.

Как мы решаем эту проблему в продакшене:

  1. Используем удаленный бэкенд с шифрованием. Например, AWS S3 с включенным шифрованием на стороне сервера (SSE-S3 или SSE-KMS) и блокировкой состояния через DynamoDB.
    terraform {
      backend "s3" {
        bucket = "company-terraform-state-prod"
        key    = "network/terraform.tfstate"
        region = "eu-west-1"
        encrypt = true
        dynamodb_table = "terraform-state-lock"
      }
    }
  2. Никогда не коммитим state-файлы. Они добавлены в глобальный .gitignore.
  3. Управляем доступом. Доступ к бакету с state имеют только CI/CD пайплайны и инженеры через IAM-роли.
  4. Для чувствительных выходных данных используем механизм sensitive = true в output или внешние системы хранения секретов (HashiCorp Vault, AWS Secrets Manager).