docs(history): проверки развёрнутого IoT — PASS=12 FAIL=0 (auth/ACL/tenant-изоляция/дедуп)

This commit is contained in:
Repinoid
2026-10-11 19:49:33 +03:00
parent 8e35f9fe5c
commit fa16b02455
+22
View File
@@ -205,3 +205,25 @@ consumer → per-tenant PostgreSQL → HTTP API.
дедуп работают. Тестовые артефакты: устройство `e2e-nubes/dev1`, БД `tenant_e2e_nubes`. дедуп работают. Тестовые артефакты: устройство `e2e-nubes/dev1`, БД `tenant_e2e_nubes`.
Осталось (не блокеры): Terraform на PROD; чистка тестовых артефактов e2e (по команде). Осталось (не блокеры): 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 и дедуп повторов — работают на развёрнутом стенде.