Ротация секретов DataLens On-premises
Классификация по возможности ротации:
| Категория | Возможность ротации | Последствия |
|---|---|---|
| 🟢 Безопасная ротация | Можно ротировать | Минимальное влияние на работу системы |
| 🟡 Ротация с последствиями | Можно ротировать | Требуется учитывать побочные эффекты |
| 🔴 Ротация невозможна | Не рекомендуется | Приводит к потере данных или неработоспособности |
Автоматическая ротация секретов не предусмотрена. Секреты сохраняются между обновлениями благодаря механизму lookup в Helm-чарте, который переиспользует существующие значения из секретов Kubernetes.
При необходимости ротация выполняется вручную с учетом последствий для каждого типа секрета:
- Процедура ротации RSA-ключей аутентификации.
- Процедура ротации мастер-токенов.
- Процедура ротации паролей БД (встроенный PostgreSQL).
🟢 Секреты с безопасной ротацией
Эти секреты можно ротировать без значительных последствий. После ротации требуется перезапуск подов.
| Секрет | Процедура ротации | Последствия |
|---|---|---|
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
ClickHouse® является зарегистрированным товарным знаком ClickHouse, Inc.