summaryrefslogtreecommitdiff
path: root/src/components/demos/zero-trust/scenarios/classic-perimeter.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/demos/zero-trust/scenarios/classic-perimeter.ts')
-rw-r--r--src/components/demos/zero-trust/scenarios/classic-perimeter.ts123
1 files changed, 123 insertions, 0 deletions
diff --git a/src/components/demos/zero-trust/scenarios/classic-perimeter.ts b/src/components/demos/zero-trust/scenarios/classic-perimeter.ts
new file mode 100644
index 0000000..6a6347d
--- /dev/null
+++ b/src/components/demos/zero-trust/scenarios/classic-perimeter.ts
@@ -0,0 +1,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.",
+ ],
+ },
+ ],
+};