Код-ревью Middle Облако и контейнеры обновлено
Ревью: манифест Deployment
Вопрос
Найдите проблемы безопасности в манифесте Kubernetes.
apiVersion: apps/v1
kind: Deployment
metadata: { name: api }
spec:
template:
spec:
serviceAccountName: default
hostNetwork: true
containers:
- name: api
image: registry.example.com/api:latest
securityContext:
privileged: true
runAsUser: 0
env:
- name: JWT_SECRET
value: "change-me"
volumeMounts:
- { name: host, mountPath: /host }
volumes:
- name: host
hostPath: { path: / }
Коротко
Этот манифест не прошёл бы Pod Security уровня baseline, не то что restricted. Включённый Pod Security Admission на namespace просто не дал бы его создать.
Что должен найти ревьюер
- Безопасностьстрока 7Используется сервисный аккаунт
defaultс автомонтированием токена: нужен отдельный аккаунт с минимальными правами илиautomountServiceAccountToken: false. - Безопасностьстрока 8
hostNetwork: true: под видит сеть узла, включая локальные сервисы и метаданные. - Безопасностьстрока 11Образ по тегу
latest, без digest и проверки подписи. - Безопасностьстрока 13
privileged: true: полный доступ к устройствам узла, побег из контейнера тривиален. - Безопасностьстрока 14Запуск от root (
runAsUser: 0). НужныrunAsNonRoot,allowPrivilegeEscalation: false,readOnlyRootFilesystem,capabilities.drop: [ALL]. - Безопасностьстрока 17Секрет прямо в манифесте и в git, к тому же слабый.
- Безопасностьстрока 22
hostPath: /монтирует всю файловую систему узла. - Производительностьстрока 10Нет
resources.limits: один под может забрать ресурсы узла.
Разбор
Этот манифест не прошёл бы Pod Security уровня baseline, не то что restricted. Включённый Pod Security Admission на namespace просто не дал бы его создать.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.