5.5 KiB
5.5 KiB
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 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
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 GC) + Cluster-scoped (label-based cleanup)
- Brak standing god-role
Warstwa 5: Admission Webhook
SympoziumPolicyenforced 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: 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