Политики безопасности Pod
ACP поддерживает Kubernetes Pod Security Admission (PSA) и Kyverno Policy для помощи в обеспечении стандартов безопасности для Pod, работающих в ваших кластерах.
Содержание
Pod Security AdmissionРежимы безопасностиСтандарты безопасностиКонфигурацияМетки namespaceИсключенияKyverno PolicyПредварительные требованияПрименение Kyverno политикВеб-консольCLIPod Security Admission
Обратитесь к официальной документации Kubernetes: Pod Security Admission
Pod Security Admission (PSA) — это контроллер допуска Kubernetes, который обеспечивает выполнение политик безопасности на уровне namespace, проверяя спецификации Pod на соответствие предопределённым стандартам.
Режимы безопасности
PSA определяет три режима для управления обработкой нарушений политики:
Ключевые замечания:
- Enforce действует только на Pod (например, отклоняет Pod, но позволяет ресурсы, не являющиеся Pod, такие как Deployments).
- Audit и Warn применяются как к Pod, так и к их контроллерам (например, Deployments).
Стандарты безопасности
PSA определяет три стандарта безопасности для ограничения привилегий Pod:
Конфигурация
Метки namespace
Применяйте метки к namespace для определения политик PSA.
Пример YAML файла
Команда CLI
Исключения
Исключайте конкретных пользователей, namespace или runtime классы из проверок PSA.
Пример конфигурации:
Kyverno Policy
ACP предоставляет несколько примеров для создания Kyverno политик безопасности Pod. Примеры включают:
- Restricted: Restricted запрещает доступ ко всем функциям хоста и требует, чтобы Pod запускались с UID и SELinux контекстом, выделенными для namespace.
- Restricted-v2: Restricted-v2 запрещает доступ ко всем функциям хоста и требует, чтобы Pod запускались с UID и SELinux контекстом, выделенными для namespace. Это самая строгая политика, используемая по умолчанию для аутентифицированных пользователей. В дополнение к устаревшей политике 'restricted', она требует удаления ВСЕХ capabilities и запрещает бинарники для повышения привилегий. Также по умолчанию устанавливает seccomp профиль в runtime/default, если он не задан, иначе требуется этот профиль seccomp.
- Anyuid: Anyuid предоставляет все возможности политики restricted, но позволяет запускать Pod с любым UID и GID.
- Hostaccess: Hostaccess разрешает доступ ко всем namespace хоста, но требует, чтобы Pod запускались с UID и SELinux контекстом, выделенными для namespace. ВНИМАНИЕ: эта политика разрешает доступ к namespace, файловым системам и PID хоста. Используйте только для доверенных Pod. Предоставляйте с осторожностью.
- Hostmount-anyuid: Hostmount-anyuid предоставляет все возможности политики restricted, но разрешает хостовые монтирования и любой UID для Pod. В основном используется для recycler persistent volume. ВНИМАНИЕ: эта политика разрешает доступ к файловой системе хоста с любым UID, включая UID 0. Предоставляйте с осторожностью.
- Hostnetwork: Hostnetwork разрешает использование сетей и портов хоста, но требует, чтобы Pod запускались с UID и SELinux контекстом, выделенными для namespace.
- Hostnetwork-v2: Hostnetwork-v2 разрешает использование сетей и портов хоста, но требует, чтобы Pod запускались с UID и SELinux контекстом, выделенными для namespace. В дополнение к устаревшей политике 'hostnetwork', требует удаления ВСЕХ capabilities и запрещает бинарники для повышения привилегий. По умолчанию устанавливает seccomp профиль в runtime/default, если он не задан, иначе требуется этот профиль seccomp.
- Node-exporter: Политика Node-exporter используется для Prometheus node exporter.
- Nonroot: Nonroot предоставляет все возможности политики restricted, но позволяет запускать Pod с любым не-root UID. Пользователь должен указать UID или он должен быть указан в манифесте контейнерного рантайма.
- Nonroot-v2: Nonroot-v2 предоставляет все возможности политики restricted, но позволяет запускать Pod с любым не-root UID. Пользователь должен указать UID или он должен быть указан в манифесте контейнерного рантайма. В дополнение к устаревшей политике 'nonroot', требует удаления ВСЕХ capabilities и запрещает бинарники для повышения привилегий. По умолчанию устанавливает seccomp профиль в runtime/default, если он не задан, иначе требуется этот профиль seccomp.
- Privileged: Privileged разрешает доступ ко всем привилегированным функциям и функциям хоста, а также возможность запускать с любым пользователем, любой группой, любым fsGroup и с любым SELinux контекстом. ВНИМАНИЕ: это самая либеральная политика и должна использоваться только для администрирования кластера. Предоставляйте с осторожностью.
Политика Restricted не равна стандарту Kubernetes Pod Security Admission 'restricted'. Возможно, вам потребуется изменить конфигурацию безопасности Pod, если вы хотите использовать Kyverno политику Restricted вместо стандарта Kubernetes Pod Security Admission 'restricted'.
Предварительные требования
- Установите Alauda Container Platform Compliance для Kyverno, обратитесь к документу.
- Включите feature gate
namespace-resource-manageв настройках featuregate ACP.
Применение Kyverno политик
Веб-консоль
- В консоли ACP перейдите в Container Platform, выберите namespace, в котором хотите применить политику безопасности.
- Перейдите в Advanced > Resources.
- Найдите ресурс типа Policy из группы kyverno.io.
- Выберите версию "v2beta1", нажмите Create для создания новой Kyverno политики.
- В диалоге Create Resource выберите вкладку Samples.
- Выберите нужный пример политики безопасности Pod (например,
Restricted), затем нажмите Try. - Просмотрите и при необходимости измените YAML политики, затем нажмите Update для применения политики.
CLI
-
Войдите в Kubernetes кластер, где хотите применить политику безопасности.
-
Выполните следующую команду для создания Kyverno политики из примерного ресурса:
Доступные примерные ресурсы:
- restricted-policy
- restrictedv2-policy
- anyuid-policy
- hostaccess-policy
- hostmount-anyuid-policy
- hostnetwork-policy
- hostnetwork-v2-policy
- node-exporter-policy
- nonroot-policy
- nonroot-v2-policy
- privileged-policy