docs(wiki): ingest sched-ozon-creds-stub-contract (anti-leak stubs, incident 2026-08-23)
This commit is contained in:
68
.wiki/concepts/sched-ozon-creds-stub-contract.md
Normal file
68
.wiki/concepts/sched-ozon-creds-stub-contract.md
Normal file
@@ -0,0 +1,68 @@
|
||||
---
|
||||
title: sched-ozon-creds-stub-contract
|
||||
type: concept
|
||||
status: live
|
||||
tags: [books, sched, ozon, creds, tenant-split, anti-leak]
|
||||
related: [[books-vds]], [[portainer-stack-management-books-vds]]
|
||||
---
|
||||
# Sched Ozon creds stub contract (slovo/bookva)
|
||||
|
||||
Контракт кредов Ozon между двумя тенантами books на books VDS. **Каждый стек ходит
|
||||
в Ozon только своими кредами**: Slovo — client_id 94191, Bookva — client_id 50542.
|
||||
Мисматч-пары (client_id ↔ чужой ключ) в обеих БД — **намеренные заглушки**, НЕ баги
|
||||
и НЕ артефакты копирования. Зафиксировано владельцем 2026-08-23 после того, как
|
||||
.admin «починил» заглушку и вызвал инцидент.
|
||||
|
||||
## Почему заглушки
|
||||
|
||||
Tenant-split (volume-copy) оставил ОБОИХ sellers в обеих БД. Если бы в каждой БД
|
||||
лежали рабочие ключи обоих кабинетов — любой стек мог бы ходить в Ozon под чужим
|
||||
кабинетом (утечка/перекос данных). Заглушка делает чужой кабинет **недостижимым**:
|
||||
Ozon отвечает `Invalid Api-Key (code 5)` на мисматч-пару.
|
||||
|
||||
## Матрица (актуально 2026-08-23)
|
||||
|
||||
| БД | id_seller | client_id | api_key | статус |
|
||||
|---|---|---|---|---|
|
||||
| slovo (books-db) | 1 | 50542 | `968302d1-…` (slovo-ключ) | **заглушка** (мисматч) |
|
||||
| slovo (books-db) | 2 | 94191 | `968302d1-…` (slovo-ключ) | рабочий |
|
||||
| bookva (bookva-db) | 1 | 50542 | `ddc24146-…` (bookva-ключ) | рабочий |
|
||||
| bookva (bookva-db) | 2 | 94191 | `ddc24146-…` (bookva-ключ) | **заглушка** (мисматч) |
|
||||
|
||||
Хэши SHA2 (проверка целостности): slovo-ключ = `d6227b…`, bookva-ключ = `f700f3…`.
|
||||
Оба ключа — штатные креды, живут в git (`.slovo.cmd`/`.bookva.cmd` обёртки
|
||||
`packages/tools`), не выдуманы.
|
||||
|
||||
Проверка Ozon API (2026-08-23): 94191 + slovo-ключ → 200 OK; 50542 + slovo-ключ →
|
||||
Invalid; 50542 + bookva-ключ → 200 OK.
|
||||
|
||||
## Как это безопасно
|
||||
|
||||
- Код-фикс `2a38fb5` (break в outer catch `ozonFbsPostingsSyncronization.js`) —
|
||||
задеплоен на оба task-runner 2026-08-23. all-sellers диспатч (data:null),
|
||||
упёршийся в заглушку → `Invalid Api-Key` → **break → фейл-фаст, БЕЗ спина**
|
||||
(до фикса — бесконечный while(true) ~75 req/сек, инцидент 2026-08-23).
|
||||
- Расписания с корректным `data.idSeller` (slovo=2, bookva=1) заглушек вообще не
|
||||
касаются — ходят только своим продавцом.
|
||||
|
||||
## Verify (если кто-то засомневается)
|
||||
|
||||
```sql
|
||||
-- slovo: seller 1 должен быть 50542 + 968302d1 (заглушка)
|
||||
SELECT id_seller, client_id, LEFT(api_key,8) FROM sellers ORDER BY id_seller;
|
||||
-- bookva: seller 2 должен быть 94191 + ddc24146 (заглушка)
|
||||
```
|
||||
|
||||
## НЕ делать (guards)
|
||||
|
||||
- **НЕ «чинить» мисматч-пары** — это контракт. «Починил» → slovo-стек начинает
|
||||
ходить в Ozon как Bookva → утечка.
|
||||
- Не трогать bookva-БД seller 1 (рабочий) и slovo-БД seller 2 (рабочий).
|
||||
- Изменение ключей — только через владельца кабинета (Ozon) + письмо books.
|
||||
|
||||
## Инцидент-ссылка
|
||||
|
||||
2026-08-23: спин `ozonFbsPostingsSyncronization` (невалидный ключ + no-break код) →
|
||||
полный разбор в переписке `books/.agents/inbox/` (отчёты .admin 10:22→12:50Z) и
|
||||
тасках books #974/#975/#977/#990/#991. Фоллоу-ап: документация runtime-контракта
|
||||
sched-тасок (file-managed перевод slovo сделан 12:50Z, коммит 887bbae).
|
||||
Reference in New Issue
Block a user