Ужесточить контейнеры сервисов

Прикладные образы работают non-root (deal, UID 10001, HOME=/tmp); в compose добавлены read_only root FS, tmpfs /tmp, no-new-privileges, cap_drop ALL и лимиты mem/cpus. Логи stateless-сервисов вынесены в /tmp/logs. Проверено compose config (dev/prod/observability).
This commit is contained in:
Rustam Khalimov
2026-09-11 17:39:45 +03:00
parent d2b716bbf4
commit 38561528ab
9 changed files with 99 additions and 3 deletions
@@ -428,8 +428,15 @@ DEAL_MTLS_ENABLED=0|1 DEAL_MTLS_CERT_PASSWORD=... DEAL_DEFAULT_AI_BU
- Криптография/код: пароли Argon2id; секреты настроек AES-256-GCM (`enc:`, ключ
`DEAL_ENCRYPTION_KEY`); сессии Telegram AES-256-GCM (`DEAL_TELEGRAM_SESSION_KEY`); SQL
параметризуется; секреты в логи/аудит не пишутся.
- **Hardening контейнеров (BL-IMG-HARDEN, 2026-09-11):** прикладные образы (core/telegram/ai/ml/storage)
работают non-root (пользователь `deal`, UID 10001) с `HOME=/tmp`; в compose заданы `read_only: true`,
`tmpfs: /tmp`, `security_opt: no-new-privileges`, `cap_drop: ALL` и лимиты `mem_limit`/`cpus` (якорь
`x-service-hardening`). Данные — в именованных volume (`/app/data` core, `/data/sessions` telegram,
`/data/ml` ml); логи stateless-сервисов — `DEAL_LOGS_DIR=/tmp/logs` (tmpfs), у core — volume
`/app/data/logs`. Проверено `docker compose config` (dev и prod, включая профиль observability);
живой подъём с этими ограничениями — ⚠ Manual.
- **Вне этапа (не настроено; заделы §11/roadmap):** Cloudflare (конфигурация вне кода — шапка
Caddyfile), k8s, non-root/read-only-дефолты образов, биллинг, UI админок, саморегистрация.
Caddyfile), k8s, биллинг, UI админок, саморегистрация.
---