Администрирование секретов#

Последовательность выполнения#

  1. Настройте секреты для консоли и воркера в ConfigMap.

  2. Назовите секреты для воркера.

  3. Настройте аннотации Vault Sidecar.

Настройки для консоли grdl-console.conf и воркера grdl-module.conf в ConfigMap#

Имя

Компоненты

Описание

Тип

Значение по-умолчанию

Ограничения

grdl-hot-reload-enable

Console/Worker

Включение/выключение работы с секретами

boolean

true

Значение этого параметра в текущей версии должно быть одинаковым для воркера и консоли

grdl-hot-reload-fail-safe-enable

Console/Worker

Переключение стратегий: true - fail-safe, false - fail-fast

boolean

true

grdl-hot-reload-retry-count

Console/Worker

Количество попыток повторно прочитать и применить секрет при неудаче

int

10

Влияет на приложение только при включенном fail-fast, иначе количество попыток прочитать и применить секрет не ограничено

grdl-hot-reload-poll-interval

Console/Worker

Время в миллисекундах, через которое происходит попытка обновления секретов, если произошло обновление

int

5000

grdl-hot-reload-pg-secret-path

Console

Путь до файла на диске с секретом от базы конфигураций

string

grdl-console.hot-reload-audit-secret-path

Console

Путь до файла на диске с секретом для Аудита

string

grdl-hot-reload-dir-kafka

Worker

Путь до директории на диске с директориями с секретами от Kafka

string

/vault/secrets/kafka

Подробнее

grdl-hot-reload-dir-postgres

Worker

Путь до директории на диске с директориями с секретами от Postgres

string

/vault/secrets/databases

Подробнее

fail-safe (рекомендуется): Приложение продолжает использовать старые секреты, если обновление секретов или зависимых от них объектов завершилось с ошибкой.

fail-fast: Приложение завершает работу, если обновление секретов или зависимых от них объектов завершилось с ошибкой и попытки повторного чтения исчерпаны.

Правила названия секретов для воркера#

  1. Имя файла, содержащего секрет для БД, должно содержать db, например, db-1.properties.

  2. Имя файла, содержащего PEM цепочку сертификатов (ssl.keystore.certificate.chain), должно содержать kafka_cert.

  3. Имя файла, содержащего PEM truststore (ssl.truststore.certificates), должно содержать kafka_cacert.

  4. Имя файла, содержащего PEM private key (ssl.keystore.key), должно содержать kafka_private-key.

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

Например, если настройка grdl-hot-reload-dir-postgres по умолчанию равна /vault/secrets/databases и есть две БД со следующими адресами:

  • jdbc:postgresql://vm-gdev-db-psql-143.vdc11.db.dev.sbt:5432/postgres;

  • jdbc:postgresql://vm-gdev-db-psql-144.vdc11.db.dev.sbt:5432/postgres;

будет два секрета по следующим путям:

  • /vault/secrets/databases/vm-gdev-db-psql-143.vdc11.db.dev.sbt/db-1.txt;

  • /vault/secrets/databases/vm-gdev-db-psql-144.vdc11.db.dev.sbt/db-2.txt.

Настройка аннотаций Vault Sidecar#

Создайте группу аннотаций для каждой БД как в примере для db-1.properties:

  1. vault.hashicorp.com/agent-inject: 'true' включает инъекцию секретов с помощью Vault Agent.

  2. vault.hashicorp.com/agent-inject-secret-db-1.properties: 'true' включает инъекцию секрета db-1.properties.

  3. vault.hashicorp.com/secret-volume-path-db-1.properties: /vault/secrets/databases/vm-gdev-db-psql-143.vdc11.db.dev.sbt задает путь в файловой системе контейнера, куда будет помещен секрет db-1.properties.

  4. vault.hashicorp.com/agent-inject-template-db-1.properties: | {{- with secret "<secret_path>/GRDL/KV2/vm-gdev-db-psql-143" -}} JDBC_USER={{ .Data.data.USER }} JDBC_PASSWORD={{ .Data.data.PASSWORD }} {{ end -}}

    задает шаблон для файла db-1.properties, для которого выполняется инъекция.

    JDBC_USER и JDBC_PASSWORD не меняются: эти ключи в файле ищет воркер для обновления секрета.

  5. vault.hashicorp.com/agent-inject-file-db-1.properties: db-1.properties указывает имя файла, который будет создан для секрета db-1.properties.

Настройте аналогичные аннотации для Kafka, для трех файлов:

  • kafka_cert;

  • kafka_cacert;

  • kafka_private-key.

Три файла лежат в одной директории, ассоциированной с адресом брокера, например: /vault/secrets/kafka/vm-gdev-db-kafka-120.vdc11.db.dev.sbt.

Для секрета Kafka шаблон инъекции будет отличаться, так как необходимо value секрета записать как бинарный файл:

vault.hashicorp.com/agent-inject-template-kafka_cacert-1.pem: |
{{- with secret "<secret_path>/GRDL/KV2/vm-gdev-db-kafka-120" -}}
{{ .Data.data.truststore }}
{{ end -}}

vault.hashicorp.com/agent-inject-template-kafka_cert-1.pem: |
{{- with secret "<secret_path>/GRDL/KV2/vm-gdev-db-kafka-120" -}}
{{ .Data.data.keystore }}
{{ end -}}

vault.hashicorp.com/agent-inject-template-kafka_private-key-1.pem: |
{{- with secret "<secret_path>/GRDL/KV2/vm-gdev-db-kafka-120" -}}
{{ .Data.data.key }}
{{ end -}}

Секрет для Аудита аналогичен секрету БД, но отличаются названия полей

AUDIT_SALT=some_salt
AUDIT_PASSWORD=some_password

Результат#

Работоспособность секретов для воркеров можно проверить с помощью тестирования соединение: если тестирование соединения к БД/Kafka успешно, значит секреты настроены правильно.

// todo: дополнить для воркеров на VM