Работа с секретами#

Для хранения секретов доступно две системы:

  • Hashicorp Vault и совместимые по интерфейсам системы хранения секретов, к примеру Secret Management System (Secman).

  • либо стандартный механизм k8s (манифесты kind: Secret с типом Opaque).

Использование Hashicorp Vault#

Подключение DropApp (k8s) к Hashicorp Vault#

Настройка непосредственно системы Hashicorp Vault и интеграция ее с платформой DropApp выходит за рамки данного руководства, предполагается что интеграция уже настроена, создана область и создан объект секрета, например с именем sowa_k8s.

В деплойменте, подключение секретов из Hashicorp Vault производится посредством аннотаций, все секреты по умолчанию декодируются из base64.

Для интеграции пользователю необходимо заполнить переменные в values.yaml:

secrets:
  secman:
    enabled: true
    namespace: "NS_NAME" # Namespace в системе Hashicorp Vault
    role: "role-name" # Роль пользователя для доступа из платформы DropApp к Hashicorp Vault
    path: "NS_NAME/secret_name" # Путь к объекту секрета в системе Hashicorp Vault

Файлы, которые необходимо передать в приложение, создаются внутри одного объекта секрета в виде пар ключ-значение.

  • Ключ — используется как имя файла.

  • Значение — должно быть закодировано в base64.

Пример:

data:
  tls.jks: <Base64-содержимое сертификата>
  truststore.jks: <Base64-содержимое сертификата>

Далее эти ключи указываются в переменных там, где они используются. Например, для указания сертификатов:

app:
  secret_keyname_KStore: "tls.jks"
  secret_keyname_TStore: "truststore.jks"

Использование стандартных манифестов Kubernetes#

Для использования секретов в виде стандартных манифестов Kubernetes, активируйте параметр secrets.k8s.enabled и укажите название созданного объекта с секретами.

secrets:
  secman:
    enabled: false <--- пар-р `secman` необходимо выключить
  k8s:
    enabled: true
    name: sowa-secrets

При использовании манифестов:

  • Создайте объект типа Secret с типом Opaque.

  • Запишите в него пары ключ-значение, где значения — это содержимое файлов, закодированное в base64.

Если вы создаете секрет через интерфейс или CLI, кодирование в base64 происходит автоматически — дополнительная обработка не требуется.

Пример манифеста с секретами:

kind: Secret
apiVersion: v1
metadata:
  name: sowa-secrets
data:
  tls.jks: >-
    <Base64-содержимое сертификата>
  truststore.jks: >-
    <Base64-содержимое сертификата>
type: Opaque

Все содержимое указанного секрета будет смонтированно в папку /sowa/profile_storage/custom/<profilename>/, внутри пода и доступно для использования в конфигурации профиля SOWA:

Образец использования файлов из секрета в конфиг файле профиля:

service_rabbitmq_proxy:
  - id: 1
    keystore: tls.jks
    truststore: truststore.jks