AllRisk × NIS2 Agile

Integrazione AllRisk ← NIS2 Agile

Esporta il risk register cyber NIS2 verso AllRisk per consolidamento nel registro rischi enterprise. Importazione automatica dei rischi HIGH/CRITICAL tramite API Key.

Scenario di integrazione

AllRisk è il registro rischi enterprise centralizzato. NIS2 Agile gestisce i rischi cyber in ottica normativa (ISO 27005 / NIS2). L'integrazione permette di:

1

Consolidamento automatico

I rischi HIGH/CRITICAL di NIS2 vengono automaticamente importati in AllRisk come rischi di categoria "Cyber/IT" con score e deadline normalizzati.

2

Aggiornamento bidirezionale

AllRisk notifica NIS2 tramite webhook se un rischio enterprise si trasforma in minaccia cyber (es. incidente supply chain → rischio NIS2).

3

Reporting unificato

Report rischi enterprise unico che include dimensione NIS2 con compliance score per ogni categoria di rischio cyber (Art.21 domains).

Mappatura campi NIS2 → AllRisk

Campo NIS2 AgileCampo AllRiskTrasformazione
risk_codeexternal_refPrefisso NIS2- + codice
titlerisk_nameDiretta
risk_levelseveritycritical→5, high→4, medium→3, low→2
likelihood × impactrisk_scoreScala 0–25 → 0–100
categoryrisk_categoryMappato su tassonomia AllRisk "Cyber"
nis2_articleregulatory_refPrefisso "NIS2 Art."
treatmentresponse_strategymitigate→Reduce, accept→Accept, ecc.
review_datenext_reviewDiretta (ISO 8601)

Import automatico — Script PHP

// AllRisk — import_nis2_risks.php (cron settimanale)

$apiKey    = getenv('NIS2_API_KEY');
$orgId     = getenv('NIS2_ORG_ID');
$baseUrl   = 'https://nis2.agile.software/api';
$allriskOrgId = getenv('ALLRISK_ORG_ID');

// Fetch rischi HIGH/CRITICAL aperti da NIS2
$response = nis2Get($baseUrl . '/services/risks-feed', [
    'level'  => 'high',
    'status' => 'open',
    'limit'  => 200,
], $apiKey, $orgId);

$risks = $response['data']['risks'] ?? [];
$imported = 0;

foreach ($risks as $risk) {
    $allriskPayload = [
        'external_ref'       => 'NIS2-' . $risk['risk_code'],
        'risk_name'          => $risk['title'],
        'risk_category'      => 'Cyber/IT',
        'severity'           => mapSeverity($risk['risk_level']),
        'risk_score'         => round($risk['risk_score'] / 25 * 100),
        'regulatory_ref'     => 'NIS2 ' . ($risk['nis2_article'] ?? 'Art.21'),
        'response_strategy'  => mapTreatment($risk['treatment']),
        'source_system'      => 'NIS2 Agile',
        'organization_id'    => $allriskOrgId,
    ];

    // Upsert: aggiorna se external_ref esiste, crea altrimenti
    AllRiskApiClient::upsertRisk($allriskPayload);
    $imported++;
}

error_log("[NIS2→AllRisk] Importati {$imported} rischi");

function mapSeverity(string $level): int {
    return match($level) { 'critical' => 5, 'high' => 4, 'medium' => 3, default => 2 };
}
function mapTreatment(string $t): string {
    return match($t) {
        'mitigate' => 'Reduce', 'accept' => 'Accept',
        'transfer' => 'Transfer', default => 'Avoid'
    };
}

Webhook NIS2 → AllRisk (real-time)

Configura webhook per importazione immediata dei nuovi rischi HIGH/CRITICAL:

# Settings → Webhook in NIS2 Agile
URL:    https://allrisk.certisource.it/api/v1/webhooks/nis2
Events: risk.high_created, compliance.score_changed, incident.significant
// AllRisk — webhook receiver per NIS2
$payload = verifyAndDecode($_SERVER['HTTP_X_NIS2_SIGNATURE'], file_get_contents('php://input'));

if ($payload['event'] === 'risk.high_created') {
    $risk = $payload['data']['risk'];
    AllRiskApiClient::upsertRisk([
        'external_ref' => 'NIS2-' . $risk['id'],
        'risk_name'    => $risk['title'],
        'severity'     => $risk['risk_level'] === 'critical' ? 5 : 4,
        'source_system'=> 'NIS2 Agile',
        'alert'        => true, // Notifica CRO AllRisk
    ]);
}
http_response_code(200);
Nota architetturale: Il flusso è unidirezionale NIS2 → AllRisk. Per il flusso inverso (AllRisk → NIS2), AllRisk chiama l'API NIS2 per creare rischi cyber direttamente tramite le API JWT (POST /api/risks/create) usando le credenziali dell'utente integration.