Администрирование секретов
Последовательность выполнения
- Настройте секреты для консоли и воркера в ConfigMap.
- Назовите секреты для воркера.
- Настройте аннотации Vault Sidecar.
При использовании KV движка обязательно использование второй версии (KV2)
Настройки для консоли grdl-console.conf и воркера grdl-module.conf в ConfigMap в среде k8s
В таблице перечислены параметры конфигураций для консоли и воркера:
| Имя | Компоненты | Описание | Тип | Значение по-умолчанию | Ограничения |
|---|---|---|---|---|---|
| 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: Приложение завершает работу, если обновление секретов или зависимых от них объектов завершилось с ошибкой и попытки повторного чтения исчерпаны.
Правила названия секретов для воркера на k8s
- Имя файла, содержащего секрет для БД, должно содержать
db, например,db-1.properties. - Имя файла, содержащего PEM цепочку сертификатов (ssl.keystore.certificate.chain), должно содержать
kafka_cert. - Имя файла, содержащего PEM truststore (ssl.truststore.certificates), должно содержать
kafka_cacert. - Имя файла, содержащего PEM private key (ssl.keystore.key), должно содержать
kafka_private-key. - В названии директории, куда записывается файл с секретом, должна быть уникальная часть сетевого адреса ресурса.
Например, если настройка 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 на k8s
Создайте группу аннотаций для каждой БД как в примере для db-1.properties:
-
vault.hashicorp.com/agent-inject: 'true'включает инъекцию секретов с помощью Vault Agent. -
vault.hashicorp.com/agent-inject-secret-db-1.properties: 'true'включает инъекцию секретаdb-1.properties. -
vault.hashicorp.com/secret-volume-path-db-1.properties: /vault/secrets/databases/vm-gdev-db-psql-143.vdc11.db.dev.sbtзадает путь в файловой системе контейнера, куда будет помещен секретdb-1.properties. -
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 не меняются: эти ключи в файле ищет воркер для обновления секрета.
-
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 успешно, значит секреты настроены правильно.