summaryrefslogtreecommitdiff
path: root/src/components/demos/zero-trust/scenarios/classic-perimeter.ts
blob: 6a6347de31cee5d5c328707dc0ba053b15476533 (plain)
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.",
      ],
    },
  ],
};