initial commit
This commit is contained in:
112
05-Bezpieczeństwo/Model bezpieczeństwa Defence-in-Depth.md
Normal file
112
05-Bezpieczeństwo/Model bezpieczeństwa Defence-in-Depth.md
Normal file
@@ -0,0 +1,112 @@
|
||||
# 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]]
|
||||
Reference in New Issue
Block a user