NIS2 Agile × 231 Agile

Integrazione 231 Agile ← NIS2 Agile

Porta i dati di compliance cybersecurity NIS2 nel contesto del Modello Organizzativo 231. Rischi cyber come presidi 231, incidenti significativi come non conformità.

Architettura dell'integrazione

NIS2 Agile espone un'API REST con API Key e un sistema di webhook outbound. 231 Agile può consumare i dati in due modalità:

A

Pull (Services API)

231 Agile chiama periodicamente le API NIS2 per aggiornare il cruscotto 231. Indicato per dati storici e report periodici (mensile/trimestrale).

B

Push (Webhook outbound)

NIS2 Agile notifica 231 Agile in tempo reale su eventi critici. Indicato per incidenti significativi, rischi HIGH/CRITICAL, variazioni compliance.

Step 1 — Crea API Key in NIS2 Agile

Richiede ruolo org_admin in NIS2 Agile.
1

Accedi a Settings → API Keys

In NIS2 Agile, vai in Settings → tab API KeysNuova API Key.

2

Seleziona gli scope

Per 231 Agile ti servono: read:compliance, read:risks, read:incidents. Opzionale: read:policies.

3

Salva la chiave

La chiave nis2_xxxxx viene mostrata una sola volta. Copiala in 231 Agile → Integrazioni → NIS2 Agile → API Key.

Step 2 — Integrazione Pull (PHP / 231 Agile)

Aggiungi questo codice nel cron job notturno di 231 Agile per sincronizzare i dati NIS2:

// 231 Agile — CronJob: sync_nis2_compliance.php

$apiKey   = getenv('NIS2_API_KEY');       // nis2_abc123...
$orgId    = getenv('NIS2_ORG_ID');
$baseUrl  = 'https://nis2.certisource.it/api';

function nis2Get(string $endpoint, array $query = []): array {
    global $apiKey, $orgId, $baseUrl;
    $url = $baseUrl . $endpoint;
    if (!empty($query)) $url .= '?' . http_build_query($query);
    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            'X-API-Key: ' . $apiKey,
            'X-Organization-Id: ' . $orgId,
        ],
    ]);
    return json_decode(curl_exec($ch), true) ?? [];
}

// 1. Recupera compliance summary
$compliance = nis2Get('/services/compliance-summary');
$score = $compliance['data']['overall_score'] ?? 0;

// 2. Recupera rischi HIGH/CRITICAL per mappa rischi 231
$risks = nis2Get('/services/risks-feed', ['level' => 'high', 'status' => 'open']);

// 3. Recupera incidenti Art.23 aperti
$incidents = nis2Get('/services/incidents-feed', [
    'significant_only' => 1, 'status' => 'open'
]);

// 4. Salva in DB 231 Agile — tabella nis2_integration
// DB231::upsert('nis2_integration', ['org_id'=>$orgId231, 'score'=>$score, ...]);

Step 3 — Webhook Push (real-time)

Configura in NIS2 Agile → Settings → Webhook un endpoint del tuo server 231 Agile per ricevere eventi in tempo reale:

# Endpoint da configurare in NIS2 Agile → Settings → Webhook
URL:    https://app-231.certisource.it/webhooks/nis2
Events: incident.significant, incident.deadline_warning, risk.high_created, compliance.score_changed

Receiver PHP su 231 Agile

// 231 Agile — routes/webhook_nis2.php

$secret = getenv('NIS2_WEBHOOK_SECRET');
$body   = file_get_contents('php://input');
$sig    = $_SERVER['HTTP_X_NIS2_SIGNATURE'] ?? '';

if (!hash_equals('sha256=' . hash_hmac('sha256', $body, $secret), $sig)) {
    http_response_code(401); exit;
}

$payload = json_decode($body, true);
$event   = $payload['event'];

switch ($event) {
    case 'incident.significant':
        // Crea non-conformità in 231 Agile
        NonConformityService::createFromNis2Incident($payload['data']['incident']);
        break;
    case 'risk.high_created':
        // Aggiorna mappa rischi presidi 231
        RiskService::importFromNis2($payload['data']['risk']);
        break;
    case 'compliance.score_changed':
        // Aggiorna dashboard 231 con nuovo score NIS2
        DashboardService::updateNis2Score($payload['data']['new_score']);
        break;
}
http_response_code(200);

Widget NIS2 per Dashboard 231

Embed HTML con chiamata API diretta. Copialo nella dashboard di 231 Agile:

NIS2 Compliance (Preview widget)
nis2.certisource.it
73%

Sostanzialmente Conforme

D.Lgs. 138/2024 — Art.21 NIS2

2
Incidenti aperti
5
Rischi HIGH
12
Policy approvate
<!-- Widget NIS2 per 231 Agile dashboard -->
<div id="nis2-widget"></div>
<script>
(async () => {
  const r = await fetch('https://nis2.certisource.it/api/services/compliance-summary', {
    headers: {
      'X-API-Key': 'nis2_YOUR_KEY',
      'X-Organization-Id': 'YOUR_ORG_ID'
    }
  });
  const { data } = await r.json();
  document.getElementById('nis2-widget').innerHTML = `
    <div style="padding:20px; border:1px solid #e2e8f0; border-radius:8px;">
      <h4 style="font-size:.875rem; font-weight:700; margin-bottom:12px;">
        🔒 NIS2 Compliance Score
      </h4>
      <div style="font-size:2rem; font-weight:800; color:#06b6d4;">
        ${data.overall_score}%
      </div>
      <div style="font-size:.75rem; color:#64748b;">${data.label}</div>
      <div style="margin-top:12px; display:grid; grid-template-columns:1fr 1fr 1fr; gap:8px;">
        <div><strong>${data.incidents.open}</strong><br><small>Incidenti</small></div>
        <div><strong>${data.risks.high}</strong><br><small>Rischi HIGH</small></div>
        <div><strong>${data.policies.approved}</strong><br><small>Policy</small></div>
      </div>
    </div>`;
})();
</script>
Dati mappati 231 ↔ NIS2: Rischi cyber NIS2 → Presidi 231 (ex. D.Lgs. 231/01 Art.25-septies) | Incidenti significativi → Non Conformità 231 | Compliance score → KPI Operatività 231