sensitive = true
Тема дорожной карты · Terraform
Чувствительные значения в Terraform — это переменные, выходные данные и атрибуты ресурсов, помеченные sensitive = true в HCL, что указывает Terraform скрывать их содержимое в выводе terraform plan и terraform apply в терминале, а также в логах запусков Terraform Cloud. Объявление переменной чувствительной — variable "db_password" { sensitive = true } — предотвращает передачу значения в явном виде через выходные данные модулей и в CI-логи, снижая риск утечки учётных данных. Чувствительные значения в Terraform тем не менее хранятся в terraform.tfstate, поэтому шифрование и ограничение доступа к бэкенду состояния остаются обязательными. Для более надёжной защиты комбинируйте sensitive = true с внешними хранилищами секретов — HashiCorp Vault, AWS Secrets Manager или SOPS — чтобы фактический секрет никогда не появлялся в HCL-источнике.
Как это работает
sensitive = true — как секреты попадают в 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.
Типичные ошибки
Ловушки sensitive = true: output "password" { value = ... } без sensitive = true (печатается в CI-логах); секреты в tags или name ресурсов (state их содержит); ротация секрета руками, потом Terraform перезаписывает на следующий apply; расчёт, что "state-файл приватный" без проверки прав на backend. Read state — это audit-дыра.