В репозитории Terraform по этой проблеме открыто много проблем с Git, с множеством интересных комментариев, но на данный момент я все еще не вижу решения этой проблемы.
Terraform хранит текстовые значения, включая пароли, в файлах tfstate.
Большинству пользователей требуется хранить их удаленно, чтобы команда могла работать одновременно в одной и той же инфраструктуре, при этом большинство из них хранят файлы состояния в S3.
Так как же скрыть свои пароли?
Кто-нибудь здесь использует Terraform для производства? Вы храните пароли в виде простого текста? У вас есть специальный рабочий процесс, чтобы удалить или скрыть их? Что происходит тогда, когда вы запускаете terraform apply
?
Я рассмотрел следующие варианты:
- храните их в Consul - я не использую Consul
- удалите их из файла состояния - это требует, чтобы каждый раз выполнялся другой процесс, и я не знаю, как Terraform будет обрабатывать ресурс с пустым / нечитаемым / неработающим паролем
- сохранить пароль по умолчанию, который затем будет изменен (поэтому Terraform будет иметь нерабочий пароль в файле tfstate) - то же, что и выше
- использовать ресурс Vault - похоже, это еще не полный рабочий процесс
- хранить их в Git с помощью git-repo-crypt - Git тоже не вариант
- глобально зашифровать корзину S3 - это не помешает людям видеть пароли в виде простого текста, если у них есть доступ к AWS на уровне «менеджера», но пока это кажется лучшим вариантом
С моей точки зрения, это то, что я хотел бы видеть:
- файл состояния не включает пароли
- файл состояния зашифрован
- пароли в файле состояния являются «указателями» на другие ресурсы, например «vault: backend-type: / path / to / password»
- каждый запуск Terraform будет собирать необходимые пароли от указанного провайдера
Это просто желание.
Но вернемся к вопросу - как вы используете Terraform в продакшене?