Может ли Terraform маскировать переменные в выводе консоли?

Я хотел опубликовать это как запрос функции, но я хотел узнать, нашел ли кто-нибудь еще какой-нибудь умный способ сделать это, прежде чем я опубликую. Или, может быть, кто-нибудь из 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/16114https://github.com/hashicorp/terraform/issues/16643

Вы пробовали ресурс aws_ssm_parameter и его вывод, он уже отмечен (value: <sensitive>), возможно, вы сможете получить от него какие-то подсказки.

BMW 04.02.2019 00:05

Если вы используете Vault, вы можете настроить одноразовые пароли. Тогда не имеет значения, есть ли они в журналах или нет, поскольку они недействительны после того, как были использованы (или с истекшим сроком действия).

Software Engineer 05.03.2019 18:19
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
9
2
4 298
6

Ответы 6

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

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

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

1 - var.password фактически не хранит пароль. Скорее, он хранит имя переменной окружения.

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

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

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

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

Command line utility to mask sensitive output from a transform plan or terraform apply.

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

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

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

terraform plan | tfmask

Это самореклама, но я создаю инструмент под названием террамаск, который работает с Terraform 0.12.

Проблемы приветствуются ?

Я не могу точно сказать, является ли это вашим вариантом использования или нет, но одна стратегия, которую мы использовали с чувствительными переменными, - это использовать поведение Terraform по умолчанию для использования переменные среды для установки переменных TF, например,

variable "sensitive_variable" {
  type = "string"
}
sensitive_var=$(curl url/with/remote/value)
export TF_VAR_sensitive_variable=$sensitive_var
terraform apply

Terraform 13 был выпущен после того, как был задан этот вопрос, и позволяет помечать переменные как sensitive и не показывать их в консоли.

https://www.terraform.io/docs/configuration/outputs.html#sensitive-suppressing-values-in-cli-output

Можем ли мы отметить это как принятый ответ?

Jason Fry 13.12.2021 20:03

Другие вопросы по теме