---
metadata:
  - name: generator
    content: Diplodoc Platform v5.63.0
alternate:
  - ru/concepts/secrets-instance/rotation
  - href: ru/concepts/secrets-instance/rotation.md
    type: text/markdown
    title: Markdown version
csp:
  - script-src:
      - https://mc.yandex.ru
    img-src:
      - https://mc.yandex.ru
    connect-src:
      - https://mc.yandex.ru
      - wss://mc.yandex.ru
    child-src:
      - 'blob:'
      - https://mc.yandex.ru
    frame-src:
      - 'blob:'
      - https://mc.yandex.ru
    frame-ancestors:
      - 'blob:'
      - https://mc.yandex.ru
canonical: ru/concepts/secrets-instance/rotation.html
title: Ротация секретов DataLens On-premises
description: >-
  В этом разделе приведена классификация секретов по возможности ротации
  секретов и описаны процедуры их обновления.
vcsPath: ru/concepts/secrets-instance/rotation.md
---

# Ротация секретов DataLens On-premises

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

| Категория                                          | Возможность ротации | Последствия |
| -------------------------------------------------- | ------------------- | ----------- |
| [🟢 Безопасная ротация](#safe-rotation)            | Можно ротировать   | Минимальное влияние на работу системы |
| [🟡 Ротация с последствиями](#unsafe-rotation)     | Можно ротировать   | Требуется учитывать побочные эффекты |
| [🔴 Ротация невозможна](#not-recommended-rotation) | Не рекомендуется   | Приводит к потере данных или неработоспособности |

Автоматическая ротация секретов не предусмотрена. Секреты сохраняются между обновлениями благодаря механизму `lookup` в [Helm-чарте](https://helm.sh/docs/topics/charts/), который переиспользует существующие значения из секретов Kubernetes.

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

* [Процедура ротации RSA-ключей аутентификации](#rsa-auth-rotation).
* [Процедура ротации мастер-токенов](#token-rotation).
* [Процедура ротации паролей БД (встроенный PostgreSQL)](#password-rotation).


## 🟢 Секреты с безопасной ротацией {#safe-rotation}

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

| Секрет                         | Процедура ротации                                 | Последствия |
| ------------------------------ | ------------------------------------------------- | ----------- |
| `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` | Ранее экспортированные воркбуки будут импортироваться с предупреждением |


## 🟡 Секреты с ротацией и последствиями {#unsafe-rotation}

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

| Секрет                                                   | Процедура ротации                                 | Последствия |
| -------------------------------------------------------- | ------------------------------------------------- | ----------- |
| `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` | ⚠️ Временная недоступность загрузки файлов до перезапуска всех подов |


## 🔴 Секреты, ротация которых не рекомендуется {#not-recommended-rotation}

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

| Секрет                                          | Почему нельзя ротировать                                                                    | Что делать при компрометации |
| ----------------------------------------------- | ------------------------------------------------------------------------------------------- | --------------------------- |
| `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-ключей аутентификации {#rsa-auth-rotation}

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

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

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

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


## Процедура ротации мастер-токенов {#token-rotation}

```bash
# 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) {#password-rotation}

{% note warning %}

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

{% endnote %}

```bash
# 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
```

<!-- source: ru/_includes/clickhouse-disclaimer.md -->
_ClickHouse® является зарегистрированным товарным знаком [ClickHouse, Inc](https://clickhouse.com)._
<!-- endsource: ru/_includes/clickhouse-disclaimer.md -->