Что такое Pod Security Standards и Pod Security Admission?
Pod Security Standards (PSS) – это набор из трёх предопределённых уровней безопасности для подов в Kubernetes, а Pod Security Admission (PSA) – встроенный admission controller, который применяет эти стандарты. PSS/PSA заменили устаревший PodSecurityPolicy, удалённый в Kubernetes 1.25.
Три уровня Pod Security Standards
| Уровень | Описание | Когда использовать |
|---|---|---|
| Privileged | Без ограничений | Системные компоненты (CNI, мониторинг, логирование) |
| Baseline | Минимальные ограничения, предотвращающие известные повышения привилегий | Некритичные приложения, staging |
| Restricted | Максимальные ограничения, следующие лучшим практикам | Банковские приложения, production |
Что запрещает каждый уровень
Baseline запрещает:
hostNetwork,hostPID,hostIPC- Привилегированные контейнеры (
privileged: true) - Опасные capabilities (NET_RAW и др.)
- Монтирование
hostPath - Определённые типы volume
Restricted дополнительно запрещает:
- Запуск от root (
runAsNonRootобязателен) - Privilege escalation (
allowPrivilegeEscalation: falseобязателен) - Все capabilities, кроме
NET_BIND_SERVICE - Требует seccomp-профиль (
RuntimeDefaultилиLocalhost) - Рекомендует read-only root filesystem
Настройка через labels на namespace
Пример
apiVersion: v1
kind: Namespace
metadata:
name: banking
labels:
# Режимы: enforce, audit, warn
pod-security.kubernetes.io/enforce: restricted
pod-security.kubernetes.io/enforce-version: latest
pod-security.kubernetes.io/audit: restricted
pod-security.kubernetes.io/audit-version: latest
pod-security.kubernetes.io/warn: restricted
pod-security.kubernetes.io/warn-version: latest
| Режим | Поведение |
|---|---|
| enforce | Блокирует создание подов, нарушающих политику |
| audit | Разрешает, но записывает нарушение в audit log |
| warn | Разрешает, но показывает предупреждение пользователю |
Пример пода, соответствующего уровню Restricted
Полный манифест compliant-пода
apiVersion: v1
kind: Pod
metadata:
name: compliant-banking-app
namespace: banking
spec:
securityContext:
runAsNonRoot: true
seccompProfile:
type: RuntimeDefault
containers:
- name: app
image: registry.bank.local/banking-service:1.0.0
securityContext:
runAsUser: 1000
runAsGroup: 1000
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop:
- ALL
resources:
limits:
memory: "512Mi"
cpu: "500m"
requests:
memory: "256Mi"
cpu: "250m"
volumeMounts:
- name: tmp
mountPath: /tmp
volumes:
- name: tmp
emptyDir: {}
automountServiceAccountToken: false
Стратегия миграции
- Начать с
warnиauditна уровне restricted – увидеть, какие поды не соответствуют. - Исправить манифесты подов, не прошедших проверку.
- Включить
enforce: restricted.
Вывод
PSS/PSA – встроенный механизм Kubernetes для обеспечения минимальных стандартов безопасности подов на уровне namespace. Для банковских систем рекомендуется уровень restricted во всех production namespace-ах. Для более гибких политик (например, проверка подписей образов, проверка реестров) используйте Kyverno или OPA Gatekeeper.
На собеседовании: назовите три уровня (Privileged, Baseline, Restricted), объясните три режима применения (enforce, audit, warn). Упомяните, что PSA заменил PodSecurityPolicy с версии 1.25, и опишите стратегию постепенной миграции.