Pod Security Admission

Обратитесь к официальной документации Kubernetes: Pod Security Admission

Pod Security Admission (PSA) — это контроллер допуска Kubernetes, который обеспечивает соблюдение политик безопасности на уровне namespace, проверяя спецификации Pod на соответствие предопределённым стандартам.

Содержание

Режимы безопасности

PSA определяет три режима для управления обработкой нарушений политики:

РежимПоведениеСценарий использования
EnforceЗапрещает создание/изменение несоответствующих Pods.Производственные среды, требующие строгого соблюдения безопасности.
AuditПозволяет создавать Pods, но регистрирует нарушения в логах.Мониторинг и анализ инцидентов безопасности без блокировки рабочих нагрузок.
WarnПозволяет создавать Pods, но возвращает клиенту предупреждения о нарушениях.Тестовые среды или переходные этапы для корректировки политик.

Основные замечания:

  • Режим Enforce действует только на Pods (например, отклоняет Pods, но разрешает ресурсы, не являющиеся Pods, такие как Deployments).
  • Режимы Audit и Warn применяются как к Pods, так и к их контроллерам (например, Deployments).

Стандарты безопасности

PSA определяет три стандарта безопасности для ограничения привилегий Pod:

СтандартОписаниеОсновные ограничения
PrivilegedНеограниченный доступ. Подходит для доверенных рабочих нагрузок (например, системных компонентов).Нет проверки полей securityContext.
BaselineМинимальные ограничения для предотвращения известных эскалаций привилегий.Блокирует hostNetwork, hostPID, привилегированные контейнеры и неограниченные тома hostPath.
RestrictedСамая строгая политика, обеспечивающая лучшие практики безопасности.Требует:
- runAsNonRoot: true
- seccompProfile.type: RuntimeDefault
- Удалённые возможности Linux.

Конфигурация

Метки namespace

Применяйте метки к namespace для определения политик PSA.

Пример YAML файла

apiVersion: v1
kind: Namespace
metadata:
  name: example-namespace
  labels:
    pod-security.kubernetes.io/enforce: restricted
    pod-security.kubernetes.io/audit: baseline
    pod-security.kubernetes.io/warn: baseline

Команда CLI

# Шаг 1: Обновить метки Pod Admission
kubectl label namespace <namespace-name> \
  pod-security.kubernetes.io/enforce=baseline \
  pod-security.kubernetes.io/audit=restricted \
  --overwrite

# Шаг 2: Проверить метки
kubectl get namespace <namespace-name> --show-labels

Исключения

Исключайте конкретных пользователей, namespace или runtime классы из проверок PSA.

Пример конфигурации:

apiVersion: pod-security.admission.config.k8s.io/v1
kind: PodSecurityConfiguration
exemptions:
  usernames: ['admin']
  runtimeClasses: ['nvidia']
  namespaces: ['kube-system']