Для улучшения работы сайта мы используем файлы cookies. Оставаясь на сайте, вы соглашаетесь с политикой обработки персональных данных.

Агент. Режим супервизора

Режим супервизора процессов StarVault Agent позволяет внедрять секреты StarVault в процесс через переменные среды с использованием разметки шаблона Consul.

Если вы запускаете свои приложения в кластере Kubernetes, мы рекомендуем оценить Vault Secrets Operator и Vault Agent Sidecar Injector.

Режим супервизора процесса StarVault Agent находится в стадии публичной бета-версии. Пожалуйста, отправьте свой отзыв, открыв вопрос GitHub здесь.

1. Функциональность

StarVault Agent внедрит секреты, указанные в блоках конфигурации env_template, в качестве переменных среды в дочерний процесс, указанный в блоке exec.

При запуске StarVault Agent в режиме супервизора процесса он будет ждать, пока каждый шаблон переменной среды не будет отрендерен хотя бы один раз, прежде чем запускать процесс. Если restart_on_secret_changes установлен на always (по умолчанию), Agent перезапустит процесс всякий раз, когда будет обнаружено обновление внедренного секрета. Это может быть как статическое обновление секрета (выполненное на static_secret_render_interval), так и динамический секрет, срок действия которого близок к истечению.

Во многих отношениях StarVault Agent будет зеркалировать дочерний процесс. Стандартные потоки ввода и вывода (stdin / stdout / stderr) перенаправляются в дочерний процесс. Кроме того, StarVault Agent завершит работу, когда дочерний процесс завершит работу самостоятельно с тем же кодом выхода.

2. Конфигурация

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

Режим супервизора процесса требует по крайней мере одного блока env_template и ровно одного блока exec верхнего уровня. Он несовместим с обычными записями шаблона файла.

2.1. env_template

Блок конфигурации env_template сопоставляет шаблон, указанный в поле содержимого или указанный в поле источника, с именем переменной среды в заголовке блока конфигурации. Он использует тот же язык шаблонов, что и шаблоны файлов, но допускает только подмножество своих параметров конфигурации:

  • environment variable name (string: <required>) — имя переменной среды, с которой должно сопоставляться содержимое шаблона.

  • contents (string: "") — эта опция позволяет встраивать содержимое шаблона в файл конфигурации, а не указывать исходный путь к файлу шаблона. Это полезно для коротких шаблонов. Эта опция является взаимоисключающей с опцией источника.

  • source (string: "") — путь на диске для использования в качестве входного шаблона. Эта опция обязательна, если не используется опция содержимого.

  • error_on_missing_key (bool: false) — выход с ошибкой при доступе к несуществующему полю/ключу структуры или карты. Поведение по умолчанию будет печатать <no value> при доступе к несуществующему полю. Настоятельно рекомендуется установить это значение в «true». Также см. exit_on_retry_failure глобальной конфигурации шаблона агента хранилища.

  • left_delimiter (string: "{{") — разделитель для использования в шаблоне. Значение по умолчанию — «{{», но для некоторых шаблонов может быть проще использовать другой разделитель, который не конфликтует с самим выходным файлом.

  • right_delimiter (string: "}}") — разделитель для использования в шаблоне. Значение по умолчанию — «}}», но для некоторых шаблонов может быть проще использовать другой разделитель, который не конфликтует с самим выходным файлом.

2.2. exec

Блок exec верхнего уровня имеет следующие записи конфигурации:

  • command (string array: required) — укажите команду для дочернего процесса с необязательными аргументами. Путь к исполняемому файлу должен быть либо абсолютным, либо относительным к текущему рабочему каталогу.

  • restart_on_secret_changes (string: "always") — управляет тем, будет ли агент перезапускать дочерний процесс при изменении секрета. Существует два типа изменений секрета, относящихся к этой конфигурации: статическое обновление секрета (на static_secret_render_interval) и динамический секрет, срок действия которого близок к истечению. Конфигурация поддерживает два варианта: always и never.

  • restart_stop_signal (string: "SIGTERM") — сигнал для отправки дочернему процессу, когда секрет был обновлен и процесс необходимо перезапустить. У процесса есть 30 секунд после отправки этого сигнала, пока не будет отправлен сигнал SIGKILL, чтобы принудительно остановить дочерний процесс.

3. Пример конфигурации

Следующий пример был сгенерирован с помощью starvault agent generate-config, инструмента-помощника конфигурации. При такой конфигурации StarVault Agent запустит дочерний процесс (./my-app arg1 arg2) с двумя дополнительными переменными среды (FOO_USER и FOO_PASSWORD), заполненными секретами из StarVault:

auto_auth {

  method {
    type = "token_file"

    config {
      token_file_path = "/Users/avean/.vault-token"
    }
  }
}

template_config {
  static_secret_render_interval = "5m"
  exit_on_retry_failure         = true
}

vault {
  address = "http://localhost:8200"
}

env_template "FOO_PASSWORD" {
  contents             = "{{ with secret \"secret/data/foo\" }}{{ .Data.data.password }}{{ end }}"
  error_on_missing_key = true
}
env_template "FOO_USER" {
  contents             = "{{ with secret \"secret/data/foo\" }}{{ .Data.data.user }}{{ end }}"
  error_on_missing_key = true
}

exec {
  command                   = ["./my-app", "arg1", "arg2"]
  restart_on_secret_changes = "always"
  restart_stop_signal       = "SIGTERM"
}