Может ли Terraform маскировать переменные в выводе консоли? - PullRequest
0 голосов
/ 18 декабря 2018

Я хотел опубликовать это как запрос функции, но я хотел узнать, нашел ли кто-нибудь еще какой-нибудь умный способ сделать это, прежде чем я отправлю сообщениеИли, может быть, кто-то из Hashicorp может сказать мне, что это будет функция в ближайшем

Я искал высокий и низкий уровень для маскировки переменных с консоли при запуске terraform apply/show.Желательно пытаться маскировать переменные, используя local-exec , при передаче переменных в сценарий.

Инструмент под названием Terrahelp - единственное, что я могу найти, которое сделает это, но оно будет применяться только к переменным в файле tfvars, который неразрешить интерполяции.Это не помогает, поскольку мы пытаемся использовать Vault для защиты секретов от файлов терраформ.

Current Versions
Terraform v0.11.7
provider.null v1.0.0
provider.template v1.0.0
provider.vault v1.3.1
provider.vsphere v1.8.1

Вариант использования

provisioner "local-exec" {
    command = "&'${path.module}\\scripts\\script.ps1' -name ${var.node_name} -pass '${var.pass}' -user ${var.user} -server ${var.server}"
    interpreter = ["Powershell", "-Command"]
  }  

Попытки решения Я использую Vault, чтобы хранить секреты в файлах Terraform, поэтому я использую провайдера хранилища и вызываю данные из него.Я попытался создать модуль и вывести секреты со значением sensitive = true, а затем вызывать этот модуль для использования секретов, однако это все еще отображается в консоли.

Предложение

Разрешить какое-то чувствительное значение, похожее на вывод переменных в Terraform.Поэтому, если в консоли вызываются скрипты, подобные приведенным выше, они не будут показывать конфиденциальную информацию о переменных.

Рекомендации https://github.com/hashicorp/terraform/issues/16114 https://github.com/hashicorp/terraform/issues/16643

Ответы [ 3 ]

0 голосов
/ 08 июля 2019

Вот как я делаю это для нескольких локальных сервисов:

1 - var.password на самом деле не хранит пароль.Скорее, он хранит имя переменной среды.

2 - Мои скрипты получают пароли от этих переменных среды.

3 - У меня есть небольшая программа, которая загружает секреты в среду и очищает их дляterraform apply.

Итак, в конце концов, я просто обхожу Terraform за секреты, используемые скриптами.Не идеально, но я также не смог найти лучшего решения.

0 голосов
/ 16 августа 2019

Я думаю, https://github.com/cloudposse/tfmask может быть тем, что вы ищете:

Утилита командной строки для маскировки чувствительного вывода из плана преобразования или терраформации.

Сначала вы устанавливаете переменную окружения для фильтрации замаскированных ключей (по общему признанию, здесь требуется некоторая ручная работа):

export TFMASK_VALUES_REGEX="(?i)^.*(secret|password|oauth|token|key).*$"

А затем передаете команды терраформирования через tfmask, что приводит к маскированному выводу:

terraform plan | tfmask
0 голосов
/ 03 апреля 2019

Спасибо за отзыв, пароли не могут быть установлены для одноразового использования, поскольку некоторые из них являются служебными учетными записями в AD, которые выполняют другие действия, которые эти приложения не могут обрабатывать при постоянных сменах паролей.

Мы нашли решение с помощью другого продукта - Azure / Azure DevOps.Мы храним учетные данные в ключевых хранилищах Azure, к которым у DevOps Azure есть доступ, и используем конвейеры AzOv DevOps для отправки кода terraform на наш сервер сборки.Похоже, что Azure DevOps действует как оболочка, которая скрывает любые секреты от консоли и работает довольно хорошо.Я бы порекомендовал его всем, кто также хочет скрыть секреты от файлов / командной строки terraform.

...