Как погубить кластер, действуя во благо? Подборка вредных советов из реальных кейсов и опыта от специалиста по безопасности контейнеров и Kubernetes. Вместе установим антивирус на ноды, просканируем хостовую ОС и заблокируем выкатки образов с чувствительной информацией.
Привет, Хабр! Меня зовут Дмитрий Евдокимов. Я — Founder & CTO Luntry в компании по созданию решений для безопасности контейнеров и Kubernetes, CFP конференций DevOpsConf и Highload, автор курса «Cloud-Native безопасность в Kubernetes» и телеграм-канала k8s (in) security. Эта статья написана по мотивам моего доклада для DevOpsConf 2024. Так как я проработал в сфере информационной безопасности больше 15 лет и специализируюсь именно на безопасности контейнеров и кластеров, дам несколько «вредных» советов, как сделать Kubernetes-кластер «безопасным».
Сразу отмечу, что безопасность и надёжность — вещи неразрывные. Нельзя сделать систему безопасной, но при этом ненадёжной — она просто не будет никому нужна. А ещё нельзя её построить, не понимая как она устроена и функционирует.
Дисклеймер
Все вредные советы взяты из реальных корпоративных требований и техзаданий, внутренней документации, описаний процессов. Это кейсы, собранные из четырёхлетнего опыта работы с безопасностью контейнеров в крупных компаниях разных секторов — от финтеха и ретейла до онлайн-кинотеатров, нефтегазовой промышленности и соцсетей. Скриншотов не будет, чтобы не раскрывать информацию. Использовать все перечисленные в этой статье советы — можно, только осторожно и с полным пониманием последствий. Самое страшное — бездумно использовать эти приёмы без понимания, к чему они могут привести. Моя задача — показать, к чему может привести использование без понимания.
Немного теории
К сожалению, многие забыли истоки Kubernetes и цели для которых он создавался. Kubernetes — это оркестратор контейнеров, который позволяет скалировать и распределять нагрузку.
Минимальная единица управления для Kubernetes — Pod. Kubernetes является декларативной PaaS-системой и не работает напрямую с контейнерами. Работу с контейнерами на себя берут высокоуровневый и низкоуровневый container runtime. Kubernetes управляет YAML-файлами, не ведая ни про хостовую операционную систему, ни про железо, ни про контейнер, ни про то, как они работают. Просто это не его задача. Но многие думают не так. В результате помещают в него задачи и подходы, предполагающие, что он этими знаниями владеет. И вот тогда и возникают проблемы…
Компоненты Kubernetes выглядят так:

Kubernetes создан для оркестрации микросервисов, для этого у него есть собственная инфраструктура, которая обычно состоит из Control Plane и Worker Node. На Control plane установлены управляющие микросервисы, а на Data Plane или Worker Node — kube-proxy, kubelet. Kube-proxy при этом может в некоторых инсталляциях отсутствовать (зависит от CNI). А ещё есть непосредственно наши пользовательские нагрузки.
Идейно не предполагается, что на этих Nodes вы будете устанавливать не контейнерезированные нагрузки: FTP сервера, базы данных и так далее. Это специализированная система для управления контейнерами и рядом, по идее, ничего запускаться не должно.

Окружение и соседние сервисы. А ещё у многих из виду выпадает аспект, что безопасность Kubernetes — это не только защита самого Kubernetes как платформы, но и всех смежных систем вокруг него. Ведь в экосистеме Kubernetes много дополнительных компонентов: registry, CI/CD пайплайны, внешние базы данных, хранилища, различные системы, связанные с аутентификацией, находящиеся за пределами Kubernetes, и так далее. Реальность обеспечения безопасности Kubernetes-окружения — это защита как самой платформы, так и соседних, связанных с ней систем. Потому что, как показывает практика аудитов и пентестов, порой, слабые звенья — это те, что стоят рядом с Kubernetes. Для этого даже необязательно попадать в Kubernetes и ломать его.

Shift left security или shift everyway security — подход, при котором все наилучшие практики по безопасности постепенно перемещаются с правого края, с рантайма, к левому краю, то есть к процессу разработки. Об этом аспекте многие забывают и в результате всё, что только возможно, располагают слева, отходя от основной идеи. При этом, не понимая какие риски и проблемы это может привнести. Важно понимать, что каждый механизм безопасности имеет своё правильное место в цепочке shift everyway security. Далее рассмотрим, как эти механизмы должны быть правильно распределены.
Вредные советы
Эти вредные советы вы можете встретить в различных корпоративных документах, ТЗ, и так далее. Мы разберём, как обосновать или правильно продумать архитектуру процесса и подходы, почему делать как в совете не надо и как сделать правильно.
Совет 1. Установка антивируса на ноды кластера
Этот совет/требование можно увидеть в огромном количестве документов: нужно поставить антивирус на ноды кластера Kubernetes. На своём канале «k8s in security» я даже проводил опрос по вредным советам: что самое глупое от вас требовали? С большим отрывом победил такой комментарий: «установить сертифицированный антивирус и наложенное СЗИ от НСД на ноды кластера Kubernetes». Мы также часто замечаем необдуманную установку антивирусов у наших друзей и клиентов.

Обычно это требование обосновывается так:
-
Прописано в общем корпоративном стандарте информационной безопасности, составленном много лет назад. Требование так и звучит, что на всей инфраструктуре и на всех системах должны быть установлены антивирусы. Это требование логично, когда речь идёт о Windows и Linux системах, где работают пользователи, сотрудники, бухгалтеры и т.д.
-
Это требование спокойно переносят и на Kubernetes, ведь его инфраструктура является частью общей инфраструктуры. Идея в том, чтобы обнаруживать вредоносную активность, которая выполняется на такой системе.
Последствия установки антивируса на ноды кластера Kubernetes:
-
Неэффективное использование вычислительных ресурсов нод.
Антивирус, работая на ноде, начинает её полностью проверять, забирая на себя значительное количество вычислительных ресурсов.
Например, у одного из наших клиентов средства безопасности на ноде потребляли больше ядер, чем бизнес-нагрузка, из-за того, что он установил в свой Kubernetes-кластер гигантское количество средств защиты. В кластере из 16 ядер 8 использовались для защиты, и лишь часть из оставшихся 8 выделялась на бизнес-нагрузку, которая зарабатывала деньги бизнесу.
-
Негативное влияние на микросервисы.
Антивирусы — сложные решения с поведенческими, сигнатурными, динамическими, эмуляционными анализами, работающими в связке. Поэтому, когда добираются до директории var/lib/docker, var/lib/containerd, где лежат кэшированные образы, то начинают ходить по всем их слоям и сканировать, потребляя очень много ресурсов.
Это может привести к выполнению сотен и тысяч операций, что иногда даже приводит к падению ноды из-за интенсивного чтения. Естественно, антивирус ходит во все контейниризированные процессы и в namespace контейнеров, которые работают отдельно. Начинает их активно мучить эволюционными и динамическими анализами, порой фризя их активность. Что, естественно, негативно сказывается на их работе.
Даже в самой документации Docker написано о проблемах работы системы контейнеризации на одном хосте с антивирусным решением.

Как это работает в реальности?
Обычно всё это работает вдвойне странно: агенты антивируса ставят в отключенном виде или почти всё заносят в список исключений. Мы видим это в реальной жизни, в рабочих кейсах постоянно.
И даже если мы обратимся к различным международным и отечественным стандартам, фреймворкам, бенчмаркам по безопасности контейнерных сред, типа:
• CLOUD NATIVE SECURITY WHITEPAPER;
• NSA/CISA Kubernetes Hardening Guide;
• Kubernetes Security Technical Implementation Guide (STIG);
• PCI Security Standards Council: Guidance for Containers and Container Orchestration Tools;
• NIST Special Publication 800-190 «Application Container Security Guide»;
• Приказ ФСТЭК России No118. Требования по безопасности информации к средствам контейнеризации.
То запустив там банальный поиск по слову «антивирус», то ничего не найдём.
Что я могу порекомендовать — полезные советы:
-
Получить письмо от руководства о разрешении не ставить антивирус на кластер Kubernetes. Мы часто встречаем такое у продвинутых клиентов.
-
Использовать специализированные контейнерные ОС для хоста, которые сейчас набирают популярность: Talos, Flatcar Container Linux, Fedora CoreOS, openSUSE, MicroOS, Bottlerocket, Container-Optimized OS.
Их гигантское преимущество — в минималистичности, там вырезано всё, что не требуется непосредственно для запуска контейнеров. Это значит, что гигантский attack surface просто убран. А ещё они, как правило, иммутабельные, поэтому закрепление, попадание атакующим серьезно усложняется. Там есть специальные сборки ядер и других компонентов. На этой операционке антивирус не нужен и смысла ставить его — нет, потому что записать туда ничего нельзя. Если захотите что-то записать, то придётся пересобрать этот образ и переналить всю ноду. Вредоносному коду нужно провернуть то же самое.
-
Посмотреть презентацию «Сочетание несочетаемого в Kubernetes: удобство, производительность, безопасность», HighLoad++ 2022.
Совет 2. Сканирование хостовой ОС на известные уязвимости в пакетах
Это очень холиварная тема, и у многих это требование всё равно прописано, так как они стремятся знать обо всех уязвимых пакетах и программном обеспечении в своей инфраструктуре. Цель — сканировать и исправлять всё, чтобы осталось ноль уязвимостей на периметре и внутри. Но в реальности вряд ли кто-нибудь встречал такую инфраструктуру. А у некоторых компаний даже есть термин vulnerability zero tolerance, то есть нулевая толерантность к уязвимостям — их вообще не должно быть. Но, по моему опыту, этого нереально добиться в современном мире.
Обычно это требование обосновывается так:
-
Прописано в общем корпоративном стандарте информационной безопасности, составленном несколько лет назад.
-
Нужно предотвратить компрометацию нод через известные уязвимости.
Последствия сканирования нод на известную уязвимость:
-
Гигантские отчеты об уязвимостях с большим количеством false positive результатов.
Даже если использовать последнюю версию Ubuntu или другой ОС общего назначения, будет около сотни известных уязвимостей, и часть из них окажется ложными срабатываниями. То есть вы ещё ничего не сделали, а уже нужно писать отчёт, почему вы этого делать не будете и что вам это неактуально.
-
Огромные временные затраты высокооплачиваемых инженеров.
Приходится тратить много времени на митинги и мало эффективную работу, объяснять, почему исправлений нет, или они неэффективны и неэксплуатируемые, вместо того, чтобы заниматься внедрением специализированной операционной системы. И так, по нашему опыту, буквально каждую неделю. Часто в компаниях даже есть практика еженедельных митингов с обсуждением того, какую уязвимость будем фиксить, а какую не будем. И это, на самом деле, бесконечно бессмысленная задача.
Как это работает в реальности?
-
Контейнерные приложения используют пакеты из образа, а не с хоста — ведь окружение контейнизированное.
Все необходимые пакеты, которые используют приложения, уже лежат внутри образа, поэтому достаточно сканировать эти образы. При рассмотрении модели нарушителя: внешний или тот, кто каким-то образом уже попал в контейнер.
-
Запуск ПО вне контейнеров на ноде.
Такое ПО правда использует пакеты с хоста. Но это и совсем другой класс проблем. Ведь придётся грамотно рассчитать, какое количество вычислительных ресурсов выделить на неконтейнризированое приложение на ноде Kubernetes. С помощью Node Allocatable для kubelet можно заранее просчитать, сколько будут потреблять все решения не в контейнерах.
Если вы рассчитаете неправильно и укажете неправильно в kubelet, то потратится больше ресурсов. И окажется, что при работе scheduler для kubelet для запуска Pods ресурсов уже и нет. А он продолжит думать, что для его бизнес-нагрузки вычислительные ресурсы в наличии. И, естественно, будет пытаться зайти и запустить как-то иначе. Это может длиться достаточно долго, а приложение не работать!
-
На Node кластере и без уязвимостей хватает векторов.
С точки зрения опыта атакующего/аудитора/пентестера могу сказать, что если атакующий попал на ноду, то он уже вас взломал. Пакеты на ноде — это последнее, о чём задумается атакующий для своего продвижения и закрепления. И чтобы использовать из этих хостовых пакетов какие-то уязвимости, ему нужно сбежать из контейнера на ноду или оказаться там каким-то другим способом. Иначе нельзя взаимодействовать с этим кодом пакетов. Поверьте, на ноде достаточно так называемых низко висящих фруктов — более простых уязвимостей и способов, чем какие-то уязвимые пакеты на ноде.
-
Container Runtime Socket.
Напрямую обратившись через Container Runtime Socket, можно создать привилегированный контейнер и делать что угодно. Любимая техника всех пентестеров, что попадают на машину с контейнерами.
-
Сертификаты, ServiceAccount Token, Envs, секреты, лежащие в переменных окружениях — те же низко висящие фрукты.
За свою пятилетнюю практику анализа защищенности контейнеризированных окружений нам ни разу не приходилось повышать привилегии через уязвимости в пакетах, лежащих на Node. Всегда находилось что-то более интересное, простое и эффективное.
Всегда легче найти другие пути, чем реально уязвимые пакеты, ведь на node ещё надо эксплоит доставить и/или собрать и запустить там. И в этом случае возникает масса вариантов, которые могут выдать злоумышленника.
Развивая данную тему, появление человека на ноде — это нетипичная ситуация. Чаще всего доступ туда запрещён. Даже если есть такая необходимость, то современные версии Kubernetes позволяют непосредственно использовать kubectl debug, который способен дать через контейнер shell на ноде.
-
Как правило, разработчики платформ на базе Kubernetes не рассматривают сценариев взаимодействия человека с нодами. Есть специальный Kubernetes оператор, который создаёт специальный custom ресурс и отправляет его в Kubernetes, а затем самостоятельно идёт по нодам. Но человек туда не ходит. Сам Kubernetes — это система не для человека, а для контейнеров. А если у вас там иммутабельная операционная система, то проще ноду потушить, и поднять новую из golden image. Это быстрее и эффективнее, и время инженера будет сэкономлено.
-
Не забываем, конечно, что часто продакшн-окружение содержит критическую информации и присутствие там каких-либо специалистов не разрешено без четкого присмотра ИБ.
Что я могу порекомендовать — полезные советы:
-
Создавать и анализировать для своего кластера:
-
модель угроз (threat modeling);
-
поверхность атаки (attack surface);
-
модели нарушителя (threat actors).
Делать это нужно не вслепую, когда отсканировали и исправили. Уязвимости есть всегда, а вы рискуете неэффективно потратить время, выбрав не те. Я считаю, что в современном мире время инженеров нужно тратить разумно, а не на бесконечный фиксинг уязвимости и объяснения, почему это не эксплуатабельно, нерелевантно либо сложно эксплутабельно. Лучше полностью исключить модель нарушителя, атакующего на ноде. И это будет куда эффективнее, а время инженеров направить на полезные задачи.
-
Использовать специализированные контейнерные ОС для хоста: Talos, Flatcar Container Linux, Fedora CoreOS, openSUSE, MicroOS, Bottlerocket, Container-Optimized OS. Это уже обязательно для современной эксплуатации Kubernetes. Приятно, что за последние два года Talos, Flatcar и аналогичные сервисы всё чаще используются в компаниях.
Облачные операторы у Google — это Container Optimized, у Amazone — Battlerocket. Компания-разработчик Flatcar выкуплен у Microsoft.
-
Обновлять ядро ОС.
-
И снова советую посмотреть презентацию «Сочетание несочетаемого в Kubernetes: удобство, производительность, безопасность», HighLoad++ 2022.
Совет 3. Блокировка выкатки образов с чувствительной информацией
Под чувствительной информацией будем понимать различные секреты, токены, сертификаты, пароли внутри образов контенйеров. Важный момент — совет предполагает не допускать именно выкатку таких образов.
Обычно это требование обосновывается так:
-
Не допустить утечки критичной информации.
-
На validating admission webhook проводят проверку YAML-файлов и при необходимости блокируют выкатку. Можно обращаться к сторонней системе и получить ответ, можно ли выкатить образ. Если хотя бы один из хуков ответит отрицательно, то YAML не выкатиться и не применится. Разработчик получает ответ, что ресурс не применён в кластере.

Последствия блокировки выкатки:
-
Срывы релизов. Конечно, мы не хотим, чтобы атакующий получил доступ к чувствительной информации. Если движок обновился сигнатурами и начинает выкатываться, а его заблокировали, релиз сделать невозможно. Причина в том, что в релизе обнаружена строка, напоминающая ключ.
-
Продолжение утечки критичной информации. Пока обновление движка блокируется и релиз на стопе, чувствительные данные продолжают утекать, просто через другие каналы.
Как это работает в реальности?
-
Критичная информация может находиться в промежуточном слое образа и не попасть в финальный. Если мы рассматриваем кейс, где образ выкатывается, то атакующий получит доступ к этому секрету, если он лежит в верхнем слое либо попал в финальный. Иначе промежуточный он даже не увидит. В runtime для внешнего атакующего информация может быть недоступна.
-
Критичная информация в образе уже лежит (раскрыта) в Image registry! При этом нужно понимать, что если мы этот образ выкатываем, он уже лежит в registry, а образ секрета (слой) — тоже лежит в registry. Любой сотрудник с pull доступом может извлечь как весь образ, так и отдельный слой из образа и тем самым скомпрометировать секрет. Это уже инцидент, требующий отзыва и ротации данных. По сути, когда в самом registry появляется образ с критичной информации, нужно заводить инцидент и ротировать данный секрет. То есть ещё до выкладки этого образа в продакшн, а не когда он только пытается выкатиться. Иначе это пустая трата времени. Так мы скорее будем срывать релизы и ставить разработчиков в неудобное положение, чем реально принесем пользу ИБ.

Что я могу порекомендовать — полезные советы:
-
CI/CD pipeline должен падать при обнаружении чувствительной информации в слоях образа. Сканировать наличие секретов нужно прямо в пайплайне. Если секрет нашёлся, то пайплайн должен быть остановлен, а образ не должен попасть в registry к которому имеет доступ большое количество сотрудников.
-
Процесс CI/CD должен завершаться шагом подписи образа. Я рад, что в последнее время мы всё чаще встречаем эту практику в компаниях. Подпись образа — последняя стадия любого современного пайплайна. Если успешно прошли все анализаторы и сканеры, то в конце образ получите подпись.
-
На validating admission webhook (Policy Engine) должна быть проверка подписи образа. На этапе выкатки на этом webhook необходимо проверить только наличие подписи, подтверждающей, что образ прошёл сертифицированный пайплайн, все сканеры, и пайплайн при этом нигде не упал. Только тогда мы можем его выкатывать. Этот совет — must have в сегодняшнее время.
-
Для повышения безопасности, используйте не один, а несколько registry — это называется registry staging. Обычно один registry делается на dev и test окружение, а второй на stage и prod.
Совет 4. Блокировка выкатки образов на основании информации об уязвимостях
Также популярно требование не давать выкатываться образам, у которых есть известные уязвимости.
Обычно это требование обосновывается так:
-
Не допустить появления в окружении определенных уязвимостей.
-
Провести проверку на validating admission webhook и, при необходимости, заблокировать выкатку. Цель кажется благой: мы не хотим, чтобы в нашем окружении появились образы с известными уязвимостями.

Последствия блокировки выкатки образов с известными уязвимостями:
-
Деградация приложений.
-
Аварийное завершение приложений.
-
Отказ в обслуживании.
Как это работает в реальности?
Есть некая инфраструктура, содержащая image registry с образами. Эти образы сканируются на SBOM (Software Bill of Materials). По сути, это такая инвентаризация сторонних библиотек и их версий в вашем ПО (в данном случае в образе). Далее feed об уязвимостях ежедневно обновляется, и там собирается информация, в какой версии, в какой библиотеке, какие известные уязвимости есть. Мы сопоставляем информацию из SBOM с информацией из этого feed. Логика простая: если версия библиотеки ниже определённой, где фикс, значит есть уязвимость.
Давайте рассмотрим идеальную ситуацию: есть Image, в котором ноль уязвимостей. Ещё есть validation web hook, политика которого говорит, что мы не должны разрешать выкатку образов, у которых >= 1 critical и >= 2 high уязвимостей. И по этой политике он не даёт непосредственно выкатиться. Если у образа сейчас в текущий момент нет известных уязвимостей, значит, можно выкатываться.

Создается ReplicaSet с 4 копиями сервиса.

Выкатка прошла успешно, проходит некоторое время и обновляется feed уязвимостей. В котором могут присутствовать новая информация об уязвимостях в наших компонентах. И теперь оказывается, что в образе, который мы выкатили некоторое время назад, уже один Critical, два High и восемь Medium уязвимостей.
И это приложение у нас уже работает в продакшен, в рантайме, выходит в сеть, им пользуются наши клиенты! Но важно понимать, что не существует окружения без уязвимостей. Как бы мы ни хотели, чтобы уязвимости не выкатились, всегда есть окно между выпуском фикса и его выкаткой в продакшен. Часто пока мы делали один фикс, становится нужен уже другой. Умножьте это на количество образов окружений, микросервисов и получите ситуацию, когда окружение всегда содержит уязвимости. Абсолютное отсутствие уязвимостей, это, по мне, абсолютный миф.



Как вы понимаете с таким отчетом об уязвимостях мы бы уже не дали этому образу выкатиться.
Далее может происходить следующие типичные/штатные ситуации — падают Pods, а set controller говорит, что replica set controller не сходится. Нам нужны четыре реплики, а по факту их меньше. Причин много: аварийно завершился, упала нода и вместе с ней завершили поды, нода обновилась, произошёл переезд подов, вытеснение одних нагрузок другими и т.д. Ситуаций, почему Pod завершился, и количество не стало сходиться с репликой, действительно много.
Получается следующее:

Одна копия работает в runtime, а три — нет. Их надо выкатить. Опять validation admission web hook с той же политикой в отношении critical и high. Выкатка запрещена! Kubernetes про это вообще не в курсе. Его задача, чтобы replica set controller отработал и сделал желаемое количество реплик и они были одинаковыми. А если у вас из-за наплыва нагрузки в сезон распродаж пришло пиковое значение в 100 000 пользователей, то надо масштабироваться, и нужны уже не четыре копии этого микросервиса, а пару десятков. Но они не выкатываются.

Приложение не выдерживает нагрузки, начинает падать, деградировать. За этим могут последовать и другие сервисы. Один не отвечает, другой копит очередь, а из-за того, что очередь уже переполнена, тоже становится плохо. И постепенно в зависимости от логики приложения вся система начинает падать. Вроде бы пришли с благой целью — не допускать выкатки уязвимых образов в рантайм, но, на самом деле, уронили приложение, деградировали систему и так далее.
И когда люди с этим сталкиваются, первое время кажется, что это классная фича, но потом понимают, что такую практику лучше не использовать. Я встречал кейсы, когда IT-отдел соглашается при условии разделения рисков c ИБ. Но ИБ обычно не соглашается разделять ответственность за риски падений поровну. И нужно ещё потом доказать, что это не средство безопасности сделало.
Что я могу порекомендовать — полезные советы:
-
Нужно знать обо всех уязвимостях не только на выкатке, а в любой момент времени. Не давать образам выкатываться с известными уязвимостями — это всего лишь странная полумера. Потому что всё равно при обновлении feed эти приложения уже работают в вашем окружении. И уже содержат уязвимости, и уже скорее всего доступны атакующему. Поэтому нужно строить безопасность с учётом того, что у вас в любой момент времени известные уязвимости будут работать в продакшене. Вспомните ситуацию непосредственно с log4j.
-
Уменьшайте поверхность атаки. Стройте окружение с учетом подходов к уменьшению поверхности атаки. Так, чтобы если даже у вас есть уязвимое приложение, то эксплуатируя эту уязвимость атакующий не мог нанести вред компании.
-
Используйте Distroless-образы, минималистичные образы и т.д.
-
Стройте ZeroTrust.
-
Используйте NetworkPolicy, AppArmor и т.д.
-
Посмотрите презентацию «SCAзка о SCAнерах», Positive Hack Days 12.
-
Посмотрите презентацию «Patch management не поможет, фиксики не спасут».
В этой статье мы познакомились далеко не со всеми «вредными» рекомендациями. Ещё можно вспомнить про:
-
установку N штук агентских средств ИБ на Node;
-
множество блокирующих admission controllers;
-
повсеместную блокировку на Policy Engines;
-
написание Network Policy вручную или на текущих данных network flow;
-
использование blacklist-правил для Runtime Security с автоматической реакцией;
-
…
В каждом из этих пунктов есть свои опасные подводные камни.
Выводы
Перечисленных мной «вредных» кейсов можно отыскать множество. И, хотя кажутся классными и должны помогать безопасности, на самом деле они малоэффективны или могут нанести ущерб окружению, которое должны защищать. Как сказал мой хороший товарищ, задача безопасности не в том, чтобы в окружении не было уязвимостей, а том, чтобы окружение стабильно работало и оставалось доступным, а бизнес зарабатывал деньги.
Когда безопасность приносит больше вреда и приводит к простоям систем — это не про защиту. Особенно если вы ещё и не понимаете первопричину сбоя. На разбирательства уходят часы отладки, траблшутинга. И всё это время клиентам недоступны оплаты или другие операции — а это ущерб и финансовые потери.
Очень важно учитывать особенности Kubernetes. Это очень специфичная система, у которой нет аналогов. Использование методов и подходов, привычных для Windows и Linux — в корне ошибочно. Можно набить болезненные шишки и навредить всей компании несмотря на благие намерения. Поэтому так важно выдерживать разумную грань между безопасностью и надёжностью эксплуатации. Они должны не противоречить друг другу, а помогать.
ссылка на оригинал статьи https://habr.com/ru/articles/875114/
Добавить комментарий