From 96615b46a72e7902f7ade2619b21649bf41b2b1b Mon Sep 17 00:00:00 2001 From: ertopogo Date: Mon, 6 Apr 2026 13:50:16 +0200 Subject: documentation zero trust --- .../zero-trust/scenarios/classic-perimeter.ts | 123 +++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 src/components/demos/zero-trust/scenarios/classic-perimeter.ts (limited to 'src/components/demos/zero-trust/scenarios/classic-perimeter.ts') 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 => ({ + 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.", + ], + }, + ], +}; -- cgit v1.2.3