# Agente di Discovery NIS2 (`discovery-agent.mjs`) Mappa automaticamente la rete del cliente e **auto-popola** l'Inventario NIS2 (asset + scoring rilevanza NIS2 + Mappa Dipendenze + flussi di rete ID.AM-03). Node 18+, **nessuna dipendenza** (usa `fetch`/`net`/`dns` nativi). ## Come funziona 1. In NIS2 (utente org_admin): **Connettori Discovery → Nuovo connettore** → copia l'**API key** (mostrata una sola volta). 2. Esegui l'agente **dentro la rete da mappare** (un host qualunque del cliente): ```bash NIS2_API_KEY=nis2_xxxxxxxx TARGETS=192.168.1.0/24 node discovery-agent.mjs ``` 3. L'agente scansiona i target (TCP-connect, no root), deduce host/porte/tipo asset e li invia a `POST /api/services/assets-ingest`. NIS2 fa dedup (per IP), scoring e tracciamento del run (visibile nel dettaglio del connettore). ## Variabili | Var | Default | Note | |---|---|---| | `NIS2_API_KEY` | — (obbligatoria) | chiave del connettore | | `NIS2_API_URL` | `https://nis2.agile.software` | | | `TARGETS` | — (obbligatoria) | CIDR/IP separati da virgola: `192.168.1.0/24,10.0.0.5` | | `PORTS` | `22,80,443,445,3306,3389,5432,8080,8443` | porte TCP da sondare | | `SOURCE` | `network` | etichetta provenienza (`network`/`aws`/…) | | `TIMEOUT_MS` | `400` | timeout per porta | | `MAX_HOSTS` | `1024` | tetto host per esecuzione | | `CONCURRENCY` | `64` | socket paralleli | | `DRY_RUN` | — | `1` = non invia, stampa solo l'anteprima JSON | ## Esempi ```bash # Anteprima senza inviare DRY_RUN=1 TARGETS=10.0.0.0/28 node discovery-agent.mjs # Scansione + invio, porte e timeout custom NIS2_API_KEY=nis2_xxx TARGETS=192.168.10.0/24 PORTS=22,80,443 TIMEOUT_MS=600 node discovery-agent.mjs # Pianificato (cron, ogni notte) 0 2 * * * NIS2_API_KEY=nis2_xxx TARGETS=192.168.0.0/23 node /opt/nis2/discovery-agent.mjs >> /var/log/nis2-discovery.log 2>&1 ``` ## Più connettori per azienda Crea un connettore per ciascuna sorgente (es. *Rete sede Roma*, *Rete sede Modena*, *AWS prod*): ognuno ha la sua API key e il suo storico run. L'agente di rete copre i CIDR; per il cloud (`aws`/`azure`/`gcp`) si estende lo stesso schema elencando le istanze via SDK del provider e inviandole con lo stesso formato `assets-ingest` (`source: "aws"`, `external_ref: "aws:i-..."`). ## Sicurezza - L'API key ha **solo** scope `ingest:assets` (può solo aggiungere asset/flussi alla **sua** org). - Esegui l'agente da un host fidato; ruota la chiave dal connettore se compromessa (**Rigenera chiave**). - Scansiona **solo reti di tua proprietà / autorizzate**.