Шифрование секретов ConnectorConfig (password/token) в БД

- EncryptedCharField (core/models/fields.py): прозрачное Fernet-шифрование
  на границе с БД, читатели и админка не меняются
- ConnectorConfig.password/token переведены на EncryptedCharField,
  колонки расширены под шифртекст
- Миграция 0004: расширение колонок -> шифрование существующих значений -> смена типа
- FIELD_ENCRYPTION_KEY в settings (default = SECRET_KEY); на проде задавать отдельно ДО migrate

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-23 15:31:37 +03:00
parent 4b61e78c16
commit b788bc2a7c
4 changed files with 131 additions and 3 deletions
+6
View File
@@ -10,6 +10,12 @@ environ.Env.read_env(BASE_DIR / '.env')
SECRET_KEY = env('SECRET_KEY')
ALLOWED_HOSTS = env.list('ALLOWED_HOSTS', default=[])
# Ключ для шифрования секретных полей в БД (EncryptedCharField: пароли/токены
# коннекторов, access-токены Mattermost). Задавайте ОТДЕЛЬНО от SECRET_KEY —
# тогда утечка SECRET_KEY не раскрывает секреты at-rest. При отсутствии
# core.utils.crypto делает fallback на SECRET_KEY (см. предупреждение ниже).
FIELD_ENCRYPTION_KEY = env('FIELD_ENCRYPTION_KEY', default=env('SECRET_KEY'))
# Базовый URL портала — используется для абсолютных ссылок в уведомлениях
# (например, Mattermost-бот шлёт ссылку на задачу)
PORTAL_BASE_URL = env('PORTAL_BASE_URL', default='http://localhost:8000')