Рекомендации по защите Kubernetes: разбор CIS Benchmark - Академия Selectel

Рекомендации по защите Kubernetes: разбор CIS Benchmark

Матвей Чернов
Матвей Чернов Технический автор
5 ноября 2025

В этой статье разберем, какие стандарты защищают контейнерные среды, почему CIS-бенчмарк часто становится первой точкой опоры, какие практики дополняют его и как Managed Kubernetes превращается в автоматизированный рабочий процесс.

Изображение записи

Kubernetes в IT-инфраструктуре — это не просто про удобство деплоя. Это критическая часть сервиса. Одна неправильная настройка kube-apiserver или etcd — и вместо кластера вы получите бублик с дыркой, через который утекут и данные, и бизнес-процессы.

Карта стандартов: кто за что отвечает

Задумывались ли вы, почему быстрые и удобные контейнеры так часто становятся источником сюрпризов в продакшене? Быстрый релиз приводит к «image churn», то есть к частой смене образов и тегов. Без строгого контроля версий и сканирования образов вы быстро накапливаете уязвимые артефакты, а это идеальная среда для ошибок и уязвимостей. Давайте взглянем, какие вообще есть стандарты безопасности в Kubernetes.

CIS Benchmark

Начнем с того, что чаще всего в стратегии безопасности лежит практичный и проверенный CIS Kubernetes Benchmark. Представьте его как фундамент, на котором строится надежный дом, или как внешнюю стену замка. 

Схема процесса разработки стандартов безопасности CIS Benchmark.
Источник.

Почему его берут за основу? Этот стандарт помогает привести кластер к базовому уровню защиты, контролировать ключевые настройки control plane, узлов, RBAC, сетей и хранилищ. Именно с этого стоит начать, чтобы закрыть самые очевидные дыры и избежать бессонницы.


Снизим базовые риски — например, неправильные разрешения доступа, открытые порты или уязвимые настройки, которые часто становятся точками проникновения. Подробнее о том, как строится оборона замка стратегия безопасности, поговорим в следующем пункте.

NSA/CISA

NSA/CISA Hardening Guide — следующий уровень. Это про зрелые операционные процессы: тонкую настройку системного аудита (kube-audit/auditd), понятные руководства и тесты восстановления.

Гайд говорит не только о профилактике, но и о том, как быстро обнаружить атаку, ограничить область поражения и вернуть систему в строй. Он включает рекомендации по runtime-защите (EDR, eBPF/Falco), телеметрии и интеграции алертов в процессы on-call. Идеально для команд, у которых базовая защита уже есть и которые готовы вкладываться в процессы, автоматизацию и дисциплину. Словом, для тех, кто хочет ловить не только эксплойты, но и время на кофе, когда что-то пойдет не так.

STIG

Если в вашем бизнесе Kubernetes пока больше на слайдах, чем в реальных процессах, то к теме безопасности вы все равно придете скоро. Особенно, когда в дело вмешивается регулятор, который начинает интересоваться, как у вас там все устроено.

Для тех, кто работает с особо чувствительными данными, существуют более жесткие наборы требований. Например, STIG (Security Technical Implementation Guides). На него можно смотреть как на эталон, но при этом полезно помнить, что в российских реалиях первичны все же национальные регламенты — ФСТЭК, ГОСТ и отраслевые требования. Эти локальные документы во многом опираются на международные best practices (включая идеи CIS), но формулируют обязательные меры по-своему. 

Какие еще есть стандарты

Если смотреть шире, чем STIG, то полезно держать в голове и другие стандарты. Например, NIST SP 800-190 описывает весь жизненный цикл контейнеров — от цепочки поставок и инфраструктуры до обновлений и мониторинга. Соблюдение PCI DSS обязательно для компаний, обрабатывающих данные платежных карт. В России есть еще и свои правила игры, продиктованные ФСТЭК и другими регуляторами, которые требуют внимания к деталям. 

Есть и концептуальные модели, поясняющие структуры облачной безопасности, — например, модель 4С’s фокусируется на четырех уровнях защиты.

Модель 4С’s

  • Защита приложений и используемых библиотек.
  • Контроль над запускаемыми контейнерами и защита runtime.
  • Ограничение доступа к Kubernetes control plane и узлам кластера.
  • Безопасный доступ к API Cloud и инфраструктуре.

И все-таки, выбор стандарта зависит от того, где и как вы работаете. Конечно, в чистом виде стандарты используются редко. В основном все комбинируется и подбирается под задачи. 

CIS Benchmark универсален: подойдет и стартапу, который только запускает Kubernetes, и крупной компании, где админы знают все баги кластера по именам. В отличие от более тяжелых стандартов, CIS можно быстро внедрить, а результат увидеть сразу — без бюрократического болота. Что же собой представляет CIS?

CIS Kubernetes Benchmark: что внутри и как извлечь реальную пользу

CIS Kubernetes Benchmark — это подробный и практико-ориентированный набор рекомендаций по безопасности кластера Kubernetes, разработанный Центром интернет-безопасности (Center for Internet Security, CIS). 

Чтобы не утонуть в документации и действительно извлечь пользу, важно понять его структуру и подход к внедрению. Рассмотрим CIS Benchmark «на пальцах» через пять крупных блоков, которые охватывают ключевые аспекты безопасности Kubernetes. 

Аспекты безопасности Kubernetes.

Master

Это физические или виртуальные узлы, где запущены управляющие компоненты кластера (kube-apiserver, kube-controller-manager и kube-scheduler) и которые отвечают за принятие всех ключевых решений. CIS подчеркивает, что master — это центр управления кластером. Внутри — манифесты, kubeconfig-файлы и PKI-артефакты. Они напрямую влияют на поведение API server, controller-manager, scheduler и etcd. Главный подход — жесткая защита целостности и конфиденциальности этих артефактов. Предотвратить незаметную подмену конфигураций или ключей, через корректных владельцев и файл-права.

Рекомендации и инструкции

Проверьте и при необходимости исправьте владельцев и права доступа файлов манифестов контроллеров и конфигов. Для проверки используйте stat. 

Например:

  • stat -c %a /etc/kubernetes/manifests/kube-apiserver.yaml 
  • stat -c %U:%G /etc/kubernetes/manifests/kube-apiserver.yaml

Если права и владелец некорректны, исправьте их: 

  • chmod 600 /etc/kubernetes/manifests/kube-apiserver.yaml 
  • chown root:root /etc/kubernetes/manifests/kube-apiserver.yaml 

Аналогичным образом приведите в порядок controller-manager и scheduler, а также kubeconfig-файлы типа admin.conf/controller-manager.conf/scheduler.conf — рекомендуемые права для приватных конфигов 600, владельцем root:root. 

Проверьте PKI. Публичные сертификаты обычно 644, приватные ключи — 600 и принадлежат root:root. 

Etcd

Это спецхранилище, которое помогает Kubernetes хранить всю важную информацию о состоянии кластера. Etcd хранит весь состояние API, поэтому CIS требует защищать как каналы связи, так и данные на диске. Основная идея — обеспечить TLS для peer- и client-подключений и включить проверку клиентских сертификатов. А чтобы один скомпрометированный узел не дал легкого доступа к ключевым данным — держать data directory с жесткими правами.

Рекомендации и инструкции

1. Выполняйте аудит флагов etcd через ps -ef | grep etcd и сверяйте наличие параметров --cert-file, --key-file, --peer-cert-file, --peer-key-file. Если для peer-/client-соединений TLS не настроен, отредактируйте манифест /etc/kubernetes/manifests/etcd.yaml и добавьте корректные пути к сертификатам и ключам. 

2. Включите проверку клиентских сертификатов: убедитесь, что задано --peer-client-cert-auth=true и при необходимости --client-cert-auth=true

3. Отключите автоматическую генерацию self-signed сертификатов, проверив и при необходимости установив --auto-tls=false и --peer-auto-tls=false

4. Проверьте права директории данных etcd. Правильное значение —700, а владелец — etcd:etcd. Запускаем проверку с помощью stat -c %a <data-dir> и устанавливаем chmod 700 <data-dir> и chown etcd:etcd <data-dir> если нужно. 

По возможности используйте уникальный CA для etcd (Level 2), чтобы компрометация общего CA не давала автоматического доступа к хранилищу.

Control Plane

Секция Control Plane сосредоточена на том, как кластер аутентифицирует, авторизует и логирует действия. CIS требует отключить анонимный доступ, применять RBAC/Node-авторизацию, включать необходимые admission-плагины, настроить аудит и шифрование секретов at rest. Это снижает риск несанкционированных запросов к API и сохраняет следы действий.

Рекомендации и инструкции 

1. Проверьте флаги kube-api server в его манифесте: --anonymous-auth=false должен быть явно задан, а --authorization-mode не должен быть AlwaysAllow и обязан включать RBAC и Node

2. Администрируйте список admission controllers в –-enable-admission-plugins, включив те, которые рекомендует CIS — например, NodeRestriction, ServiceAccount, NamespaceLifecycle. 

3. Для аудита включите --audit-log-path и настройте ротацию через --audit-log-maxage, --audit-log-maxbackup, --audit-log-maxsize (в документе даны рекомендуемые значения). 

4. Для соединений API server убедитесь в наличии --tls-cert-file/--tls-private-key-file, --client-ca-file и параметров для соединения с etcd: --etcd-cafile, --etcd-certfile, --etcd-keyfile.

5. Проверьте --kubelet-client-certificate и --kubelet-client-key для вызовов к kubelet.

6. Для защиты секретов at rest настройте --encryption-provider-config и проверьте конфигурацию провайдера шифрования в файле, на который указывает этот флаг. 

7. Также в Control plane рассматривается несколько дополнительных ограничений. В частности, указывается, что клиентские сертификаты, сервисные токены и bootstrap-токены не должны использоваться для аутентификации пользователей. Они не обеспечивают ни отзыва, ни многофакторности, а также создают угрозы безопасности. Для интерактивного доступа рекомендуется применять внешние механизмы вроде OIDC.

8. Отдельно внимание уделено аудиту. CIS требует, чтобы в кластере была включена хотя бы минимальная audit policy через параметр --audit-policy-file, иначе запросы к API никак не фиксируются.

Кроме того, политика аудита должна покрывать ключевые риски: доступ к Secrets и ConfigMaps (с логированием только метаданных), изменения объектов под и deployment, а также использование операций exec, portforward, proxy. 

Worker

Воркер-ноды (workers) — это рабочие серверы, на которых запускаются контейнеры и приложения. Безопасность этих нод зависит от ОС и компонента kubelet, который управляет запуском контейнеров. 

На воркерах kubelet и локальные конфиги должны быть защищены, чтобы kubelet API не стал вектором атаки. CIS требует отключить анонимные запросы, установить корректные права на kubelet-конфиги, обеспечить ротацию сертификатов и задать безопасные runtime-параметры.

Рекомендации и инструкции

1. Проверьте, что kubelet не принимает анонимные запросы вроде--anonymous-auth=false или authentication.anonymous.enabled=false в /var/lib/kubelet/config.yaml

2. Выполняйте аудит через ps -ef | grep kubelet и stat для файлов конфигурации. Пример: stat -c %a /var/lib/kubelet/config.yaml

Если права неверные, примените: 

  • chmod 600 /var/lib/kubelet/config.yaml
  • chown root:root /var/lib/kubelet/config.yaml.

3. Убедитесь, что readOnlyPort отключен (значение 0) и что streaming-timeouts не установлены в 0. Включите --make-iptables-util-chains=true, не выключайте ротацию сертификатов (--rotate-certificates не должно быть false) и по возможности включите RotateKubeletServerCertificate

4. Проверьте и при необходимости задайте seccomp-параметры (seccompDefault/--seccomp-default), ограничение PIDs для подов и другие runtime-параметры в конфиге kubelet. 

5. Для применения изменений перезапустите службу kubelet: systemctl daemon-reload и systemctl restart kubelet.service. Kube-proxy метрики должны быть привязаны к localhost.

Policy

Политики — это «рамки» безопасности: RBAC, Pod Security / admission контролируют поведение подов, NetworkPolicy ограничивает сетевой трафик, а управление секретами и проверка образов обеспечивают целостность и конфиденциальность. CIS продвигает принцип наименьших привилегий, микросегментацию и централизованный контроль, чтобы затруднить эскалацию и распространение компрометации.

Рекомендации и инструкции 

1. Проведите ревизию Role/ClusterRole и RoleBinding/ClusterRoleBinding: минимизируйте использование cluster-admin, избегайте wildcard-прав (*) и снимите ненужные биндинги с system:masters

2. Проверяйте роли на наличие доступа к secrets и заменяйте широкие права на точечные разрешения. Не используйте default service account для приложений — создавайте отдельные сервисные аккаунты с минимальным набором прав. 

3. Включите и настройте механизм Pod Security (Pod Security Admission или внешние контроллеры вроде Gatekeeper/OPA) для запрета привилегированных контейнеров, блокировки hostPID/hostIPC/hostNetwork и allowPrivilegeEscalation, а также ограничения возможностей (capabilities) и HostPath/HostPort. 

4. Убедитесь, что CNI поддерживает NetworkPolicy и что для namespace есть базовая политика сегментации трафика. При отсутствии — внедрите политику по умолчанию. 

5. Что касается секретов, рассмотрите варианты их хранения вне кластера или в защищенной файловой системе. Для проверки подлинности и соответствия образов контейнеров используйте admission controller, например ImagePolicyWebhook, который будет проверять происхождение (provenance) образов перед деплоем.

6. Для манифестов используйте securityContext и seccomp профили (docker/default или эквивалент). Все перечисленные проверки, примеры и команды для исправления перечислены в CIS и должны применяться в соответствии с документом.

Реализация CIS

Практическая валидация CIS Benchmark происходит с помощью инструмента kube-bench, популярного open-source решения, которое автоматически проверяет конфигурацию кластера на соответствие рекомендациям CIS. Как правило, kube-bench запускают в пайплайн периодически, например, по расписанию или при изменении конфигурации для заморозки релиза. Это дает возможность отслеживать комплаенс и получать versioned-отчеты для аудита и ретроспективного анализа.

При внедрении бенчмарка логично расставить приоритеты. В первую очередь — обеспечить безопасность и надежность etcd, централизованного хранилища данных кластера. Шифрование данных и регулярный бэкап etcd — камень преткновения для многих. Далее идут критичные параметры kube-apiserver, флаги запуска и настройка RBAC. Только когда эти базовые слои закрыты, можно переходить к настройке NetworkPolicy и обеспечению runtime-безопасности.

kube-bench на текущий момент не покрывает все проверки и некоторые из них необходимо делать самостоятельно. Для инженера, который внедряет CIS Benchmark, существует простой, но жесткий чек: если в отчетах kube-bench выявлены критичные замечания по etcd или kube-apiserver, релиз следует остановить и устранить эти проблемы в первую очередь.

Харденинг: частые промахи и быстрые патчи

На практике — это постоянная работа над предотвращением ошибок и внедрение патчей, позволяющих закрывать уязвимости и минимизировать риски. Рассмотрим основные типичные промахи и меры для мгновенного реагирования.

Проблема 1. Сервис-аккаунтам часто назначают много лишних прав. В итоге при взломе сервиса атакующий получает доступ ко всему подряд. 

Ответ от инженеров — использовать принцип наименьших привилегий. То есть выдавать  сервис-аккаунтам только те права, которые реально  нужны. Плюс — регулярно пересматривать и ревьюить RBAC-политики, чтобы не копился мусор из избыточных разрешений.

Проблема 2. Пользователи хранят секреты прямо в ConfigMap или даже в образах контейнеров. Если цель облегчить хакерам взлом конфиденциальных данных, то все «правильно», а если нет — пора делать патчи! Хранение секретов в ConfigMap небезопасно, так как он предназначен для конфигурационных данных без шифрования, а данные в Kubernetes Secrets хоть и кодируются base64, но по умолчанию хранятся незашифрованными в etcd.

Оптимальная практика —  хранить секреты в специальных менеджерах: Vault или облачных решениях. Мы рассматриваем интеграцию Secret Manager в Managed Kubernetes, чтобы упростить этот процесс и минимизировать операционные риски. И ввести блокирующие политики (blocking policy) в CI/CD-пайплайнах, чтобы предотвращать попадание секретов в конфигурацию или образы без должной защиты. Это означает, что любые попытки зафиксировать секреты не в предназначенном для этого хранилище автоматически провалят процесс сборки и развертывания.

Проблема 3. Часто используют открытый ingress без адекватных правил deny-by-default NetworkPolicy. Это оставляет место для нежелательного трафика, создавая уязвимые точки проникновения. 

Патч — внедрение политики zero-trust, где по умолчанию весь трафик запрещен и разрешается только явно определенный в NetworkPolicy. Эта политика должна реализовываться как код и автоматически проверяться в CI, чтобы гарантировать отсутствие просрочек и ошибок.

Кроме перечисленных технических моментов, операционная дисциплина имеет ключевое значение. Регулярные canary-обновления нод снижают риск возникновения проблем после патчей, поскольку обновления проходят поэтапно. Параллельно стоит проводить аудиты конфигураций для своевременного выявления нарушений и иметь готовые playbooks для быстрого recovery при инцидентах.