Налаштування 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
    1142