Pod Security Admission

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

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

Содержание

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

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

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

Ключевые замечания:

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

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

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

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

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

Метки 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']