Gymterview
middle

Что такое 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

Стратегия миграции

  1. Начать с warn и audit на уровне restricted – увидеть, какие поды не соответствуют.
  2. Исправить манифесты подов, не прошедших проверку.
  3. Включить enforce: restricted.

Вывод

PSS/PSA – встроенный механизм Kubernetes для обеспечения минимальных стандартов безопасности подов на уровне namespace. Для банковских систем рекомендуется уровень restricted во всех production namespace-ах. Для более гибких политик (например, проверка подписей образов, проверка реестров) используйте Kyverno или OPA Gatekeeper.

На собеседовании: назовите три уровня (Privileged, Baseline, Restricted), объясните три режима применения (enforce, audit, warn). Упомяните, что PSA заменил PodSecurityPolicy с версии 1.25, и опишите стратегию постепенной миграции.