Секреты DataLens On-premises
- Классификация секретов по обязательности
- Пример YAML-конфигурации
- Детальное описание секретов
- Генерация RSA-ключей вручную
- Формат DOCKER_CONFIG_JSON
- Использование внешнего секрета Kubernetes
- Ротация секретов
- Классификация по возможности ротации
- 🟢 Секреты с безопасной ротацией
- 🟡 Секреты с ротацией и последствиями
- 🔴 Секреты, ротация которых не рекомендуется
- Процедура ротации RSA-ключей аутентификации
- Процедура ротации мастер-токенов
- Процедура ротации паролей БД (встроенный PostgreSQL)
- Рекомендации по безопасности
- Полезные команды
В этом документе описаны все секреты, используемые при развертывании DataLens On-premises.
Секреты можно задать двумя способами:
- Через параметры в файле
values.yaml(рекомендуется для первичного развертывания). - Через внешний секрет 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: truefeatures.export.enabled: truefeatures.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.