# Model bezpieczeństwa Defence-in-Depth #sympozium #security #defence-in-depth ## Filozofia Sympozium implementuje **defence-in-depth** - wiele niezależnych warstw bezpieczeństwa, gdzie przełamanie jednej nie daje dostępu do systemu. ## Warstwy bezpieczeństwa ``` ┌───────────────────────────────────────────────┐ │ Warstwa 7: Agent Sandbox (gVisor/Kata) │ ← Izolacja kernela │ ┌───────────────────────────────────────────┐│ │ │ Warstwa 6: NetworkPolicy (deny-all) ││ ← Izolacja sieciowa │ │ ┌───────────────────────────────────────┐││ │ │ │ Warstwa 5: Admission Webhook │││ ← Walidacja przed tworzeniem │ │ │ ┌───────────────────────────────────┐│││ │ │ │ │ Warstwa 4: Ephemeral RBAC ││││ ← Efemeryczne credentials │ │ │ │ ┌───────────────────────────────┐││││ │ │ │ │ │ Warstwa 3: Pod SecurityContext │││││ ← Hardened container │ │ │ │ │ ┌───────────────────────────┐│││││ │ │ │ │ │ │ Warstwa 2: Sidecar isol. ││││││ ← Separacja credentials │ │ │ │ │ │ ┌───────────────────────┐│││││││ │ │ │ │ │ │ │ Warstwa 1: Ephemeral ││││││││ ← Krótki czas życia │ │ │ │ │ │ │ pod lifecycle ││││││││ │ │ │ │ │ │ └───────────────────────┘│││││││ │ │ │ │ │ └───────────────────────────┘││││││ │ │ │ │ └───────────────────────────────┘│││││ │ │ │ └───────────────────────────────────┘││││ │ │ └───────────────────────────────────────┘│││ │ └───────────────────────────────────────────┘││ └───────────────────────────────────────────────┘│ │ Multi-tenancy (namespaced CRDs + K8s RBAC) ─────┘ ``` ## Szczegóły warstw ### Warstwa 1: Ephemeral [[Pod]] Lifecycle - Każdy run = nowy pod = czyste środowisko - Brak persistent state w podzie - Automatyczny cleanup po zakończeniu - **Atak musi się zmieścić w jednym runie** ### Warstwa 2: [[Sidecar Pattern|Sidecar]] Isolation - Agent NIE MA credentials K8s API - Tylko skill sidecar ma [[RBAC]] - Tool calls przechodzą przez IPC (filesystem → NATS) - **Compromised agent nie ma bezpośredniego dostępu do klastra** ### Warstwa 3: Pod [[SecurityContext]] ```yaml securityContext: runAsNonRoot: true runAsUser: 1000 readOnlyRootFilesystem: true allowPrivilegeEscalation: false capabilities: drop: ["ALL"] seccompProfile: type: RuntimeDefault ``` ### Warstwa 4: Ephemeral [[RBAC]] - Credentials żyją TYLKO przez czas runu - Least-privilege (deklarowane w SkillPack) - [[Namespace]]-scoped ([[ownerReference|ownerRef]] GC) + Cluster-scoped (label-based cleanup) - **Brak standing god-role** ### Warstwa 5: [[Admission Webhook]] - `SympoziumPolicy` enforced PRZED tworzeniem poda - Tool gating (allow/deny/ask per tool) - Sandbox requirements - Feature gates - **Policy nie może być obejścia at runtime** ### Warstwa 6: [[NetworkPolicy]] - Deny-all egress na agent pods - Tylko IPC bridge ma dostęp do NATS - Whitelist konkretnych endpointów (API providerów) - **Agent nie może sięgnąć do internetu ani innych podów** ### Warstwa 7: Agent Sandbox (opcjonalna) - [[gVisor]]: user-space kernel - agent nie komunikuje się z host kernel - [[Kata Containers|Kata]]: lightweight VM - pełna izolacja na poziomie hypervisora - Warm pools eliminują cold-start penalty - **Nawet container escape nie daje dostępu do hosta** ## Multi-tenancy Dodatkowa warstwa ortogonalna do powyższych: - CRDs namespace-scoped - Standard K8s RBAC kontroluje kto tworzy agentów - Każdy tenant (SympoziumInstance) izolowany - ownerReferences zapobiegają cross-tenant access ## Porównanie z alternatywami | Warstwa | Sympozium | kagent | LangChain | |---------|-----------|--------|-----------| | Ephemeral lifecycle | Job per run | Persistent engine | In-process | | Sidecar isolation | Tak | Nie | Nie | | SecurityContext | Hardened | Standard | N/A | | Ephemeral RBAC | Tak | Standing SA | N/A | | Admission webhook | SympoziumPolicy | Nie | Nie | | NetworkPolicy | deny-all | Nie | Nie | | Kernel sandbox | gVisor/Kata | Nie | Nie | --- Powiązane: [[Agent Sandbox - gVisor i Kata]] | [[Efemeryczny RBAC per-run]] | [[NetworkPolicy i izolacja sieciowa]]