Секреты DataLens On-premises

В этом документе описаны все секреты, используемые при развертывании DataLens On-premises.

Секреты можно задать двумя способами:

  1. Через параметры в файле values.yaml (рекомендуется для первичного развертывания).
  2. Через внешний секрет Kubernetes, указав ссылку в secrets.ref.

При использовании скрипта ./init.sh секреты генерируются автоматически при первом развертывании и сохраняются в секретах кластера Kubernetes.

Классификация секретов по обязательности

🔴 Обязательные секреты (RSA-ключи аутентификации)

Эти секреты обязательны при включенной аутентификации (features.auth.enabled: true — включена по умолчанию).

Секрет Автогенерация Формат Описание
AUTH_TOKEN_PRIVATE_KEY ✅ При первом развертывании RSA 4096-bit PEM Приватный ключ для подписи JWT-токенов аутентификации
AUTH_TOKEN_PUBLIC_KEY ✅ При первом развертывании RSA 4096-bit PEM Публичный ключ для верификации JWT-токенов

Примечание

При использовании ./init.sh эти ключи генерируются автоматически. Для повторной генерации используйте флаг --auth-rsa-gen.

🟡 Условно обязательные секреты

Секреты для Temporal (импорт или экспорт воркбуков)

Эти секреты обязательны при включении одной из функций:

  • features.meta_manager.enabled: true
  • features.export.enabled: true
  • features.usage_tracking.enabled: true
Секрет Автогенерация Формат Описание
TEMPORAL_AUTH_PRIVATE_KEY ✅ При первом развертывании RSA 4096-bit PEM Приватный ключ для аутентификации в Temporal
TEMPORAL_AUTH_PUBLIC_KEY ✅ При первом развертывании RSA 4096-bit PEM Публичный ключ для аутентификации в Temporal

Примечание

Для повторной генерации используйте флаг --temporal-rsa-gen.

Секрет для приватного реестра docker-образов

Секрет Автогенерация Формат Когда обязателен
DOCKER_CONFIG_JSON JSON (docker config) При registry.private: true и если не указан registry.docker_config.secret.ref

🟢 Автогенерируемые секреты

Эти секреты автоматически генерируются при первом развертывании, если не указаны явно. Значения сохраняются в секретах Kubernetes и переиспользуются при последующих развертываниях.

Секреты аутентификации и безопасности

Секрет Длина Формат Описание
AUTH_ADMIN_PASSWORD 32 символа alphanumeric Пароль администратора системы (пользователь admin)
AUTH_CALLBACK_COOKIE_SECRET 32 символа alphanumeric Ключ шифрования Cookie для callback-ов аутентификации
CSRF_SECRET 16 символов alphanumeric Ключ генерации CSRF-токенов для защиты от CSRF-атак

Мастер-токены межсервисного взаимодействия

Секрет Длина Формат Описание
AUTH_MASTER_TOKEN 32 символа alphanumeric Токен авторизации запросов к сервису аутентификации
US_MASTER_TOKEN 32 символа alphanumeric Токен авторизации запросов к сервису United Storage
FILE_UPLOADER_MASTER_TOKEN 32 символа alphanumeric Токен авторизации запросов к сервису загрузки файлов

Ключи шифрования

Секрет Длина Формат Описание
CONTROL_API_CRYPTO_KEY 32 символа base64(alphanumeric) Ключ шифрования конфиденциальных данных подключений (пароли, токены)
EXPORT_DATA_VERIFICATION_KEY 32 символа alphanumeric Ключ верификации целостности данных при импорте и экспорте воркбуков

Пароли PostgreSQL

Секрет Длина Описание
POSTGRES_PASSWORD_ROOT 32 символа Пароль суперпользователя PostgreSQL
POSTGRES_PASSWORD_US 32 символа Пароль для БД сервиса United Storage (метаинформация)
POSTGRES_PASSWORD_COMPENG 32 символа Пароль для БД движка вычислений
POSTGRES_PASSWORD_AUTH 32 символа Пароль для БД сервиса аутентификации
POSTGRES_PASSWORD_TEMPORAL 32 символа Пароль для БД Temporal
POSTGRES_PASSWORD_META_MANAGER 32 символа Пароль для БД сервиса Meta Manager
POSTGRES_PASSWORD_DEMO 32 символа Пароль для БД демо-данных

Пароли инфраструктурных компонентов

Секрет Длина Когда используется Описание
CLICKHOUSE_PASSWORD по умолчанию 32 символа При features.files.enabled или features.usage_tracking.enabled Пароль пользователя ClickHouse®
REDIS_PASSWORD по умолчанию 64 символа При features.files.enabled, features.cache.enabled или features.background_exports.enabled Пароль для Redis
S3_ACCESS_KEY_ID строго 32 символа При features.files.enabled или features.background_exports.enabled Access Key ID для S3 (MinIO)
S3_SECRET_ACCESS_KEY строго 64 символа При features.files.enabled или features.background_exports.enabled Secret Access Key для S3 (MinIO)

⚪ Опциональные секреты

Секрет Формат Описание
AUTH_PROVIDERS_CONFIG JSON array Конфигурация внешних провайдеров аутентификации (LDAP, OIDC). По умолчанию — пустой массив []
secrets.ref string Ссылка на существующий Kubernetes секрет для использования вместо создания нового

Пример YAML-конфигурации

secrets:
  ref: null                              # Ссылка на внешний секрет Kubernetes
  #
  # === RSA-ключи аутентификации (обязательные) ===
  AUTH_TOKEN_PRIVATE_KEY: null           # Генерируется автоматически при первом развертывании
  AUTH_TOKEN_PUBLIC_KEY: null            # Генерируется автоматически при первом развертывании
  AUTH_PROVIDERS_CONFIG: null            # JSON-массив провайдеров (опционально)
  AUTH_ADMIN_PASSWORD: null              # Пароль admin (генерируется автоматически)
  AUTH_CALLBACK_COOKIE_SECRET: null      # Генерируется автоматически
  #
  # === Безопасность ===
  CSRF_SECRET: null                      # Генерируется автоматически
  #
  # === Мастер-токены ===
  AUTH_MASTER_TOKEN: null                # Генерируется автоматически
  US_MASTER_TOKEN: null                  # Генерируется автоматически
  FILE_UPLOADER_MASTER_TOKEN: null       # Генерируется автоматически
  EXPORT_DATA_VERIFICATION_KEY: null     # Генерируется автоматически
  #
  # === Ключи шифрования ===
  CONTROL_API_CRYPTO_KEY: null           # Генерируется автоматически
  #
  # === Docker Registry ===
  DOCKER_CONFIG_JSON: null               # Обязателен при registry.private: true
  #
  # === PostgreSQL ===
  POSTGRES_PASSWORD_ROOT: null           # Генерируется автоматически
  POSTGRES_PASSWORD_US: null             # Генерируется автоматически
  POSTGRES_PASSWORD_COMPENG: null        # Генерируется автоматически
  POSTGRES_PASSWORD_AUTH: null           # Генерируется автоматически
  POSTGRES_PASSWORD_TEMPORAL: null       # Генерируется автоматически
  POSTGRES_PASSWORD_META_MANAGER: null   # Генерируется автоматически
  POSTGRES_PASSWORD_DEMO: null           # Генерируется автоматически
  #
  # === RSA-ключи Temporal (для импорта/экспорта) ===
  TEMPORAL_AUTH_PRIVATE_KEY: null        # Генерируется при включении features.export
  TEMPORAL_AUTH_PUBLIC_KEY: null         # Генерируется при включении features.export
  #
  # === Инфраструктурные компоненты ===
  CLICKHOUSE_PASSWORD: null              # Генерируется автоматически
  REDIS_PASSWORD: null                   # Генерируется автоматически
  S3_ACCESS_KEY_ID: null                 # Генерируется автоматически
  S3_SECRET_ACCESS_KEY: null             # Генерируется автоматически

Детальное описание секретов

Параметр Тип Значение по умолчанию Обязательность Описание
secrets.ref string null ❌ Опционально (обязательно при использовании ArgoCD) Ссылка на внешний секрет Kubernetes. При указании остальные секреты игнорируются.
secrets.AUTH_TOKEN_PRIVATE_KEY string null 🔴 Обязательно Приватный ключ RSA (4096-bit, PEM) для подписи JWT-токенов аутентификации
secrets.AUTH_TOKEN_PUBLIC_KEY string null 🔴 Обязательно Публичный ключ RSA (4096-bit, PEM) для проверки JWT-токенов
secrets.AUTH_PROVIDERS_CONFIG string [] ❌ Опционально Конфигурация провайдеров аутентификации в формате JSON. См. ./help/auth-provider-config.example.json
secrets.AUTH_ADMIN_PASSWORD string автогенерация ✅ Автогенерация Пароль администратора. Получить: ./init.sh --get-admin-password
secrets.AUTH_CALLBACK_COOKIE_SECRET string автогенерация ✅ Автогенерация Ключ шифрования Cookie для callback-ов OAuth/OIDC
secrets.CSRF_SECRET string автогенерация ✅ Автогенерация Ключ шифрования CSRF-токена для защиты форм
secrets.AUTH_MASTER_TOKEN string автогенерация ✅ Автогенерация Мастер-токен для межсервисных запросов к auth-сервису
secrets.US_MASTER_TOKEN string автогенерация ✅ Автогенерация Мастер-токен для межсервисных запросов к United Storage
secrets.FILE_UPLOADER_MASTER_TOKEN string автогенерация ✅ Автогенерация Мастер-токен для межсервисных запросов к file-uploader
secrets.EXPORT_DATA_VERIFICATION_KEY string автогенерация ✅ Автогенерация Ключ проверки целостности данных при импорте и экспорте
secrets.CONTROL_API_CRYPTO_KEY string автогенерация ✅ Автогенерация Ключ шифрования конфиденциальных данных подключений (base64)
secrets.DOCKER_CONFIG_JSON string {} 🟡 Условно Конфигурация доступа к приватному реестру Docker-образов. Формат: Docker config JSON
secrets.POSTGRES_PASSWORD_ROOT string автогенерация ✅ Автогенерация Пароль root-пользователя PostgreSQL
secrets.POSTGRES_PASSWORD_US string автогенерация ✅ Автогенерация Пароль для БД сервиса United Storage
secrets.POSTGRES_PASSWORD_COMPENG string автогенерация ✅ Автогенерация Пароль для БД движка вычислений
secrets.POSTGRES_PASSWORD_AUTH string автогенерация ✅ Автогенерация Пароль для БД сервиса аутентификации
secrets.POSTGRES_PASSWORD_TEMPORAL string автогенерация ✅ Автогенерация Пароль для БД Temporal
secrets.POSTGRES_PASSWORD_META_MANAGER string автогенерация ✅ Автогенерация Пароль для БД сервиса Meta Manager
secrets.POSTGRES_PASSWORD_DEMO string автогенерация ✅ Автогенерация Пароль для БД демо-данных
secrets.TEMPORAL_AUTH_PRIVATE_KEY string null 🟡 Условно Приватный ключ RSA для Temporal. Обязателен при features.export.enabled
secrets.TEMPORAL_AUTH_PUBLIC_KEY string null 🟡 Условно Публичный ключ RSA для Temporal. Обязателен при features.export.enabled
secrets.CLICKHOUSE_PASSWORD string автогенерация ✅ Автогенерация Пароль пользователя ClickHouse®
secrets.REDIS_PASSWORD string автогенерация ✅ Автогенерация Пароль для Redis
secrets.S3_ACCESS_KEY_ID string автогенерация ✅ Автогенерация Access Key ID для S3-совместимого хранилища
secrets.S3_SECRET_ACCESS_KEY string автогенерация ✅ Автогенерация Secret Access Key для S3-совместимого хранилища

Генерация RSA-ключей вручную

Если требуется сгенерировать RSA-ключи вручную, используйте следующие команды:

# Генерация приватного ключа (4096 bit)
openssl genpkey -algorithm RSA -pkeyopt "rsa_keygen_bits:4096" -out private.pem

# Извлечение публичного ключа
openssl rsa -in private.pem -pubout -out public.pem

# Просмотр содержимого для вставки в values.yaml
cat private.pem
cat public.pem

При указании в values.yaml используйте многострочный формат YAML:

secrets:
  AUTH_TOKEN_PRIVATE_KEY: |
    -----BEGIN PRIVATE KEY-----
    MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQC...
    ...
    -----END PRIVATE KEY-----
  AUTH_TOKEN_PUBLIC_KEY: |
    -----BEGIN PUBLIC KEY-----
    MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA...
    ...
    -----END PUBLIC KEY-----

Формат DOCKER_CONFIG_JSON

Пример конфигурации для приватного реестра:

{
  "auths": {
    "registry.example.com": {
      "username": "user",
      "password": "password",
      "auth": "base64(user:password)"
    }
  }
}

Также см. пример в файле ./help/docker-config.example.json.


Использование внешнего секрета Kubernetes

Если секреты уже существуют в кластере Kubernetes, укажите ссылку на секрет:

secrets:
  ref: my-existing-secret

В этом случае все остальные значения в секции secrets будут игнорироваться, и система будет использовать значения из указанного секрета Kubernetes.

Внешний секрет должен содержать все необходимые ключи с соответствующими именами.

Ротация секретов

Автоматическая ротация секретов не предусмотрена. Секреты сохраняются между обновлениями благодаря механизму lookup в Helm-чарте, который переиспользует существующие значения из секретов Kubernetes.

При необходимости ротация выполняется вручную с учетом последствий для каждого типа секрета.

Классификация по возможности ротации

Категория Возможность ротации Последствия
🟢 Безопасная ротация Можно ротировать Минимальное влияние на работу системы
🟡 Ротация с последствиями Можно ротировать Требуется учитывать побочные эффекты
🔴 Ротация невозможна Не рекомендуется Приводит к потере данных или неработоспособности

🟢 Секреты с безопасной ротацией

Эти секреты можно ротировать без значительных последствий. После ротации требуется перезапуск подов.

Секрет Процедура ротации Последствия
AUTH_CALLBACK_COOKIE_SECRET Изменить в values.yaml и выполнить helm upgrade OAuth/OIDC callback-и в процессе аутентификации станут недействительными
DOCKER_CONFIG_JSON Изменить в values.yaml и выполнить helm upgrade Нет влияния на работающие поды
AUTH_PROVIDERS_CONFIG Изменить в values.yaml и выполнить helm upgrade Нет влияния (конфигурация провайдеров)
EXPORT_DATA_VERIFICATION_KEY Изменить в values.yaml и выполнить helm upgrade Ранее экспортированные воркбуки будут импортироваться с предупреждением

🟡 Секреты с ротацией и последствиями

Эти секреты можно ротировать, но это приведет к определенным побочным эффектам.

Секрет Процедура ротации Последствия
AUTH_TOKEN_PRIVATE_KEY / AUTH_TOKEN_PUBLIC_KEY ./init.sh --auth-rsa-gen ⚠️ Все активные пользовательские сессии станут недействительными. Пользователям потребуется повторный вход в систему
CSRF_SECRET Изменить в values.yaml и выполнить helm upgrade ⚠️ Запросы данных будут возвращать ошибки до тех пор, пока апгрейд не завершится
TEMPORAL_AUTH_PRIVATE_KEY / TEMPORAL_AUTH_PUBLIC_KEY ./init.sh --temporal-rsa-gen ⚠️ Выполняющиеся задачи Temporal могут завершиться с ошибкой. Рекомендуется дождаться завершения всех задач перед ротацией
AUTH_MASTER_TOKEN Изменить в values.yaml и выполнить helm upgrade ⚠️ Временная недоступность сервиса аутентификации до перезапуска всех зависимых подов
US_MASTER_TOKEN Изменить в values.yaml и выполнить helm upgrade ⚠️ Временная недоступность United Storage до перезапуска всех зависимых подов
FILE_UPLOADER_MASTER_TOKEN Изменить в values.yaml и выполнить helm upgrade ⚠️ Временная недоступность загрузки файлов до перезапуска всех подов

Ротация этих секретов приводит к потере данных или неработоспособности системы без дополнительных действий.

Секрет Почему нельзя ротировать Что делать при компрометации
AUTH_ADMIN_PASSWORD 🚫 Изменить пароль администратора возможно только через интерфейс DataLens
CONTROL_API_CRYPTO_KEY 🚫 Используется для шифрования паролей и токенов в подключениях к источникам данных. При смене ключа все существующие подключения станут нечитаемыми Можно пересоздать через восстановление из бэкапа
POSTGRES_PASSWORD_* 🚫 Пароли используются как в приложении, так и в самой базе данных. Изменение только в секретах приведет к ошибкам подключения Требуется синхронная смена пароля в PostgreSQL и в секретах. При использовании встроенного PostgreSQL — сложная процедура с даунтаймом
CLICKHOUSE_PASSWORD 🚫 Аналогично PostgreSQL — пароль должен совпадать в БД и секретах Синхронная смена в ClickHouse® и секретах
REDIS_PASSWORD 🚫 Аналогично — пароль должен совпадать в Redis и секретах Синхронная смена в Redis и секретах
S3_ACCESS_KEY_ID / S3_SECRET_ACCESS_KEY 🚫 Креденшалы должны совпадать с настройками S3/MinIO Синхронная смена в S3 и секретах

Также при обновлении паролей к БД можно создать нового пользователя и пароль с аналогичными правами доступа и мигрировать на него нагрузку без даунтайма.

Процедура ротации RSA-ключей аутентификации

# 1. (Опционально) Предупредить пользователей о необходимости повторного входа

# 2. Сгенерировать новые ключи и выполнить обновление
./init.sh --auth-rsa-gen

# 3. Убедиться, что все поды перезапустились
./init.sh --kubectl get pods

# 4. Проверить работоспособность аутентификации

Процедура ротации мастер-токенов

# 1. Подготовить новые значения токенов (32 символа, alphanumeric)
NEW_TOKEN=$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | head -c 32)

# 2. Создать или обновить values.yaml с новыми значениями
# secrets:
#   US_MASTER_TOKEN: "<новый токен>"

# 3. Выполнить обновление
./init.sh --values ./my-values.yaml

# 4. Убедиться, что все поды перезапустились
./init.sh --kubectl rollout status deployment --timeout=300s

Процедура ротации паролей БД (встроенный PostgreSQL)

Важно

Эта процедура требует даунтайма и должна выполняться с особой осторожностью.

# 1. Создать резервную копию
./init.sh --dump-postgres

# 2. Подключиться к PostgreSQL
./init.sh --pg-sql

# 3. Изменить пароль пользователя в PostgreSQL
ALTER USER "pg-us-user" WITH PASSWORD 'новый_пароль';

# 4. Обновить секрет в values.yaml
# secrets:
#   POSTGRES_PASSWORD_US: "новый_пароль"

# 5. Выполнить обновление
./init.sh --values ./my-values.yaml

# 6. Перезапустить поды, использующие этот пароль
./init.sh --kubectl rollout restart deployment

Рекомендации по безопасности

  • Храните секреты в защищенном месте — используйте внешние системы управления секретами (HashiCorp Vault, Yandex Lockbox) и ссылайтесь на них через secrets.ref.
  • Не ротируйте CONTROL_API_CRYPTO_KEY без необходимости — это приведет к потере доступа к существующим подключениям, в настоящий момент механизм бесшовной ротации не поддержан.
  • Планируйте ротацию на периоды низкой нагрузки — ротация некоторых секретов требует перезапуска сервисов.
  • Создавайте резервные копии перед ротацией — особенно перед изменением паролей БД.

Полезные команды

# Получить пароль администратора
./init.sh --get-admin-password

# Сгенерировать новые RSA-ключи для аутентификации
./init.sh --auth-rsa-gen

# Сгенерировать новые RSA-ключи для Temporal
./init.sh --temporal-rsa-gen

# Указать файл с конфигурацией провайдеров аутентификации
./init.sh --auth-providers-config ./my-auth-config.json

# Создать резервную копию PostgreSQL перед ротацией
./init.sh --dump-postgres

# Проверить статус подов после ротации
./init.sh --kubectl get pods

# Посмотреть логи для диагностики проблем
./init.sh --stern .

ClickHouse® является зарегистрированным товарным знаком ClickHouse, Inc.