Агент. Режим супервизора
Режим супервизора процессов 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"
}