+ + + +
+

NIS2 Agile come Provider di Compliance

+

NIS2 Agile espone una Services API REST che permette a sistemi esterni di leggere + score di conformità, rischi, incidenti e controlli in tempo reale. Auth via API Key dedicata, + rate limiting 100 req/ora, firma HMAC-SHA256 per webhook outbound.

+
+ + +
Provider Disponibili
+
+
+ Disponibile +

231 Agile (lg231)

+

Integrazione compliance D.Lgs. 231/2001 + NIS2. Incidenti cyber → OdV, + rischi IT → registro 231, score NIS2 nel dashboard aziendale.

+ Guida integrazione → +
+
+ Pianificato +

AllRisk Agile

+

Feed rischi cyber per piattaforma ERM unificata. Risk score NIS2 + mappato su categorie ISO 31000.

+
+
+ Pianificato +

SustainAI Agile

+

Cybersecurity come pillar ESG. Score NIS2 nel report di sostenibilità + (CSRD, GRI 418).

+
+
+ Disponibile +

SIEM / SOC Esterni

+

Webhook su incident.created e risk.created_high + verso qualsiasi endpoint HTTPS (Splunk, Elastic, PagerDuty…).

+
+
+ + +
+ + + + +
+ + +
+
Endpoint disponibili
+
+ Base URL: https://nis2.agile.software/api/services
+ Auth: Header X-API-Key: nis2_xxxx — oppure Authorization: Bearer nis2_xxxx +
+ + + + + + + + + + + + + + + +
MetodoEndpointScopeDescrizione
GET/statusHealth check piattaforma, versione, DB. Nessuna auth.
GET/compliance-summaryread:complianceScore NIS2 aggregato (0-100), domain scores Art.21, rischi aperti, incidenti
GET/risks/feedread:risksRegistro rischi con livello ISO 27005, status, area. Filtri: ?level=high,critical&status=open
GET/incidents/feedread:incidentsIncidenti Art.23: severity, status, notifiche CSIRT, deadline 72h, overdue
GET/controls/statusread:complianceStato controlli per dominio: implemented / partial / missing
GET/assets/criticalread:assetsAsset critici con tipo, criticità, dipendenze mappate
GET/suppliers/riskread:suppliersFornitori: risk_level, ultimo assessment, is_flagged
GET/policies/approvedread:policiesPolicy approvate: titolo, area, data, versione
GET/openapi.jsonSpecifica OpenAPI 3.0 in JSON
+ +
Esempio risposta /compliance-summary
+
// GET /api/services/compliance-summary +// X-API-Key: nis2_Abc123... +{ + "success": true, + "data": { + "organization": { "id": 5, "name": "Azienda XYZ", "sector": "energia", "nis2_entity_type": "essential" }, + "compliance": { + "overall_score": 73, + "label": "Parziale", + "domain_scores": [ + { "domain": "Gestione del rischio", "score": 80, "status": "compliant" }, + { "domain": "Sicurezza supply chain", "score": 45, "status": "partial" } + ] + }, + "risks": { "total": 12, "open": 8, "high_critical": 3 }, + "incidents": { "total": 2, "open": 1, "significant": 1, "overdue": 0 } + } +}
+ +
Headers risposta
+ + + + + + + + +
HeaderValore
X-NIS2-API-Version1.0
X-NIS2-Org-IdID organizzazione (intero)
X-RateLimit-Limit100 (req/ora per chiave)
X-RateLimit-RemainingRichieste rimaste nella finestra
+
+ + +
+
+ Per l'agente Claude di lg231: questo tab descrive esattamente cosa implementare in lg231 Agile per consumare NIS2 come provider di compliance cybersecurity. +
+ +
Perché integrare 231 con NIS2
+ + + + + + + + + +
Evento NIS2Rilevanza D.Lgs. 231/2001
Incidente cybersecurity (Art.23 NIS2)Reato presupposto art.24-bis — criminalità informatica
Fornitore IT flaggato alto rischioRischio complicità in reati informatici via supply chain
Policy sicurezza non approvataGap nel MOG — Modello Organizzativo e di Gestione
Score NIS2 < 40%Indicatore OdV: carenza controlli, escalation consigliata
Whistleblowing sicurezzaPotenziale escalation verso OdV 231
+ +
1. Aggiungere NIS2 al provider-config (company-ms)
+

+ File: services/company-ms/public/index.php — route PATCH /companies/{id}/provider-config +

+
// Aggiungere ai $allowed: +$allowed = [ + 'certisource_pat', + 'anthropic_api_key', + 'openai_api_key', + // ── Nuovo provider NIS2 ── + 'nis2_api_key', // chiave da NIS2 → Settings → API Keys + 'nis2_org_id', // ID org NIS2 (dal URL dashboard o /api/services/status) + 'nis2_enabled', // bool: abilitare pull automatico +];
+ +
2. NIS2Client (shared lib o inline)
+
class Nis2Client +{ + const BASE_URL = 'https://nis2.agile.software/api/services'; + + public static function get(string $endpoint, string $apiKey, array $query = []): array + { + $url = self::BASE_URL . $endpoint; + if ($query) $url .= '?' . http_build_query($query); + + $ch = curl_init($url); + curl_setopt_array($ch, [ + CURLOPT_RETURNTRANSFER => true, + CURLOPT_TIMEOUT => 10, + CURLOPT_HTTPHEADER => [ + 'X-API-Key: ' . $apiKey, + 'Accept: application/json', + 'X-Caller: lg231-agile/1.0', + ], + ]); + $body = curl_exec($ch); + $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + curl_close($ch); + + return $code === 200 && $body + ? ['success' => true, 'data' => json_decode($body, true)] + : ['success' => false, 'http_code' => $code]; + } +}
+ +
3. Widget score NIS2 nella company view
+
// In company detail view PHP/JS: +$nis2Key = $meta['nis2_api_key'] ?? null; +if ($nis2Key) { + $summary = Nis2Client::get('/compliance-summary', $nis2Key); + // Mostrare gauge score + badge essential/important + rischi high + // Link: https://nis2.agile.software/dashboard.html +}
+ +
4. Escalation incidenti → OdV (monitoring-ms)
+
// Job periodico (cron o hook) nel monitoring-ms: +$incidents = Nis2Client::get('/incidents/feed', $apiKey, + ['significant' => 1, 'status' => 'open']); + +foreach (($incidents['data']['incidents'] ?? []) as $inc) { + // Crea odv_activity: + // type: 'cyber_incident_notifica' + // description: 'Incidente NIS2 significativo: ' . $inc['title'] + // priority: $inc['overdue'] ? 'urgent' : 'high' + // source: 'nis2_agile' + // reference_id: $inc['id'] +}
+ +
Checklist implementazione lg231
+ + +
+ Nota CORS: tutte le chiamate a NIS2 devono avvenire server-to-server + (PHP cURL), non da browser. NIS2 non accetta origini lg231 in CORS per sicurezza. +
+
+ + +
+
+ NIS2 invia notifiche push su eventi tramite webhook HTTPS firmati HMAC-SHA256. + Il sistema esterno riceve la notifica in tempo reale senza polling. +
+ +
Eventi disponibili
+
+
+ incident.created + Nuovo incidente di sicurezza registrato + → odv_activity +
+
+ incident.deadline_warning + Scadenza Art.23 (24h/72h) entro 4 ore + → alert urgente OdV +
+
+ risk.created_high + Nuovo rischio HIGH o CRITICAL creato + → risk register 231 +
+
+ compliance.score_changed + Variazione score NIS2 > 5% + → aggiorna widget +
+
+ policy.approved + Nuova policy di sicurezza approvata + → aggiorna MOG ref +
+
+ supplier.risk_flagged + Fornitore IT flaggato alto rischio + → supply chain 231 +
+
+ +
Registrare una subscription
+
POST https://nis2.agile.software/api/webhooks/subscriptions +Authorization: Bearer {jwt_token} +Content-Type: application/json + +{ + "url": "https://lg231.agile.software/api/integrations/nis2-webhook", + "events": ["incident.created", "incident.deadline_warning", "risk.created_high"], + "description": "lg231 Agile integration" +} + +// Risposta: +{ "id": 1, "secret": "whsec_abc123..." } +// Salvare il secret in companies.metadata.nis2_webhook_secret
+ +
Verifica firma HMAC (endpoint ricevente)
+
$secret = $meta['nis2_webhook_secret']; +$body = file_get_contents('php://input'); +$expected = 'sha256=' . hash_hmac('sha256', $body, $secret); +$received = $_SERVER['HTTP_X_NIS2_SIGNATURE'] ?? ''; + +if (!hash_equals($expected, $received)) { + http_response_code(401); + exit; +} + +$event = $_SERVER['HTTP_X_NIS2_EVENT'] ?? ''; +$payload = json_decode($body, true); + +switch ($event) { + case 'incident.created': + // crea odv_activity... + break; + case 'risk.created_high': + // aggiungi a risk register... + break; +}
+
+ + +
+
Creare la prima API Key
+
    +
  1. Login su NIS2 Agile con ruolo org_admin o superiore
  2. +
  3. Vai su Settings → API Keys (sezione Integrazioni)
  4. +
  5. Click "Nuova API Key" → nome descrittivo (es: "lg231 Integration") → scope: read:all
  6. +
  7. Copia la chiave — formato nis2_XXXX... — visibile una sola volta
  8. +
  9. Nota l'Organization ID dal URL del dashboard (es: /dashboard.html dopo login)
  10. +
  11. In lg231: salva via PATCH /companies/{id}/provider-config con nis2_api_key e nis2_org_id
  12. +
+ +
Test rapido (curl)
+
# 1. Verifica senza auth +curl https://nis2.agile.software/api/services/status + +# 2. Compliance summary +curl -H "X-API-Key: nis2_TUA_CHIAVE" \ + https://nis2.agile.software/api/services/compliance-summary | python3 -m json.tool + +# 3. Incidenti significativi aperti +curl -H "X-API-Key: nis2_TUA_CHIAVE" \ + "https://nis2.agile.software/api/services/incidents/feed?significant=1&status=open" + +# 4. Rischi high/critical +curl -H "X-API-Key: nis2_TUA_CHIAVE" \ + "https://nis2.agile.software/api/services/risks/feed?level=high,critical"
+ +
Contatti e riferimenti
+ + + + + + + + +
App NIS2 Agilehttps://nis2.agile.software
Specifiche OpenAPIGET /api/services/openapi.json
Test Runnertest-runner.php
Amministratorecristiano.benassati@gmail.com
Documento tecnico lg231docs/integration/lg231-nis2-integration.md
+
+ +