diff --git a/docs/playbook.md b/docs/playbook.md index efa1544..fc9e62e 100644 --- a/docs/playbook.md +++ b/docs/playbook.md @@ -359,6 +359,27 @@ pi install git:git.enne2.net/enne2/ - Verificato sul server (2026-08-16): istanza di test su 8083, collection `memories_test`, produzione intatta (328 punti) +### 11.7 Accesso condiviso: rischio e criteri futuri (decisione 2026-08-16) + +**Scelta attuale**: una chiave API con accesso COMPLETO in lettura/scrittura per +l'intera conoscenza; `agent_id` è solo provenienza, non isolamento. Ambiente +personale con agenti fidati (7 agenti, 2026-08-16). + +**Rischio documentato**: nessun namespace per tenant/agente con enforcement +dell'autorizzazione (best practice AWS/OWASP: actor scoping su ogni read/write). +Un agente compromesso o malevolo può leggere/scrivere/correggere qualsiasi +record, incluso supersedere memorie altrui. + +**Criteri per passare a chiavi per-scope** (quando uno di questi si verifica): +1. Entrano agenti di terze parti o non pienamente fidati +2. Il numero di agenti supera ~10 o i progetti superano ~30 +3. Si registra un incidente di sicurezza o un accesso anomalo +4. Serve audit per-agente affidabile (oggi l'agent_id è auto-dichiarato) + +**Implementazione futura suggerita**: mappa chiave→scope/permessi nel gateway +(es. `API_KEYS=readonly:xxx,write:yyy` o chiavi con claim), filtro obbligatorio +per scope/kind/project_id in base alla chiave, senza cambiare l'API pubblica. + ### 11.5 project_id obbligatorio - Dal gateway v2.4.0 / estensione v1.4.0: `project_id` è **obbligatorio** in `POST /v1/memories` (Pydantic `min_length=1`) e nello schema del tool `qmem_store` (Type.String, non più Optional)