Files
nis2-agile/docs/STUDIO_MODELLO_ORGANIZZATIVO_ISO27001.md
T
DevEnv nis2-agile 3f74165531 [FEAT] Modello Organizzativo SGSI (ISO 27001/27017/27018) + SoA pre-popolato da NIS2
Nuovo modulo guidato in 6 step (cl. 4-10 + Statement of Applicability):
- migration 037 (isms_models/roles/soa/documents) + 038 (dataset 111 controlli:
  93 Annex A:2022 + 7 CLD/27017 + 11 PII/27018) + runner scripts/migrate-isms.php
- IsmsModelController (16 endpoint) registrato in index.php
- SoA pre-popolato dalle risposte Gap Analysis NIS2 (mapping iso27001_control)
- estensioni cloud condizionali 27017/27018 via flag uses_public_cloud/
  is_cloud_provider/processes_pii_in_cloud
- AIService::generateIsmsDocument + fonti ISO in nis2_sources.php
- frontend isms.html/isms.js + api client + sidebar + help + i18n IT/EN
- ingest KB ISO (scope SYSTEM, solo titoli/sintesi: no testo coperto da copyright)
- version.json 1.14.0; doc studio + deploy handoff

Strumento di supporto/pre-audit (non certificazione). Migration DA APPLICARE su host.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-11 11:32:42 +02:00

21 KiB
Raw Blame History

Studio — Modulo "Modello Organizzativo ISO 27000 (SGSI)" + Onboarding PMI

Tipo: documento di studio e piano di implementazione (NO codice applicato). Data: 2026-06-11 — Autore: sessione Claude (devapp3) Stato: bozza in attesa di revisione utente prima di toccare codice. Decisioni utente (2026-06-11):

  1. Ambito = SGSI completo (clausole ISO/IEC 27001:2022 4–10 + Statement of Applicability)
  2. Deliverable corrente = questo documento di studio + piano (niente migration/controller finché non approvato)
  3. Percorso PMI = stesso wizard completo, con più guida e supporto AI (nessuna semplificazione dei contenuti normativi)
  4. Aggiornamento 2026-06-11: includere le estensioni cloud della famiglia 27000 nelle versioni attuali — ISO/IEC 27017:2015 (controlli sicurezza servizi cloud) e ISO/IEC 27018:2019 (protezione PII in cloud pubblico per PII processor), come estensioni condizionali del SoA (vedi §3.3bis e §4.2).

1. Obiettivo

Estendere NIS2 Agile con una procedura guidata (wizard) che accompagni l'azienda nella costruzione del proprio Sistema di Gestione della Sicurezza delle Informazioni (SGSI / ISMS) secondo ISO/IEC 27001:2022, riusando il più possibile i dati e i moduli già presenti per la compliance NIS2.

Il wizard deve produrre, a fine percorso, gli artefatti minimi di un SGSI:

  • Ambito e contesto del SGSI (cl. 4)
  • Policy SGSI + ruoli/responsabilità (cl. 5)
  • Metodologia di risk assessment + obiettivi (cl. 6)
  • Statement of Applicability (SoA) sui 93 controlli Annex A:2022 (cl. 6.1.3 d), estendibile con i controlli cloud ISO 27017:2015 e i controlli privacy-cloud ISO 27018:2019 quando pertinenti (vedi §3.3bis / §4.2)
  • Documented information minima obbligatoria (cl. 7–8)
  • Piano di monitoraggio, audit interni e miglioramento (cl. 9–10)

Famiglia ISO 27000 coperta (versioni attuali):

  • ISO/IEC 27001:2022 — requisiti SGSI (base del wizard)
  • ISO/IEC 27002:2022 — guida implementativa Annex A
  • ISO/IEC 27017:2015 — estensione condizionale: controlli di sicurezza per servizi cloud (cliente e/o fornitore cloud)
  • ISO/IEC 27018:2019 — estensione condizionale: protezione dei PII in cloud pubblico per chi agisce da PII processor (ponte verso GDPR)

Per le PMI, lo stesso percorso resta integrale ma viene arricchito di guida contestuale, esempi e bozze AI dimensionate alla realtà di una piccola/media impresa (vedi §8).


2. Stato dell'arte — cosa esiste già (riuso, non riscrittura)

Il prodotto contiene già un ponte significativo NIS2 ↔ ISO 27001. Riuso previsto:

Componente esistente File / Tabella Come lo riuso
ENUM framework controlli compliance_controls.framework = nis2 | iso27001 | both La tabella regge nativamente i controlli ISO: i record SoA finiscono qui con framework='iso27001'
Mapping per-domanda application/data/nis2_questionnaire.json → ogni domanda ha iso27001_control (es. A.5.1); ogni categoria ha iso27001_controls[] Pre-popolazione del SoA dalle risposte NIS2 già date
Matrice articoli→ISO AuditController::iso27001Mapping (NIS2 Art.21.2.a–j → Annex A) Base per derivare lo stato iniziale dei controlli
Modulo Risk RiskController, risk register, matrice 5×5, AI suggest Clausola 6 (risk assessment & treatment) — si aggancia, non si riscrive
Audit + NCR/CAPA AuditController, non_conformities, corrective_actions Clausole 9–10 (audit interni, riesame, miglioramento)
AI AIService (gap, policy gen) + vincolo fonti certe application/config/nis2_sources.php Bozze policy/SoA con citazione fonte (da estendere a ISO 27002)
KB / RAG KnowledgeBaseController, RagService, Qdrant nis2_kb Ingest testo ISO 27001/27002 scope SYSTEM per la guida contestuale
Audit chain AuditService hash-chain SHA-256 Tracciamento immutabile di ogni step del wizard SGSI
Multi-tenancy organization_id su ogni tabella + requireOrgAccess() Stesso isolamento per i nuovi dati SGSI
Pattern onboarding OnboardingController::initializeComplianceControls() (13 controlli NIS2 a setup org) Pattern speculare per inizializzare il SoA ISO

Gap attuale: i 93 controlli Annex A:2022 non sono seedati (oggi a onboarding nascono solo i 13 control-code NIS2). Vanno introdotti come dataset di riferimento.


3. Architettura proposta (additiva, zero breaking change)

Stesso stack: PHP 8.4 vanilla, Front Controller, PDO singleton, JWT multi-tenant, frontend HTML/JS vanilla. Nessun rebuild Docker (edit live .php/.html + kill -USR2 1). Migration da eseguire sull'host MySQL (mysql -h localhost), coerente con la topologia DB documentata (l'app HTTP fpm parla con l'host via socket).

3.1 Nuove tabelle (migration 037_isms_model.sql → eventualmente 038)

Convenzioni del repo: ALTER/CREATE idempotenti via check su information_schema (no IF NOT EXISTS su ADD COLUMN in MySQL 8.0). Niente DELIMITER via pipe.

  • isms_models — un SGSI per organization id, organization_id, status (draft/active/under_review), scope_statement TEXT, context_internal TEXT, context_external TEXT, interested_parties JSON, boundaries TEXT, exclusions TEXT, risk_methodology TEXT, isms_objectives JSON, version, created_at, updated_at, approved_by, approved_at

  • isms_roles — ruoli e responsabilità (RACI SGSI), cl. 5.3 id, isms_model_id, role_name, user_id NULL, responsibility TEXT, raci ENUM(R,A,C,I), created_at

  • iso27001_annex_controls — dataset di riferimento dei controlli (globale, non per-org) control_code (A.5.1…A.8.34, CLD.*, PII.*), standard ENUM(iso27001/iso27017/iso27018), theme, title_it, title_en, purpose_it, iso27002_ref, condition_tag NULL — seedato da migration. La colonna standard distingue i 93 controlli Annex A:2022 dai controlli aggiuntivi cloud (27017) e privacy-cloud (27018); condition_tag segna se un controllo è condizionale (es. cloud_customer, cloud_provider, pii_processor).

  • isms_soa — Statement of Applicability per org (il cuore) id, isms_model_id, control_code, applicable BOOL, justification_inclusion TEXT, justification_exclusion TEXT, implementation_status (not_started/in_progress/implemented/verified), implementation_pct, derived_from_nis2 BOOL, linked_control_id (→compliance_controls), updated_by, updated_at

  • isms_documents — documented information minima (cl. 7.5), bozze AI id, isms_model_id, doc_type, title, status (draft/review/approved), ai_generated BOOL, body_html LONGTEXT, version, linked_policy_id NULL

(Il monitoraggio/audit interni cl. 9–10 non crea tabelle nuove: si appoggia ad AuditController + non_conformities/corrective_actions esistenti, con un isms_model_id opzionale come tag.)

3.2 Nuovo controller — IsmsModelController.php

Registrato in public/index.php (controllerMap + actionMap), pattern identico agli altri controller. Endpoint additivi:

Metodo Endpoint Scopo
GET /api/isms/model SGSI dell'org corrente (o 404 → wizard da iniziare)
POST /api/isms/model Crea/inizializza SGSI (scope, contesto) — cl. 4
PUT /api/isms/model Salva step (leadership, risk methodology, objectives)
GET /api/isms/annex-controls I 93 controlli di riferimento (per il SoA)
GET /api/isms/soa SoA dell'org, pre-popolato dal NIS2 al primo accesso
PUT /api/isms/soa/{code} Aggiorna applicabilità + motivazione + stato di un controllo
POST /api/isms/soa/derive (Ri)deriva lo stato iniziale del SoA dalle risposte NIS2
GET /api/isms/documents / POST / PUT Documented information + bozze
POST /api/isms/documents/ai-generate Genera bozza policy/procedura via AIService
GET /api/isms/readiness % completamento SGSI + checklist clausole 4–10
GET /api/isms/export Export SGSI completo (HTML stampabile / SoA CSV)

3.3 Frontend

  • public/isms.html — wizard a 6 step (struttura assessment.html: app-layout → sidebar + main-content), stepper in alto, salvataggio per step.
  • public/js/isms.js — handler wizard via client api.js, auto-detect ruolo/firm da /api/auth/me.
  • Voce sidebar "Modello Organizzativo (SGSI)" in sezione Gestione di common.js (icona scudo/organigramma).
  • Aggiornare help.js (help contestuale IT/EN) e KB AI come da regola progetto.

3.3bis Estensioni cloud — ISO 27017:2015 e ISO 27018:2019

Le due norme non sono SGSI a sé: sono code of practice che estendono i controlli 27002. Nel modulo diventano set di controlli aggiuntivi e condizionali dentro lo stesso SoA, attivati in base al profilo dell'org raccolto allo Step 1.

ISO/IEC 27017:2015 — servizi cloud. Fornisce guida cloud-specifica su ~37 controlli 27002 + 7 controlli aggiuntivi CLD.*:

  • CLD.6.3.1 — Ruoli e responsabilità condivisi in ambiente cloud
  • CLD.8.1.5 — Rimozione degli asset del cliente cloud (a fine contratto)
  • CLD.9.5.1 — Segregazione negli ambienti di virtual computing
  • CLD.9.5.2 — Hardening delle virtual machine
  • CLD.12.1.5 — Sicurezza operativa dell'amministratore
  • CLD.12.4.5 — Monitoraggio dei servizi cloud
  • CLD.13.1.4 — Allineamento sicurezza reti virtuali e fisiche

Si applicano sia al cliente cloud sia al fornitore cloud (alcuni hanno responsabilità diverse per ruolo → si usa raci/condition_tag).

⚠️ Numerazione: 27017:2015 è scritta sul 27002:2013 (vecchia numerazione, es. CLD.9.5.x). Il modulo è su Annex A:2022. Va mantenuto un cross-reference 2013↔2022 nel dataset (iso27002_ref) per non confondere l'utente. Nessuna revisione 2022 di 27017 esiste a oggi → resta 27017:2015.

ISO/IEC 27018:2019 — PII in cloud pubblico (PII processor). Aumenta i controlli 27002 con guida per la protezione dei dati personali e aggiunge un set di controlli (Annex A della 27018) organizzati sui principi privacy ISO 29100 (consenso/scelta, limitazione finalità, minimizzazione, limitazione uso/conservazione/divulgazione, trasparenza, partecipazione dell'interessato, accountability, sicurezza, conformità privacy). Mappabili come PII.* nel dataset.

Ponte GDPR/NIS2: 27018 copre obblighi del responsabile del trattamento in cloud → si collega ai riferimenti GDPR già citati nel prodotto (es. Art.17 erasure, codice etico persona digitale) e rafforza il dominio NIS2 supply chain/cloud. Da NON spacciare come conformità GDPR automatica (disclaimer, vedi §7).

Attivazione condizionale (Step 1 del wizard): tre flag sul profilo SGSI — uses_public_cloud (→ abilita 27017 lato cliente), is_cloud_provider (→ 27017 lato fornitore), processes_pii_in_cloud (→ 27018). I controlli CLD.*/PII.* entrano nel SoA solo se il relativo flag è attivo; altrimenti restano fuori (con motivazione di esclusione precompilata "non applicabile: l'org non eroga/usa servizi cloud / non tratta PII in cloud"). Segnali utili già disponibili per proporre i flag: settore, assets (asset di tipo cloud), modulo suppliers (fornitori cloud).


4. Il wizard SGSI — 6 step mappati alle clausole 27001:2022

Step Clausola Cosa raccoglie Riuso
1. Contesto & Ambito 4 Perimetro, sedi, asset coperti, parti interessate, confini, esclusioni motivate Asset module per il perimetro
2. Leadership 5 Policy SGSI, organigramma sicurezza, ruoli/responsabilità (RACI), comitato Tabella isms_roles; PolicyController per la policy
3. Risk 6 Metodologia (es. ISO 27005), criteri, obiettivi SGSI misurabili Aggancia RiskController esistente (no doppione del risk register)
4. Statement of Applicability 6.1.3 I 93 controlli Annex A: applicabile sì/no + motivazione, pre-spuntati dal NIS2; + estensioni condizionali 27017 (cloud) e 27018 (PII-cloud) iso27001_control del questionario + iso27001Mapping; flag cloud/PII (§3.3bis, §4.2)
5. Documented Information 7–8 Policy/procedure obbligatorie, bozze AI, versioning AIService::generatePolicy, isms_documents
6. Monitoraggio & Miglioramento 9–10 Piano audit interni, riesame direzione, gestione NC Aggancia Audit + NCR/CAPA esistenti

4.1 Logica di pre-popolazione del SoA (valore chiave)

Al primo accesso al SoA (o via POST /api/isms/soa/derive):

  1. Per ogni controllo Annex A si guarda quali domande NIS2 hanno quel iso27001_control.
  2. Si aggrega lo stato delle risposte (implemented/partial/not_implemented/not_applicable).
  3. Si imposta una proposta iniziale: applicable=true, implementation_status e implementation_pct derivati, derived_from_nis2=true, e una bozza di justification_inclusion citando l'articolo NIS2 di origine.
  4. L'utente conferma/modifica. I controlli ISO senza corrispondenza NIS2 (es. parte di A.7 fisici) restano da compilare manualmente, evidenziati come "non coperti dall'assessment NIS2".

Questo trasforma un assessment NIS2 già fatto in una prima bozza di SoA pronta all'80%, che è il principale argomento di vendita del modulo.

4.2 SoA esteso con 27017/27018 (condizionale)

Lo Step 4 mostra il SoA stratificato per standard:

  1. Sezione base — 93 controlli Annex A:2022 (sempre).
  2. Sezione cloud (27017) — i 7 CLD.* + i ~37 controlli 27002 con guida cloud, visibili solo se uses_public_cloud o is_cloud_provider. Per ogni controllo: lente "cosa cambia in cloud" e distinzione responsabilità cliente vs fornitore.
  3. Sezione PII-cloud (27018) — controlli PII.* (principi 29100), visibili solo se processes_pii_in_cloud, con tag del principio privacy e link al riferimento GDPR pertinente.

isms_soa distingue le righe via il standard del controllo collegato. La derivazione automatica dal NIS2 (§4.1) copre la sezione base; le sezioni cloud/PII partono da bozze di motivazione AI (non hanno corrispondenza diretta nel questionario NIS2) e sono evidenziate come "da compilare — estensione cloud/privacy".


5. Integrazione AI (fonti certe)

  • Estendere application/config/nis2_sources.php (registry fonti certe) con i riferimenti ISO/IEC 27001:2022, 27002:2022, 27017:2015 e 27018:2019 così che AIService::authoritativeSourcesBlock() possa citarli e vietare riferimenti inventati. Marcare 27017/27018 come code of practice (guida, non requisiti certificabili a sé).
  • Nuovi prompt:
    • Motivazione SoA: data una scelta di applicabilità, genera/propone la justification_inclusion/exclusion.
    • Bozza documented information: policy/procedura per un controllo o gruppo di controlli (riusa il pattern generatePolicy).
    • Spiegazione clausola (guida contestuale, soprattutto PMI).
  • Ingest del testo ISO 27001/27002 in KB Qdrant nis2_kb scope SYSTEM (pipeline scripts/ingest-* esistente) → askWithRag() risponde alle domande dell'utente durante il wizard.

⚠️ Il testo integrale ISO è coperto da copyright: ingestare parafrasi/sintesi proprietarie + riferimenti, non il testo letterale della norma. Da chiarire con l'utente (vedi §10).


6. Schema migrazioni — punto di partenza

Ultima migration presente: 036_acn_gap_assessment.sql. Le nuove partono da:

  • 037_isms_model.sql — isms_models, isms_roles, isms_soa, isms_documents + indici
  • 038_iso27001_annex_controls.sql — tabella di riferimento + seed dei 93 controlli Annex A:2022 (4 temi) + 7 controlli CLD.* ISO 27017:2015 + controlli PII.* ISO 27018:2019 (con standard e condition_tag); ALTER isms_models per i 3 flag uses_public_cloud/is_cloud_provider/processes_pii_in_cloud

Tutte additive, idempotenti, da girare sull'host MySQL.


7. Impatto e rischi

Impatto basso / additivo:

  • Nessuna modifica a schema esistente se non un eventuale ALTER compliance_controls per linkare al SoA (valutare: forse non serve, si usa isms_soa.linked_control_id).
  • Nessun controller esistente toccato nella logica (solo registrazione del nuovo in index.php).
  • Nessun rebuild Docker.

Rischi / attenzioni:

  1. Copyright ISO (vedi §5/§10) — non ingestare testo letterale.
  2. Volume dataset Annex A (93 controlli × bilingue) — lavoro di data-entry/curatela contenuti.
  3. Disallineamento mapping — il mapping NIS2→ISO è una guida, non una corrispondenza 1:1 certificabile: il SoA derivato è una bozza assistita, va dichiarato chiaramente nell'UI (disclaimer, come già fatto per gauge/bozze AI).
  4. Topologia DB — migration sull'host, non docker exec nis2-db (path secondario non-prod).
  5. Governance: ogni step va proposto e confermato; commit immediato post-smoke; push via host se cache token vuota.

8. Modello onboarding PMI (decisione: stesso percorso + più AI)

employee_count e annual_turnover_eur sono già raccolti a onboarding → si può rilevare automaticamente che l'org è una PMI e attivare un layer di assistenza, senza ridurre i contenuti:

  • Guida contestuale potenziata: ogni step del wizard mostra spiegazione "cosa significa per una PMI", esempi concreti dimensionati, stima di effort.
  • Bozze AI dimensionate: prompt arricchiti col contesto PMI (settore, dimensione, range dipendenti — già anonimizzato in AIService) → policy/procedure realistiche e snelle ma complete.
  • Co-pilota conversazionale: askWithRag() disponibile nel wizard per domande libere ("devo davvero fare l'audit interno?").
  • Roadmap a fasi suggerita: stesso SoA completo, ma con priorità/sequenza proposta per non sovraccaricare (quick win prima), riusando la logica quick_wins/compliance_roadmap già prodotta dall'AI gap analysis.
  • Estensioni cloud per PMI: molte PMI usano SaaS/cloud pubblico ma non se ne rendono conto → l'AI, dai segnali (suppliers, asset), propone di attivare 27017/27018 spiegando in linguaggio semplice perché ("usi Microsoft 365/AWS → questi 7 controlli cloud ti riguardano").
  • Nessun contenuto rimosso: i 93 controlli e le 6 clausole restano tutti; cambia solo il supporto, coerente con la scelta utente.

9. Roadmap di implementazione proposta (a fasi)

Fase Contenuto Output verificabile
F0 — Dataset Curatela + seed 93 controlli Annex A:2022 + 7 CLD.* (27017) + PII.* (27018) con cross-ref numerazione (038) + estensione nis2_sources.php Tabella popolata (3 standard), fonti ISO citabili
F1 — Backend SGSI Migration 037, IsmsModelController, endpoint model/SoA + derive, registrazione index.php curl: crea modello, deriva SoA dal NIS2, legge readiness
F2 — Wizard frontend isms.html + isms.js 6 step, voce sidebar, help.js Wizard navigabile end-to-end su org demo
F3 — AI & docs Prompt SoA/policy, ai-generate, ingest KB ISO Bozza policy generata + risposta RAG nel wizard
F4 — PMI layer Guida contestuale, co-pilota, roadmap a fasi Org PMI demo: percorso completo con assistenza
F5 — Export & polish Export SGSI HTML stampabile + SoA CSV, audit-chain tag, version.json bump Documento SGSI esportabile

Ogni fase: edit → kill -USR2 1 → smoke curl → commit → push (via host se serve). Test su org demo (id≤4 / %.demo%), reset con reset-demo.sql.


10. Decisioni aperte da chiarire con l'utente

  1. Copyright ISO: confermo l'approccio "sintesi/parafrasi proprietarie + riferimenti" per la KB e i titoli controlli? (necessario per non violare il copyright della norma)
  2. Versione Annex A: confermato 2022 (93 controlli, 4 temi)? (lo studio assume 2022; il questionario usa già codici A.5.x/A.8.x 2022) 2bis. Estensioni cloud: confermo le versioni attuali 27017:2015 e 27018:2019 (non esistono revisioni più recenti) e l'approccio a sezioni condizionali del SoA attivate dai 3 flag cloud/PII? Includo anche il cross-reference numerazione 27017 (2013→2022) nel dataset?
  3. Posizionamento: il SGSI è un modulo a sé in sidebar, o un percorso che parte dalla pagina assessment esistente?
  4. Certificabilità: il modulo è di supporto/pre-audit (bozze assistite con disclaimer) — confermi che NON deve presentarsi come certificazione automatica?
  5. Mobile/multi-superficie: rilevante il tag data-app-version/surface (std feedback-version-provenance) anche per le nuove pagine? (di default sì, additivo)

Il modulo è realizzabile in larga parte per riuso: il dato più prezioso (mapping NIS2→ISO per domanda) è già nel prodotto e abilita un SoA pre-popolato all'80% da un assessment NIS2 esistente — il vero differenziatore. L'implementazione è additiva, non breaking, su pattern noti. Il percorso PMI è un layer di assistenza AI sopra lo stesso wizard completo.

Prossimo passo: revisione di questo studio + risposte alle decisioni aperte (§10) → poi avvio Fase F0/F1 mostrando i diff prima di qualsiasi commit.