1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
import type { Edge, Node } from "@xyflow/react";
import { MarkerType } from "@xyflow/react";
import type { ZTNodeData, ZTScenarioDefinition } from "../types";
const node = (
id: string,
x: number,
y: number,
data: ZTNodeData,
): Node<ZTNodeData> => ({
id,
type: "ztNode",
position: { x, y },
data,
});
const edge = (
id: string,
source: string,
target: string,
label: string,
opts?: { dashed?: boolean; color?: string },
): Edge => ({
id,
source,
target,
label,
animated: true,
markerEnd: { type: MarkerType.ArrowClosed, width: 18, height: 18 },
style: opts?.dashed
? { strokeDasharray: "6 4", stroke: opts.color ?? "#94a3b8" }
: { stroke: opts?.color ?? "#64748b" },
labelStyle: { fill: "#334155", fontWeight: 500, fontSize: 11 },
labelBgStyle: { fill: "#f8fafc", fillOpacity: 0.95 },
});
export const classicPerimeterScenario: ZTScenarioDefinition = {
id: "classic-perimeter",
title: "Périmètre réseau classique",
subtitle: "Confiance implicite « à l’intérieur » du LAN",
intro:
"Modèle souvent associé au VPN : une fois le tunnel établi, le trafic interne est largement considéré comme fiable. Les déplacements latéraux (east-west) peuvent rester peu contrôlés.",
nodes: [
node("user", 40, 200, {
kind: "user",
label: "Utilisateur",
role: "Identité",
}),
node("laptop", 200, 200, {
kind: "device",
label: "Poste",
role: "Appareil",
}),
node("vpn", 360, 200, {
kind: "gateway",
label: "Passerelle / VPN",
role: "Réseau",
}),
node("lan", 560, 120, {
kind: "network",
label: "LAN « de confiance »",
role: "Segment interne",
}),
node("app", 560, 40, {
kind: "workload",
label: "Application",
role: "Charge de travail",
}),
node("db", 720, 200, {
kind: "data",
label: "Données",
role: "Stockage",
}),
],
edges: [
edge("e-u-l", "user", "laptop", "Session locale"),
edge("e-l-v", "laptop", "vpn", "Tunnel VPN", { color: "#0d9488" }),
edge("e-v-lan", "vpn", "lan", "Accès réseau étendu"),
edge("e-lan-app", "lan", "app", "HTTP/S — confiance zone"),
edge("e-app-db", "app", "db", "SQL — souvent large confiance"),
],
steps: [
{
id: "s1",
title: "Vue d’ensemble",
description:
"L’utilisateur joint le réseau via une passerelle. Le segment interne est souvent traité comme un tout.",
highlightNodes: ["user", "laptop", "vpn", "lan", "app", "db"],
highlightEdges: [],
pillars: ["network"],
practices: [
"Cartographier les flux réels (y compris east-west), pas seulement l’accès distant.",
"Ne pas confondre « chiffrement du tunnel » et « confiance des identités ».",
],
},
{
id: "s2",
title: "Tunnel jusqu’au périmètre",
description:
"Le VPN chiffre le transport, mais ne remplace pas une décision d’accès fine à chaque ressource.",
highlightNodes: ["laptop", "vpn"],
highlightEdges: ["e-l-v"],
pillars: ["network", "device"],
practices: [
"Exiger posture et conformité des appareils (MDM, santé du poste).",
"Journaliser les accès au réseau et corréler avec les accès applicatifs.",
],
},
{
id: "s3",
title: "Confiance plate en interne",
description:
"Une fois dans le LAN, l’application parle souvent à la base avec des comptes ou règles larges : surface d’attaque east-west élevée si un poste est compromis.",
highlightNodes: ["lan", "app", "db"],
highlightEdges: ["e-lan-app", "e-app-db"],
pillars: ["application", "data", "network"],
practices: [
"Segmenter et appliquer des politiques au plus près des charges (micro-segmentation).",
"Principe du moindre privilège sur les comptes de service et les flux base de données.",
],
},
],
};
|