Брандмауэр (NetworkPolicy/Microsegmentation) управляет только сетевым трафиком между подами/сервисами. Он никак не ограничивает привилегии процессов внутри контейнера на уровне ОС: запуск от root, монтирование hostPath, манипуляции с ядром, доступ к /proc, /sys, use of hostPID/hostNetwork, эскалация привилегий через setuid. Без security contexts злоумышленник, проникший в под, может скомпрометировать хост (container escape) или нарушить изоляцию других подов — брандмауэр это не остановит.
Причины:
1. Брандмауэр не перехватывает syscalls — не блокирует `mount`, `setuid`, `capset`, etc.
2. Брандмауэр не контролирует capabilities — контейнер с CAP_SYS_ADMIN может управлять сетевыми интерфейсами, игнорируя firewall.
3. Брандмауэр не проверяет UID/GID — контейнер с `runAsUser: 0` имеет root-права на хосте (если не включен user namespace).
4. Брандмауэр не влияет на монтирование host resources — пода с hostPath volume `/var/run/docker.sock` получает полный контроль над демоном, минуя сетевую политику.
5. Брандмауэр не обрабатывает SELinux/AppArmor — без security context профили по умолчанию (часто разрешающие) не применяются.
Решение:
Внедрить security contexts как обязательный overlay-слой защиты на уровне манифеста пода. Пример минимально безопасной конфигурации:
yaml
apiVersion: v1
kind: Pod
metadata:
name: secure-pod
spec:
securityContext:
runAsUser: 1001 # не root
runAsGroup: 1001
fsGroup: 1001
supplementalGroups: [2000]
containers:
- name: app
image: app:latest
securityContext:
allowPrivilegeEscalation: false
privileged: false
capabilities:
drop: ["ALL"] # убрать все, добавить только нужные
readOnlyRootFilesystem: true
seLinuxOptions:
level: "s0:c123,c456"
seccompProfile:
type: RuntimeDefault # или LocalhostНа уровне кластера — принудительное применение через PodSecurityAdmission (встроен с k8s 1.23+):
Политика `restricted` (пример):
kubectl
label ns default pod-security.kubernetes.io/enforce=restrictedДля OpenShift — SecurityContextConstraints (SCC). Для Google GKE/других — Gatekeeper (OPA) или Kyverno.
Итог:
- Брандмауэр — защита сети (горизонтальная).
- SecurityContext — защита ядра и хоста (вертикальная).
Оба необходимы для defense-in-depth. Не заменяют друг друга.