Безопасность подов и сетевые политики
Изоляция рабочих нагрузок
«Безопасность подов и сетевые политики» — бесплатный урок Cyber Security Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cyber Security Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cyber Security Academy содержит 4 уроков всего.
Изоляция рабочих нагрузок
Два механизма ограничивают возможности скомпрометированного пода: безопасность подов ограничивает привилегии пода, а сетевые политики определяют, какие поды могут взаимодействовать друг с другом. Вместе они ограничивают масштаб последствий.
- Безопасность подов не позволяет выйти из изоляции на узел.
- Сетевые политики предотвращают горизонтальное перемещение между подами.
Опасные настройки подов
Некоторые поля спецификации пода резко увеличивают риск, если их разрешить.
privileged: trueпредоставляет почти полный доступ к узлу.hostPID,hostNetwork,hostIPCнарушают изоляцию пространств имён.- Тома
hostPathподключают каталоги узла. - Добавленные возможности, например
SYS_ADMIN, позволяют выйти из изоляции. - Запуск от имени суперпользователя (
runAsUser: 0).
Допуск подов по требованиям безопасности
Pod Security Admission (PSA) заменил PodSecurityPolicy. Он применяет три встроенных стандарта в каждом пространстве имён.
- Привилегированный: без ограничений (не используйте для рабочих нагрузок).
- Базовый: блокирует известные способы повышения привилегий.
- Ограниченный: усиленный рекомендуемый вариант (не от имени суперпользователя, без привилегий, с удалёнными возможностями).
# Enforce the restricted standard on a namespace
kubectl label namespace prod \
pod-security.kubernetes.io/enforce=restrictedУсиленный securityContext
Определяйте принцип минимальных привилегий на уровне пода и контейнера с помощью securityContext.
- Запускайте от имени пользователя, не являющегося суперпользователем, с корневой файловой системой, доступной только для чтения.
- Удаляйте все возможности ОС, затем добавляйте только необходимые.
- Запрещайте повышение привилегий.
# securityContext fields (YAML)
# runAsNonRoot: true
# readOnlyRootFilesystem: true
# allowPrivilegeEscalation: false
# capabilities: drop: [ALL]
kubectl apply -f hardened-deploy.yamlЗа пределами стандартов: механизмы политик
Для более сложных правил, чем в PSA, контроллеры допуска применяют пользовательскую политику.
- OPA Gatekeeper оценивает ограничения Rego.
- Kyverno использует политики YAML и может не только проверять, но и изменять объекты.
Эти механизмы могут запретить hostPath, потребовать подписанные образы или применить метки во всём кластере.
# Apply a Kyverno policy that disallows privileged pods
kubectl apply -f disallow-privileged.yamlСеть, открытая по умолчанию
По умолчанию все поды могут обращаться ко всем остальным подам во всех пространствах имён. Сегментация отсутствует, пока вы не добавите сетевые политики. Именно поэтому при плоской сети один скомпрометированный под может сканировать и атаковать весь кластер.
# From a pod, the flat network lets you reach any service
curl http://internal-db.prod.svc.cluster.local:5432Основы сетевых политик
Сетевые политики — это правила в пределах пространства имён, которые выбирают поды и разрешают конкретный входящий или исходящий трафик. Они дополняют друг друга: применение любой политики к поду включает запрет по умолчанию для направления, которого она касается.
- Поды выбираются по меткам.
- Правила разрешают трафик от определённых подов, пространств имён или сетевых диапазонов и к ним.
- Требуется CNI, поддерживающий политики (Calico, Cilium).
Сначала запрет по умолчанию, затем разрешения
Рекомендуемый подход — установить базовый запрет по умолчанию для каждого пространства имён, а затем добавить явные правила разрешения для необходимых потоков.
# Default-deny all ingress in a namespace (YAML)
# kind: NetworkPolicy spec: podSelector: {} policyTypes: [Ingress]
kubectl apply -f default-deny.yaml
# Then allow only frontend -> backend
kubectl apply -f allow-frontend.yamlОграничение исходящего трафика и блокировка метаданных
Политики исходящего трафика так же важны, как и политики входящего трафика.
- Ограничивайте внешние конечные точки, к которым могут обращаться поды (это ограничивает утечку данных и связь с серверами управления).
- Блокируйте облачный IP-адрес метаданных
169.254.169.254для подов, чтобы предотвратить кражу учётных данных узла. - Ограничивайте DNS и внутренний трафик между подами.
Защита во время выполнения
Статическую политику дополняет обнаружение во время выполнения.
- Falco сообщает о подозрительных системных вызовах (оболочка в контейнере, чувствительные подключения).
- Профили seccomp ограничивают системные вызовы, которые может выполнять контейнер.
- AppArmor/SELinux добавляют обязательный контроль доступа на узле.
# Apply the runtime/default seccomp profile (securityContext)
# seccompProfile: type: RuntimeDefault
kubectl apply -f seccomp-deploy.yamlПроверка изоляции
При проверке изоляции выполняйте из тестового пода попытки установить соединения между подами и использовать механизмы выхода из изоляции, подтверждая, что политики их блокируют. Делайте это в контролируемом пространстве имён, а затем удалите тестовые поды.
Сообщайте о любом поде, запущенном с привилегиями, и о любом пространстве имён без запрета по умолчанию, указывая точное исправление манифеста.
Быстрая проверка
Подтвердите знания об изоляции.
Итоги
Вы научились изолировать рабочие нагрузки.
- Pod Security Admission (ограниченный режим) и securityContext блокируют выход из изоляции.
- Gatekeeper и Kyverno применяют пользовательские политики допуска.
- Сеть по умолчанию открыта; сначала применяйте запрет по умолчанию, затем явные разрешения.
- Правила исходящего трафика, блокировка метаданных и Falco усиливают защиту.
Далее: защита цепочки поставок и секретов.
Часто задаваемые вопросы
Урок «Безопасность подов и сетевые политики» бесплатный?
Да — полный текст урока «Безопасность подов и сетевые политики» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cyber Security Academy, подпишись на CoddyKit PRO. Курс Cyber Security Academy содержит 4 уроков всего.
Чему я научусь в уроке «Безопасность подов и сетевые политики»?
Изоляция рабочих нагрузок Ты практикуешь Cyber Security Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Cyber Security Academy?
Предыдущий опыт не требуется. Cyber Security Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Безопасность подов и сетевые политики»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Cyber Security Academy?
Да. Каждый урок Cyber Security Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Модель угроз Kubernetes
- RBAC и служебные учётные записи
- Безопасность подов и сетевые политики
- Защита цепочки поставок и секретов