Files
obsidian-sympozium/05-Bezpieczeństwo/Model bezpieczeństwa Defence-in-Depth.md
2026-03-25 00:05:57 +01:00

113 lines
5.5 KiB
Markdown

# 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]]