Управление секретами

Тема дорожной карты · Terraform

Управление секретами в Terraform — это дисциплина работы с паролями, API-ключами, TLS-сертификатами и другими чувствительными учётными данными в HCL-конфигурациях и remote-state без их открытого отображения. Основная проблема в том, что terraform.tfstate может хранить секреты в открытом тексте, поэтому все production-бэкенды (S3, Azure Blob, GCS, Terraform Cloud) должны иметь шифрование в покое и контроль доступа. Распространённые стратегии управления секретами включают чтение секретов из HashiCorp Vault с использованием провайдера vault, получение значений из AWS Secrets Manager или Azure Key Vault во время планирования, шифрование tfvars-файлов с помощью SOPS и пометку всех чувствительных выходных данных как sensitive = true для их скрытия в логах terraform plan. Команды, внедряющие надёжное управление секретами в Terraform, также ограничивают доступ к terraform state pull и регулярно ротируют учётные данные для минимизации зоны поражения при утечке state-файла.

Как это работает

Управление секретами — как секреты попадают в Terraform без попадания в git или plaintext-state. Варианты: env vars (TF_VAR_db_password), data-источники (data "aws_secretsmanager_secret_version" "db"), провайдер Vault, SOPS-зашифрованные *.tfvars, cloud-managed secrets (Yandex Lockbox, AWS Secrets Manager). State-файлы содержат resolved значения — шифруйте backend bucket + ограничивайте доступ. sensitive = true для переменных — для редакции в plan-выводе.

Когда применять

Никогда не коммитьте секреты в *.tf или *.tfvars в git. В CI — env vars; в production — secrets manager. Шифруйте state at rest (S3 SSE, Yandex Object Storage encryption) и ограничивайте, кто может его читать. Для team dev — SOPS-шифрованные tfvars + age/PGP-ключи. Периодический аудит terraform state pull | grep -i secret.

Типичные ошибки

Ловушки Управление секретами: output "password" { value = ... } без sensitive = true (печатается в CI-логах); секреты в tags или name ресурсов (state их содержит); ротация секрета руками, потом Terraform перезаписывает на следующий apply; расчёт, что "state-файл приватный" без проверки прав на backend. Read state — это audit-дыра.

Связанные понятия

Полезные ресурсы

Проверить знания (1)

Загрузка вопросов…