Piano operativo · spiegato semplice

NIS2 — Database privato + cifratura (TLS)

Dare a NIS2 il suo database, cifrato come gli altri prodotti. Stanotte 3 disservizi: ora sappiamo perché e c'è la strada che funziona. Metafora: casa condivisa vs stanza tutta tua.

1. Il prima, il problema, la soluzione Lo stesso "motore" dell'app (i worker che servono le pagine), tre scenari

● Oggi — funziona ma non cifrabile
🟦 App NIS2
⬇
corridoio interno (socket)
🏠 DB casa condivisa
(host MySQL)
Verde, ma il corridoio è dentro casa: niente da cifrare, e se ci provi crolla
✗ Tentativo — TCP verso la casa condivisa
🟦 App NIS2
⬇
esce in rete…
🚪 Cancello (gateway)
ti scambia per uno sconosciuto
⬇
🏠 DB host → ❌ 1045 respinto
Il "cancello" cambia l'identità → il DB ti respinge. È il guaio dei 3 disservizi.
✓ Soluzione — il database tutto suo
🟦 App NIS2
⬇
rete interna diretta · 🔒 cifrata
🚪➡🛏 Stanza accanto
DB privato nis2-db
Stessa rete, niente cancello → niente rifiuto. Qui il TLS si accende davvero. ✓ verificato dal worker reale

2. Chi fa cosa — i passi (tutti reversibili in 30 secondi) Verde = già verificato funzionante dal vero motore dell'app

Agile / VIGILE tocca il database App (io) tocca il codice/config Insieme verifica
1
Agile

Backup

Copia di sicurezza prima di toccare qualsiasi cosa.

2
Agile

Riempire il database privato — migrando i dati veri dall'host

Oggi il container è vuoto (0 utenti). I dati reali (19 utenti, org Agile Technology, assessment…) sono nella casa condivisa. ⚠️ Migrare, NON ripartire da zero (altrimenti si perde tutto).

3
App (io)

Spostare l'app sul container, in TCP

Cambio una riga: DB_HOST = 172.21.0.4 (l'indirizzo numerico del container — non il nome, perché il motore dell'app non risolve i nomi).

4
Verifica

Login vero

Faccio un login reale + apro una dashboard. Deve rispondere normale (200/401), mai errore. Se va male → torno indietro in 30 secondi.

5
App (io)

Accendere la cifratura (TLS)

Attivo il flag + uso la CA del container (già quella giusta). Verifico di nuovo dal login reale che giri cifrato (TLSv1.3).

6
Agile

Mettere l'obbligo

Solo dopo il mio "TLS verde": REQUIRE SSL sull'utente del database. Da quel momento il non-cifrato è rifiutato.

7
App (io)

Staccare il vecchio aggancio + tenere la rete di sicurezza

NIS2 diventa indipendente come gli altri. Resta attivo il guard anti-disservizio già messo nel codice.

3. La decisione che serve da Agile

⚠️ Migrare i dati, non ripartire da zero. Il database privato è vuoto; quello vero (host) ha 19 utenti e 60 tabelle reali — utenti, organizzazione Agile Technology, assessment, incidenti. "Ripartire puliti" significherebbe cancellarli. Per dati reali va fatta la copia (migrazione). La scelta è di Agile, perché i dati li tocca solo Agile.

4. La regola d'oro

Verificare sempre dal vero motore dell'app (un login reale), mai dalle scorciatoie (pagina di stato, riga di comando, "a memoria"). Stanotte le scorciatoie hanno ingannato 3 volte: la riga di comando diceva "funziona" mentre l'app vera cadeva.
In una riga: Agile copia i dati veri nel database privato di NIS2 → io sposto l'app lì (in TCP, con l'indirizzo numerico), accendo la cifratura e verifico col login vero → Agile mette l'obbligo. Risultato: NIS2 indipendente e cifrato come gli altri, senza più passare dal "cancello" che faceva cadere tutto.