Перейти к основному содержимому

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

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

  1. Настройте секреты для консоли и воркера в ConfigMap.
  2. Назовите секреты для воркера.
  3. Настройте аннотации Vault Sidecar.
Внимание!

При использовании KV движка обязательно использование второй версии (KV2)

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

В таблице перечислены параметры конфигураций для консоли и воркера:

ИмяКомпонентыОписаниеТипЗначение по-умолчаниюОграничения
grdl-hot-reload-enableConsole/WorkerВключение/выключение работы с секретамиbooleantrueЗначение этого параметра в текущей версии должно быть одинаковым для воркера и консоли
grdl-hot-reload-fail-safe-enableConsole/WorkerПереключение стратегий: true - fail-safe, false - fail-fastbooleantrue
grdl-hot-reload-retry-countConsole/WorkerКоличество попыток повторно прочитать и применить секрет при неудачеint10Влияет на приложение только при включенном fail-fast, иначе количество попыток прочитать и применить секрет не ограничено
grdl-hot-reload-poll-intervalConsole/WorkerВремя в миллисекундах, через которое происходит попытка обновления секретов, если произошло обновлениеint5000
grdl-hot-reload-pg-secret-pathConsoleПуть до файла на диске с секретом от базы конфигурацийstring
grdl-console.hot-reload-audit-secret-pathConsoleПуть до файла на диске с секретом для Аудитаstring
grdl-hot-reload-dir-kafkaWorkerПуть до директории на диске с директориями с секретами от Kafkastring/vault/secrets/kafkaПодробнее
grdl-hot-reload-dir-postgresWorkerПуть до директории на диске с директориями с секретами от Postgresstring/vault/secrets/databasesПодробнее
подсказка

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

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

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

  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 на k8s​

Создайте группу аннотаций для каждой БД как в примере для 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 успешно, значит секреты настроены правильно.