Если вы работаете в AWS, ознакомьтесь с «Правильным способом управления секретами» от Segment.io в блоге AWS. Мы рекомендуем использовать chamber
для всех наших клиентов для управления секретами. Он работает, используя хранилище параметров AWS Systems Manager (SSM) вместе с ключами KMS. Это гарантирует, что секреты зашифрованы в состоянии покоя (и в пути), защищены с помощью IAM, могут быть проверены с помощью CloudTrails и доступны только в качестве переменных среды во время выполнения.
После настройки камеры и настройки ключа KMS мы записываем секреты в хранилище параметров.
chamber write db TF_VAR_DB_USER foobar
chamber write db TF_VAR_DB_PASS secret
Затем используйте эти секреты, когда вызываете терраформ.
chamber exec db -- terraform plan
Это предполагает, что вы определили переменную с именем DB_USER
и DB_PASS
в вашем коде HCL.
Например, вы можете добавить это к variables.tf
variable "DB_USER" { }
variable "DB_PASS" { }
ПРИМЕЧАНИЕ: chamber
всегда будет экспортировать переменные среды в верхнем регистре
Мы предоставляем модуль terraform, призванный terraform-aws-kms-key
упростить подготовку ключа KMS. Ознакомьтесь с нашей подробной документацией с примерами того, как использовать chamber
несколько пространств имен, а также как использовать камеру с терраформой для управления секретами. Смотрите наш полный справочный пример для обеспечения зависимостей камеры.
А что касается .tfstate
действительно хорошего вопроса о существовании секретов в виде простого текста в файле состояния. Там действительно нет никакого способа обойти это. Для того чтобы terraform рассчитал изменения для построения плана, ему необходимо знать состояние «до» и «после». По этой причине мы рекомендуем использовать зашифрованное ведро S3 с обязательным контролем версий. Используйте terraform-aws-tfstate-backend
модуль для предоставления корзины и таблицы блокировки DynamoDB в соответствии с рекомендациями.