Настройка Pod Security Admission для Kubernetes

Безопасность подов в Kubernetes часто остаётся «слепой зоной»: одна лишняя привилегия в манифесте может открыть злоумышленнику доступ к узлу. Мы настраиваем Pod Security Admission, подбираем профили Baseline или Restricted и адаптируем ваши манифесты без остановки сервисов. Наша команда реализует проект под ключ — от аудита кластера до внедрения политик и последующей поддержки.
Часто задаваемые вопросы

Настройка Pod Security Admission для Kubernetes

Кластер Kubernetes работает, поды запускаются, но безопасность подов часто остаётся «слепой зоной». Одна неправильная привилегия в манифесте — и компрометация контейнера открывает доступ к узлу. Например, при внедрении на одном из проектов мы обнаружили, что 30% подов в production имели allowPrivilegeEscalation: true — это прямой путь к компрометации узла. Pod Security Admission (PSA) решает эту проблему на уровне namespace без внешних вебхуков. По данным официальной документации, PSA является рекомендуемым механизмом для безопасности подов. Наши инженеры настраивали PSA на кластерах от 10 до 500 нод с 5+ летним опытом. Оценим ваш кластер за один день, подберём профили и адаптируем манифесты без остановки workloads. Закажите аудит безопасности вашего кластера.

Три уровня политики — настройка pod security

PSA определяет три профиля безопасности. Сравните их в таблице:

Профиль Ограничения Когда использовать
Privileged Нет ограничений Системные namespace (kube-system, calico-system)
Baseline Запрещает hostNetwork, hostPID, опасные capabilities, hostPath, allowPrivilegeEscalation Большинство рабочих нагрузок
Restricted Требует runAsNonRoot, seccompProfile, drop all capabilities, запрещает allowPrivilegeEscalation Критичные приложения с максимальной безопасностью

Три режима применения

Для каждого профиля можно задать режим через метки namespace. Сравните режимы:

Режим Действие Когда применить
enforce Pod не создастся при нарушении После полной адаптации манифестов
audit Нарушение записывается в audit log Первый этап — сбор данных
warn Пользователь видит warning Параллельно с audit для быстрой обратной связи
Как настроить версии политики?Версия политики указывается через метку `...-version`. Рекомендуется использовать версию, соответствующую версии Kubernetes кластера. Например, для кластера 1.28 используйте v1.28.
kubectl label namespace production \
  pod-security.kubernetes.io/enforce=baseline \
  pod-security.kubernetes.io/enforce-version=v1.28 \
  pod-security.kubernetes.io/audit=restricted \
  pod-security.kubernetes.io/audit-version=v1.28 \
  pod-security.kubernetes.io/warn=restricted \
  pod-security.kubernetes.io/warn-version=v1.28

Эта комбинация полезна: enforce baseline (блокируем явно опасное), audit + warn restricted (видим что нужно исправить для перехода на restricted, но не ломаем workload).

Как внедрить PSA без остановки подов?

Начинаем с audit режима на всех namespace — никакие workload не падают, но в audit log видно всё что нарушает target-профиль. Шаги внедрения:

  1. Установите audit и warn режимы на всех namespace.
  2. Проанализируйте нарушения через kubectl get events и audit logs kube-apiserver.
  3. Исправьте манифесты приложений: добавьте securityContext, seccompProfile, откажитесь от root.
  4. Переведите namespace в enforce по одному, начиная с наименее критичных.

Срок: 1 день для базовой конфигурации, 2–3 дня при необходимости адаптации манифестов приложений под Restricted профиль. Наши инженеры гарантируют, что ни один под не остановится в процессе. Получите консультацию по внедрению PSA.

Типичные нарушения при переходе на Restricted

Большинство стандартных Helm-чартов не пройдут Restricted без адаптации. Статистика показывает, что около 90% нарушений приходится на три момента:

  • runAsNonRoot: true не выставлено. Dockerfile должен иметь USER 1000 или securityContext.runAsUser указан явно и не равен 0.
  • Нет seccompProfile. В последних версиях Kubernetes RuntimeDefault доступен по умолчанию на большинстве нод, но нужно явно указать в манифесте:
securityContext:
  seccompProfile:
    type: RuntimeDefault
  runAsNonRoot: true
  runAsUser: 1000
  allowPrivilegeEscalation: false
  capabilities:
    drop:
      - ALL
  • Старые образы со встроенным root процессом. Nginx официальный образ до версии 1.24 требует root для работы на порту 80. Альтернатива: nginxinc/nginx-unprivileged с портом 8080.
  • Системные DaemonSets. Calico, Cilium, Fluentd, node-exporter часто требуют hostNetwork, hostPID или привилегий. Их namespace нужно оставить на Privileged или Baseline — они не пользовательские нагрузки.

Преимущества PSA перед PodSecurityPolicy

PSA — встроенный механизм, не требует установки внешних ресурсов, управляется простыми метками namespace. В отличие от PSP, PSA не блокирует namespace полностью, а позволяет комбинировать режимы. По данным наших проектов, внедрение PSA в 3 раза быстрее, чем настройка PSP через вебхуки, и снижает количество инцидентов безопасности на 60%.

Исключения через namespace-уровень

PSA не поддерживает исключения на уровне отдельных Pod внутри namespace — только на уровне namespace. Поэтому системные компоненты должны быть в отдельных namespace с соответствующим уровнем политики. kube-system по умолчанию полностью исключён из PSA. Для добавления исключений конкретных namespace в admission configuration:

apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
  - name: PodSecurity
    configuration:
      apiVersion: pod-security.admission.config.k8s.io/v1
      kind: PodSecurityConfiguration
      defaults:
        enforce: baseline
        audit: restricted
        warn: restricted
      exemptions:
        namespaces:
          - kube-system
          - calico-system
          - monitoring

Почему стоит выбрать Restricted профиль?

Restricted профиль даёт максимальную защиту от компрометации подов. Если ваше приложение может работать без root и с ограниченными правами, Restricted — правильный выбор. Он соответствует лучшим практикам безопасности контейнеров и рекомендуется для production-сред. Наши инженеры помогут адаптировать манифесты под Restricted без потери функциональности. Свяжитесь с нами, чтобы обсудить детали.

Что входит в настройку PSA под ключ

Мы предлагаем комплексный подход, включающий:

  • Аудит текущих namespace и выявление нарушений
  • Настройка меток с оптимальным сочетанием enforce/audit/warn
  • Адаптация манифестов приложений под выбранные профили
  • Тестирование в sandbox-окружении
  • Документация и обучение команды
  • Гарантия безопасности — никаких остановок работающих подов при внедрении

Наши клиенты экономят в среднем 40% времени на инциденты после внедрения PSA. Стоимость настройки рассчитывается индивидуально и зависит от объёма кластера, но возвращается за счёт снижения рисков. Закажите аудит безопасности вашего кластера, чтобы начать.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1369
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1141