diff --git a/HISTORY/2026-10-11-session-log.md b/HISTORY/2026-10-11-session-log.md index 74b2e6a..1e37d2d 100644 --- a/HISTORY/2026-10-11-session-log.md +++ b/HISTORY/2026-10-11-session-log.md @@ -205,3 +205,25 @@ consumer → per-tenant PostgreSQL → HTTP API. дедуп работают. Тестовые артефакты: устройство `e2e-nubes/dev1`, БД `tenant_e2e_nubes`. Осталось (не блокеры): Terraform на PROD; чистка тестовых артефактов e2e (по команде). + +## 9. Проверки безопасности/корректности развёрнутого IoT — PASS=12 FAIL=0 + +Скрипт `/tmp/e2e_neg.py` (тест-стенд, namespace `e2e-nubes`, устройство `dev1`): + +| # | Проверка | Результат | +|---|---|---| +| 1 | MQTT auth: верные креды | `CONNACK rc=0` ✅ | +| 2 | MQTT auth: неверный пароль | `rc=4` (bad user/password) ✅ | +| 3 | MQTT auth: неизвестный пользователь | `rc=5` (not authorized) ✅ | +| 4 | API без токена | `401` ✅ | +| 5 | API: `sub` ≠ namespace в пути | `403` ✅ | +| 6 | API: подделанная подпись JWT | `401` ✅ | +| 7 | MQTT ACL: публикация в чужой топик `other-ns/telemetry/x` | соединение разорвано (`deny_action=disconnect`) ✅ | +| 8 | Дедуп: два одинаковых payload | `iot_telemetry` 1→2 (+1, не +2), `message_id` SHA256 ✅ | +| 9 | `PATCH enabled=false` | `200` ✅ | +| 10 | MQTT auth выключенного устройства | `rc=5` ✅ | +| 11 | `PATCH enabled=true` | `200` ✅ | +| 12 | MQTT auth после включения | `rc=0` ✅ | + +Вывод: auth (bcrypt из PG), ACL (own-topic only, disconnect на нарушение), tenant-изоляция API +(`namespace == sub`), проверка подписи JWT и дедуп повторов — работают на развёрнутом стенде.