Налаштування 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-профіль. Кроки впровадження:
- Встановіть audit і warn режими на всіх namespace.
- Проаналізуйте порушення через
kubectl get eventsта audit logs kube-apiserver. - Виправте маніфести додатків: додайте securityContext, seccompProfile, відмовтеся від root.
- Переведіть 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. Вартість налаштування розраховується індивідуально і залежить від об'єму кластера, але повертається за рахунок зниження ризиків. Замовте аудит безпеки вашого кластера, щоб почати.







