Модуль 5.4: Інструменти безпеки
Складність:
[СЕРЕДНЯ]— обізнаність про інструменти, операційне порівняння та практичне проєктування стекуЧас на проходження: 55–65 хвилин
Передумови: Модуль 5.3: Безпека середовища виконання
Результати навчання
Розділ «Результати навчання»Після завершення цього модуля ви зможете ухвалювати такі рішення щодо інструментів безпеки в реалістичному огляді платформи:
- Оцінювати покриття інструментів безпеки на етапах збирання, розгортання, виконання, аудиту, роботи із секретами та взаємодії між сервісами.
- Порівнювати Trivy, Grype, Cosign, kube-bench, Kyverno, Gatekeeper, Falco, Tetragon, Vault, Sealed Secrets та Istio для середовищ Kubernetes 1.35+.
- Проєктувати план впровадження, який переводить інструменти політик та середовища виконання від сигналів аудиту до примусово застосовуваних засобів контролю.
- Діагностувати прогалини в покритті, зіставляючи знахідки сканерів, політик, детекторів середовища виконання, секретів та сервісної мережі з операційними ризиками.
- Впроваджувати мінімально життєздатний стек інструментів безпеки Kubernetes з аліасом
kта повторюваними кроками перевірки.
Чому цей модуль важливий
Розділ «Чому цей модуль важливий»Під час розкриття вразливості Log4Shell у грудні 2021 року (CVE-2021-44228) багато команд платформ виявили, що можуть швидко інвентаризувати образи контейнерів, але не можуть довести, які з робочих навантажень, що виконуються, постраждали, які простори імен заблокують екстрене виправлення або яка підозріла активність під час виконання заслуговує на негайну реакцію. Одна команда платформи виявила, що має дорогі інструменти, кілька дашбордів і безліч сповіщень, проте міст реагування на інцидент усе одно витрачав години на суперечки про відповідальність, бо кожен інструмент описував лише один зріз ризику. Така невдача спричинена не одним відсутнім сканером. Її спричиняє незапланований стек інструментів безпеки, де перевірки на етапі збирання, політика допуску, виявлення під час виконання, посилення кластера, поводження із секретами та ідентифікація сервісів не утворюють єдиного ланцюга. Kubernetes загострює цю проблему, бо поверхня атаки охоплює образи, маніфести, контролери допуску, поведінку kubelet, хмарну ідентифікацію, мережеві шляхи та межу ядра під контейнерами. Знахідка з одного рівня корисна лише тоді, коли команда знає, який інший рівень має запобігти їй, підтвердити її чи компенсувати.
Цей модуль навчає інструментів безпеки, які найчастіше згадуються у практиці безпеки Kubernetes та підготовці до KCSA, але мета — не заучування логотипів. Ви навчитеся оцінювати категорії інструментів, чесно порівнювати інструменти, які перекриваються, проєктувати невеликий стек, що підходить команді, та діагностувати прогалини до того, як інцидент їх викриє. Приклади передбачають поведінку Kubernetes 1.35+ і використовують alias k=kubectl; коли ви бачите вбудовану команду на кшталт k get pods -A, читайте її як стандартний клієнт kubectl через цей короткий аліас.
Категорії інструментів безпеки
Розділ «Категорії інструментів безпеки»Перша помилка, яку роблять багато команд, — ставитися до інструментів безпеки Kubernetes як до списку покупок. Вони чують, що Trivy популярний, що Kyverno здається доступним, що Falco ловить поведінку під час виконання, а kube-bench зіставляється з CIS, тож встановлюють їх усі й вважають кластер захищеним. Це створює активність, але не обов’язково контроль. Корисний стек починається з запитання, де помилка потрапляє в систему, коли платформа має нагоду її зупинити та який сигнал доводить, що зупинка справді спрацювала.
Наведений нижче погляд на життєвий цикл — це збережена карта з початкового модуля. Читайте її згори донизу як набір оборонних можливостей, а не як каталог. Інструменти безпеки образів діють до або під час доставки, інструменти посилення кластера перевіряють платформу, інструменти політик ухвалюють рішення про допуск, інструменти середовища виконання спостерігають за поведінкою після допуску, інструменти для секретів зменшують ризик розкриття облікових даних, а інструменти сервісної мережі посилюють ідентифікацію та авторизацію між робочими навантаженнями. Той самий інцидент зазвичай перетинає більш ніж одну категорію.
┌─────────────────────────────────────────────────────────────┐│ KUBERNETES SECURITY TOOLS │├─────────────────────────────────────────────────────────────┤│ ││ IMAGE SECURITY ││ ├── Scanning: Trivy, Grype, Clair ││ ├── Signing: Cosign, Notary ││ └── SBOM: Syft, Trivy ││ ││ CLUSTER HARDENING ││ ├── Benchmarks: kube-bench ││ ├── Auditing: kubeaudit, Polaris ││ └── Penetration: kube-hunter ││ ││ POLICY ENFORCEMENT ││ ├── Admission: OPA/Gatekeeper, Kyverno ││ ├── Network: CNI policies, Cilium ││ └── Runtime: Seccomp, AppArmor ││ ││ RUNTIME SECURITY ││ ├── Detection: Falco, Tetragon ││ ├── Sandboxing: gVisor, Kata ││ └── Platforms: Aqua, Sysdig, Prisma ││ ││ SECRETS MANAGEMENT ││ ├── External: Vault, AWS Secrets Manager ││ └── Encryption: SealedSecrets, SOPS ││ │└─────────────────────────────────────────────────────────────┘Практичному стеку інструментів також потрібен цикл зворотного зв’язку. Якщо Trivy блокує критичний образ у CI, розробникові потрібен шлях, щоб перезібрати образ або прийняти обмежений у часі ризик. Якщо Kyverno фіксує привілейований контейнер під час аудиту, команді-власнику потрібен процес винятків з політики та дата усунення. Якщо Falco повідомляє про оболонку всередині виробничого контейнера, особі, що реагує на інцидент, потрібен контекст з міток Kubernetes, метаданих середовища виконання та історії розгортань. Інструменти, які видають знахідки без робочого процесу, перетворюються на ще одну чергу, яку інженери вчаться ігнорувати.
Зупиніться та передбачте: що, на вашу думку, станеться, якщо команда купить комерційну платформу, що включає сканування, політики, виявлення під час виконання та відповідність вимогам, але ніхто не зіставить ці можливості з наявним процесом релізу? Імовірний результат — гарний дашборд з нечіткою відповідальністю. Платформа може мати чудове виявлення, але якщо вона не під’єднана до CI, допуску, реагування на інциденти та сортування беклогу, в організації все одно слабкі засоби контролю.
Стеки з відкритим кодом мають протилежний режим відмови. Вони часто глибоко інтегруються з Kubernetes і піддаються точному налаштуванню, але вимагають, щоб команда сама відповідала за оновлення, маршрутизацію сповіщень, дашборди, обробку винятків та кореляцію між інструментами. Комерційні платформи можуть зменшити операційне навантаження та надати уніфіковану звітність, але вони можуть приховувати деталі реалізації або нав’язувати робочі процеси, які не відповідають команді. Найкраща відповідь рідко зводиться до «купити» чи «зібрати самостійно»; вона полягає в узгодженні операційної спроможності з життєвим циклом безпеки.
Ментальна модель рівня KCSA проста: сканування знаходить відомий ризик до або під час розгортання, підписування доводить ідентичність артефакту, політика допуску блокує неприйнятні маніфести, інструменти бенчмарків перевіряють конфігурацію кластера, інструменти середовища виконання виявляють поведінку, яку засоби контролю пропустили, а інструменти для секретів обмежують радіус ураження (blast radius), коли застосунку потрібні облікові дані. Коли ви оцінюєте покриття інструментів безпеки, спершу намалюйте життєвий цикл і позначте, яка категорія має превентивний засіб контролю, яка — детективний, а яка — відповідальну особу.
Безпека образів: сканування, SBOM та підписування
Розділ «Безпека образів: сканування, SBOM та підписування»Інструменти безпеки образів відповідають на найраніше запитання безпеки Kubernetes: чи варто взагалі допускати цей артефакт до кластера? Образ контейнера пакує шар операційної системи, мовні залежності, двійкові файли застосунку, команди запуску та метадані. Цей набір може містити відомі вразливості, застарілі пакети, витоки файлів, слабку конфігурацію або невідоме походження. Сканери та інструменти підписування самі по собі не роблять код безпечним, але вони створюють повторювану точку ухвалення рішення до того, як кластеру доведеться запускати робоче навантаження.
Trivy часто стає першим інструментом, який команди впроваджують, бо він покриває кілька суміжних перевірок одним CLI. Він може сканувати образи, репозиторії, файлові системи, маніфести Kubernetes, інфраструктуру як код та SBOM, що робить його корисним у локальній розробці, CI-конвеєрах та огляді кластера. Компроміс полягає в тому, що один широкий інструмент може спокусити команди ставитися до всіх знахідок однаково. Критична вразливість віддаленого виконання коду в досяжному сервісі заслуговує іншої реакції, ніж пакет середньої серйозності в невикористовуваному шарі для налагодження.
┌─────────────────────────────────────────────────────────────┐│ TRIVY │├─────────────────────────────────────────────────────────────┤│ ││ WHAT: Comprehensive security scanner ││ BY: Aqua Security (open source) ││ ││ SCANS: ││ ├── Container images (OS + language packages) ││ ├── Filesystems and repositories ││ ├── Kubernetes manifests (misconfigurations) ││ ├── IaC (Terraform, CloudFormation) ││ └── SBOM generation ││ ││ KEY FEATURES: ││ ├── Fast (local DB, no network for scanning) ││ ├── Comprehensive (multiple scanners in one) ││ ├── CI/CD integration (exit codes for failures) ││ └── Multiple output formats (JSON, SARIF, etc.) ││ ││ COMMANDS: ││ trivy image nginx:1.25 ││ trivy fs . ││ trivy k8s --report summary ││ trivy config Dockerfile ││ │└─────────────────────────────────────────────────────────────┘Grype займає вужчу, але дуже корисну нішу. Це сканер вразливостей для образів, файлових систем, архівів та SBOM, і він природно поєднується з Syft, коли команда хоче чітко розділити генерування переліку компонентів програмного забезпечення (SBOM) та аналіз цього переліку на вразливості. Таке розділення важливе в регульованих середовищах, бо SBOM можна зберегти, підписати, поділитися ним із клієнтами та пересканувати пізніше, коли бази даних вразливостей зміняться. Образ може не змінитися, але інтерпретація ризику — може.
┌─────────────────────────────────────────────────────────────┐│ GRYPE │├─────────────────────────────────────────────────────────────┤│ ││ WHAT: Vulnerability scanner for containers ││ BY: Anchore (open source) ││ ││ SCANS: ││ ├── Container images ││ ├── Filesystems ││ ├── SBOMs (from Syft) ││ └── Archives (tar, zip) ││ ││ KEY FEATURES: ││ ├── Fast scanning ││ ├── Works with Syft SBOMs ││ ├── Multiple DB sources ││ └── CI/CD friendly ││ ││ PAIRS WITH SYFT: ││ Syft generates SBOM → Grype scans SBOM for CVEs ││ ││ COMMANDS: ││ grype nginx:1.25 ││ grype sbom:./sbom.json ││ grype dir:/path/to/project ││ │└─────────────────────────────────────────────────────────────┘Рішення про вибір сканера стосується не лише пошуку більшої кількості CVE. Воно стосується того, де з’являється знахідка і хто може на неї зреагувати. Локальне сканування на боці розробника дає швидкий зворотний зв’язок, але його легко обійти. Бар’єр у CI послідовний, але може заблокувати термінові релізи, якщо правила серйозності надто грубі. Сканування реєстру чи кластера може виявити дрейф, але здатне знайти вразливі образи вже після того, як вони запущені. Зрілі команди поєднують ці рівні й визначають, які рівні серйозності зривають збирання, які створюють тікети, а які вимагають екстрених дій.
Cosign відповідає на інше запитання: чи це той артефакт, який ми мали намір запустити, і чи можемо ми перевірити, хто його підписав? Підписування легко зрозуміти неправильно, бо воно не доводить відсутність вразливостей в образі. Воно доводить ідентичність та цілісність. Підписаний вразливий образ усе одно вразливий, але непідписаному чи неправильно підписаному образу не варто довіряти лише через те, що в нього знайома назва. Ця відмінність стає критичною, коли зловмисники компрометують конвеєр, обліковий запис реєстру або шлях публікації залежностей.
┌─────────────────────────────────────────────────────────────┐│ COSIGN │├─────────────────────────────────────────────────────────────┤│ ││ WHAT: Container image signing and verification ││ BY: Sigstore project (Linux Foundation) ││ ││ FEATURES: ││ ├── Sign container images ││ ├── Store signatures in OCI registries ││ ├── Keyless signing (OIDC identity) ││ ├── Transparency log (Rekor) ││ └── Attestation support ││ ││ WORKFLOW: ││ # Generate key pair ││ cosign generate-key-pair ││ ││ # Sign image ││ cosign sign --key cosign.key myregistry/myimage:v1 ││ ││ # Verify signature ││ cosign verify --key cosign.pub myregistry/myimage:v1 ││ ││ # Keyless signing (uses OIDC) ││ cosign sign myregistry/myimage:v1 ││ │└─────────────────────────────────────────────────────────────┘На платформі Kubernetes 1.35+ сканування та підписування образів зазвичай сходяться на етапі допуску. Конвеєр сканує й підписує, реєстр зберігає артефакти та підписи, а політика допуску перевіряє, що образи надходять із дозволених реєстрів, містять очікувані атестації та відповідають правилам щодо вразливостей. Саме тут вихідні дані сканера стають засобом контролю, а не звітом. Без примусового застосування на допуску розробник із правами на розгортання часто може послатися на старіший тег образу, побічний реєстр чи екстрене збирання, яке оминуло бар’єр.
Перш ніж запускати це в реальному конвеєрі, який вихідний результат ви очікували б, якщо сканер знайде один критичний пакет у транзитивній залежності, але образ підписано правильно? Правильна відповідь — два окремі сигнали. Перевірка підпису має пройти, бо ідентичність та цілісність збережені, тоді як політика щодо вразливостей може не пройти або вимагати винятку. Розмежування цих сигналів допомагає командам уникнути хибного спокою через наявність підпису та хибної паніки через знахідку сканера без контексту експлуатовності.
Операційний патерн полягає в тому, щоб почати з видимості, потім налаштувати, а потім застосовувати примусово. Спершу запускайте сканери в режимі звітування, виміряйте, як часто збирання зривалося б, та визначте «шумні» пакети, які не мають виправленої версії. Додавайте файли винятків із власниками й датами завершення, а не глобальні списки дозволів. Потім застосовуйте примусово до тих ризиків, які організація готова швидко усувати. Інструменти безпеки заслуговують на довіру, коли блокують потрібний реліз із правильної причини й дають інженерам достатньо інформації, щоб виправити проблему.
Оцінювання безпеки кластера та аудит конфігурації
Розділ «Оцінювання безпеки кластера та аудит конфігурації»Інструменти оцінювання кластера відповідають на питання платформи: чи саме середовище Kubernetes налаштоване так, щоб підтримувати безпечні робочі навантаження? Навіть бездоганний образ застосунку все одно виконується на нодах, kubelet’ах, API-серверах, ланцюгах допуску та шляхах зберігання. Якщо API-сервер дозволяє анонімний доступ, kubelet відкриває чутливі точки доступу, etcd слабко захищений або дозволи ноди занадто широкі, інструменти рівня робочих навантажень не можуть це повністю компенсувати. Інструменти бенчмарків та аудиту роблять ці ризики платформи видимими повторюваною мовою.
kube-bench зіставляє конфігурацію кластера та ноди з бенчмарком CIS Kubernetes Benchmark. Це означає, що він особливо корисний, коли команді потрібен впізнаваний фреймворк контролю, докази для аудиту чи базовий рівень для порівняння з типовими налаштуваннями керованого кластера. Він також нагадує, що керований Kubernetes не знімає відповідальності. Хмарні провайдери можуть експлуатувати площину управління, але команди все одно налаштовують пули нод, RBAC, мережеву доступність, плагіни допуску, політику робочих навантажень, логування та оновлення.
┌─────────────────────────────────────────────────────────────┐│ KUBE-BENCH │├─────────────────────────────────────────────────────────────┤│ ││ WHAT: CIS Kubernetes Benchmark checker ││ BY: Aqua Security (open source) ││ ││ CHECKS: ││ ├── Control plane component configuration ││ ├── etcd configuration ││ ├── Control plane configuration files ││ ├── Worker node configuration ││ └── Kubernetes policies ││ ││ OUTPUT: ││ [PASS] 1.1.1 Ensure API server pod spec file perms ││ [FAIL] 1.1.2 Ensure API server pod spec ownership ││ [WARN] 1.2.1 Ensure anonymous-auth is disabled ││ ││ RUN AS: ││ # On master node ││ kube-bench run --targets master ││ ││ # On worker node ││ kube-bench run --targets node ││ ││ # As Job in cluster ││ kubectl apply -f job.yaml ││ │└─────────────────────────────────────────────────────────────┘Важливий нюанс полягає в тому, що не всі знахідки kube-bench однаково придатні до дій у кожному кластері. Самокерований кластер дає команді платформи прямий доступ до прапорців площини управління та хостових файлів. Керований сервіс може приховувати ці компоненти або реалізовувати еквівалентні засоби контролю інакше. Знахідка все одно важлива, але шлях усунення може бути налаштуванням провайдера, оновленням, тікетом у підтримку чи компенсувальним засобом контролю. Ставтеся до результатів бенчмарку як до структурованої розмови з власником платформи, а не як до сліпої оцінки «пройдено–не пройдено».
kubeaudit зосереджується радше на маніфестах робочих навантажень та ресурсах, що виконуються. Він шукає практичні ризики робочих навантажень, такі як привілейовані контейнери, користувачі root, додані можливості (capabilities), відсутні обмеження ресурсів, використання хостових просторів імен та розкриття токена сервісного акаунта. Статус: заархівований / лише для читання з жовтня 2024 року — наведено для обізнаності про категорію інструментів. Це робить його доповненням до kube-bench. Якщо kube-bench перевіряє замки та протипожежні двері будівлі, то kubeaudit обходить кожен кабінет, щоб побачити, чи не підперли люди двері, чи не залишили ключі на столах і чи не запустили обладнання без захисних кожухів.
┌─────────────────────────────────────────────────────────────┐│ KUBEAUDIT │├─────────────────────────────────────────────────────────────┤│ ││ WHAT: Kubernetes security auditing tool ││ BY: Shopify (open source) ││ STATUS: Archived / read-only since Oct 2024 ││ ││ AUDITS FOR: ││ ├── Privileged containers ││ ├── Running as root ││ ├── Capabilities ││ ├── Host namespace usage ││ ├── Read-only filesystem ││ ├── Service account tokens ││ ├── Network policies ││ └── Resource limits ││ ││ MODES: ││ ├── Cluster mode - audit running cluster ││ ├── Manifest mode - audit YAML files ││ └── Local mode - audit current context ││ ││ COMMANDS: ││ kubeaudit all # All audits ││ kubeaudit privileged # Check for privileged ││ kubeaudit rootfs # Check read-only FS ││ kubeaudit -f deployment.yaml # Audit manifest ││ │└─────────────────────────────────────────────────────────────┘Polaris перекривається з аудитом робочих навантажень, але подає знахідки як перевірку найкращих практик за безпекою, надійністю та ефективністю. Цей ширший погляд цінний, бо знахідки безпеки рідко з’являються поодинці. Робоче навантаження без запитів ресурсів також може не мати проб, виконуватися від root або монтувати кореневу файлову систему з правом запису. Дашборд, що показує кілька вимірів якості, може допомогти командам застосунків пріоритезувати зміни, які водночас покращують стійкість і безпеку, замість того щоб трактувати їх як непов’язані обов’язки.
┌─────────────────────────────────────────────────────────────┐│ POLARIS │├─────────────────────────────────────────────────────────────┤│ ││ WHAT: Best practices validation ││ BY: Fairwinds (open source) ││ ││ VALIDATES: ││ ├── Security (privileged, root, capabilities) ││ ├── Reliability (resource requests, probes) ││ ├── Efficiency (resource limits) ││ └── Custom checks ││ ││ DEPLOYMENT OPTIONS: ││ ├── Dashboard - Web UI for cluster ││ ├── CLI - Local scanning ││ ├── Admission Controller - Block bad configs ││ └── CI/CD - Scan before deploy ││ ││ SCORING: ││ Provides letter grades (A-F) based on checks ││ Helps prioritize remediation ││ │└─────────────────────────────────────────────────────────────┘kube-hunter переходить від аудиту до контрольованого тестування на проникнення. Він шукає відкриті компоненти Kubernetes, слабкості kubelet, розкриття etcd та інші виявні ризики. Статус: більше активно не підтримується (останній випуск — 2022 рік); розробники рекомендують Trivy. Оскільки він може працювати у віддаленому, внутрішньому та активному режимах, його слід використовувати з дисципліною контролю змін. Внутрішнє сканування може показати те, що зловмисник побачив би після закріплення в системі, тоді як активне сканування може змінити системи чи спричинити спрацювання сигналів тривоги. Тому авторизація та визначення меж є частиною інструмента, а не паперовою тяганиною навколо нього.
┌─────────────────────────────────────────────────────────────┐│ KUBE-HUNTER │├─────────────────────────────────────────────────────────────┤│ ││ WHAT: Kubernetes penetration testing tool ││ BY: Aqua Security (open source) ││ STATUS: No longer actively maintained (last release 2022); ││ upstream recommends Trivy ││ ││ FINDS: ││ ├── Exposed API servers ││ ├── Kubelet exposures ││ ├── etcd exposures ││ ├── Sensitive information disclosure ││ └── Known vulnerabilities ││ ││ MODES: ││ ├── Remote - Scan from outside cluster ││ ├── Internal - Scan from inside (as pod) ││ └── Network - Scan IP range ││ ││ COMMANDS: ││ # Remote scan ││ kube-hunter --remote 192.168.1.100 ││ ││ # Internal scan (run as pod) ││ kube-hunter --pod ││ ││ # Active exploitation (use carefully!) ││ kube-hunter --active ││ │└─────────────────────────────────────────────────────────────┘Корисна програма оцінювання починається з базових рівнів та трендів. Перший запуск часто видасть гнітючий список, особливо на старіших кластерах, де команди накопичили винятки та застарілі маніфести. Не реагуйте приховуванням результатів. Категоризуйте знахідки за відповідальністю платформи, відповідальністю за робоче навантаження, серйозністю, експлуатовністю та вартістю усунення. Потім вирішіть, які знахідки стануть політиками допуску, які — тікетами, а які залишаться задокументованими ризиками, бо платформа не може змінити їх негайно.
Гіпотетичний сценарій: команда фінансових послуг одного разу запустила інструмент бенчмарку незадовго до зовнішнього аудиту й виявила кілька перевірок площини управління, позначених як невдалі. Першою реакцією була паніка, але глибший розбір показав, що деякі перевірки стосувалися самокерованих кластерів, тоді як керована площина управління команди використовувала еквіваленти, надані провайдером. Справжньою прогалиною була не позначка про невдачу; це була відсутність задокументованих доказів. Вони виправили шлях збирання доказів, а потім зосередили інженерні зусилля на проблемах робочих нод та робочих навантажень, які справді контролювали.
Примусове застосування політик: допуск як точка контролю
Розділ «Примусове застосування політик: допуск як точка контролю»Двигуни політик перетворюють наміри безпеки на рішення про допуск у Kubernetes. Це важливо, бо допуск відбувається до того, як об’єкт буде збережено або робоче навантаження заплановано, тож це одне з небагатьох місць, де платформа може послідовно відхиляти небезпечну конфігурацію. Політика також створює спільний контракт між командами безпеки та застосунків. Замість того щоб просити кожну команду пам’ятати кожне правило, кластер може перевіряти мітки, образи, налаштування Pod Security, можливості, типи томів, обмеження ресурсів та очікування, специфічні для простору імен.
OPA Gatekeeper та Kyverno — це два двигуни політик, які варто знати більшості тих, хто вивчає KCSA. Gatekeeper привносить модель Open Policy Agent у Kubernetes через обмеження (constraints) та шаблони Rego, що робить його потужним для організацій, які вже використовують OPA поза Kubernetes. Kyverno використовує нативні для Kubernetes YAML-політики й пропонує функції validate, mutate, generate та verify-image. Вибір частково технічний, але водночас стосується того, хто писатиме й супроводжуватиме політику. Політика, яку ніхто не може прочитати, стає непотрібом із правами допуску.
┌─────────────────────────────────────────────────────────────┐│ POLICY ENGINE COMPARISON │├─────────────────────────────────────────────────────────────┤│ ││ OPA GATEKEEPER ││ ├── Policy language: Rego ││ ├── Learning curve: Steeper ││ ├── Flexibility: Very high ││ ├── Beyond K8s: Yes (OPA is general-purpose) ││ ├── Ecosystem: Large, mature ││ └── Good for: Complex policies, existing OPA users ││ ││ KYVERNO ││ ├── Policy language: YAML (Kubernetes-native) ││ ├── Learning curve: Gentler ││ ├── Flexibility: High ││ ├── Beyond K8s: No (Kubernetes-specific) ││ ├── Features: Validate, mutate, generate, verify ││ └── Good for: K8s-only, YAML-familiar teams ││ ││ BOTH CAN: ││ • Block bad configurations at admission ││ • Enforce organizational policies ││ • Audit existing resources ││ • Report violations ││ │└─────────────────────────────────────────────────────────────┘Режим аудиту — це міст для впровадження. Він дозволяє команді вимірювати порушення, не блокуючи розгортань, що критично важливо, коли наявні робочі навантаження ніколи не проєктувалися під новий набір політик. Небезпека в тому, щоб залишатися в режимі аудиту назавжди. Двигун політик, який лише повідомляє про небезпечну конфігурацію, перетворюється на ще один сканер. Шлях від аудиту до примусового застосування має включати відповідальність за порушення, правила винятків, примусове застосування поза продакшеном, періоди попереджень, розгортання у продакшені та регулярне очищення прострочених винятків.
Зупиніться та передбачте: ваша команда розгортає Kyverno в режимі Audit і виявляє 200 порушень політик у кластері. Керівництво хоче негайно перемкнутися на режим Enforce. Ризикований результат не в тому, що всі небезпечні робочі навантаження магічно стануть безпечними; він у тому, що перезапущені Pod’и, екстрені розгортання та рутинні розгортання можуть раптово почати зриватися в багатьох командах. Примусове застосування потужне, бо воно блокує зміни, тож його треба впроваджувати з такою самою обережністю, як і будь-який інший виробничий засіб контролю.
Інструменти політик також виявляють важливу проєктну напругу. Мутація може зменшити рутину, додаючи типові значення, такі як мітки, запити ресурсів чи контексти безпеки, але вона також може приховати відповідальність, якщо розробники ніколи не побачать, що саме змінила платформа. Валідація зрозуміліша, бо вона відхиляє погані маніфести, але може уповільнити команди, доки вони не засвоять стандарти. Генерація може створювати допоміжні ресурси, такі як NetworkPolicy, але згенеровані об’єкти все одно мають відповідати моделі застосунку. Обирайте стиль політики, який навчає бажаної поведінки.
Найздоровіші програми політик публікують приклади, а не лише відмови. Якщо привілейований контейнер заблоковано, помилка має пояснювати безпечнішу альтернативу й посилатися на робочий маніфест. Якщо образи мають надходити зі схвалених реєстрів, політика має визначати, як схвалюються нові реєстри. Якщо виробничі простори імен вимагають підписаних образів, конвеєр має створювати підписи автоматично. Політика допуску має відчуватися як огорожі на вузькій гірській дорозі: достатньо міцні, щоб запобігти катастрофі, і достатньо помітні, щоб водії знали, де край.
Безпека середовища виконання та виявлення за поведінкою
Розділ «Безпека середовища виконання та виявлення за поведінкою»Інструменти середовища виконання мають справу з незручною істиною: превентивні засоби контролю ніколи не бувають повними. Чисте сканування може пропустити вразливість нульового дня, політика допуску може пропустити маніфест, який згодом поведеться зловмисно, а підписаний образ усе одно може містити вразливу логіку застосунку. Виявлення під час виконання спостерігає за тим, які процеси, файли, мережеві виклики, системні виклики та події Kubernetes фактично відбуваються після старту робочого навантаження. Це різниця між перевіркою інгредієнтів ресторану під час доставки та спостереженням за кухнею під час обслуговування.
Falco — це канонічний інструмент виявлення під час виконання для Kubernetes. Він спостерігає за системними викликами через модуль ядра або зонд eBPF, збагачує події метаданими контейнерів та Kubernetes, оцінює правила й надсилає сповіщення до налаштованих виходів. Його типові правила ловлять таку поведінку, як оболонки, запущені всередині контейнерів, записи в чутливі шляхи, неочікувані команди керування пакетами та підозрілий мережевий інструментарій. Сила Falco — у зрілості й екосистемі правил; ціна — у тому, що корисне виявлення під час виконання завжди потребує налаштування.
┌─────────────────────────────────────────────────────────────┐│ FALCO ARCHITECTURE │├─────────────────────────────────────────────────────────────┤│ ││ DATA SOURCES: ││ ├── System calls (kernel module or eBPF) ││ ├── Kubernetes audit logs ││ └── Cloud audit logs (AWS CloudTrail, etc.) ││ ││ RULE ENGINE: ││ Rules written in Falco rule language ││ - rule: Terminal shell in container ││ condition: spawned_process and container and shell ││ output: Shell in container (user=%user.name ...) ││ priority: WARNING ││ ││ OUTPUT CHANNELS: ││ ├── Stdout / syslog ││ ├── File ││ ├── HTTP webhook ││ ├── Slack / Teams ││ ├── Kafka / NATS ││ └── gRPC ││ ││ DEPLOYMENT: ││ ├── DaemonSet on nodes ││ └── Requires privileged (for eBPF/kernel module) ││ │└─────────────────────────────────────────────────────────────┘Вимога привілеїв заслуговує на увагу. Інструменти середовища виконання часто потребують глибокої видимості хоста, тож вони можуть працювати як привілейовані DaemonSet’и або використовувати можливості ядра, яких звичайні робочі навантаження ніколи не повинні отримувати. Це не лицемірство; це контрольований виняток для оборонного компонента. Команда платформи має захищати цей виняток за допомогою суворого RBAC, обмежених джерел образів, добору нод, дисципліни оновлень та моніторингу самого інструмента безпеки. Скомпрометований сенсор середовища виконання був би високоцінною мішенню.
Tetragon підходить до безпеки середовища виконання через спостережуваність та примусове застосування на основі eBPF, особливо в середовищах, що вже використовують Cilium. Він може відстежувати виконання процесів, доступ до файлів, мережеву активність та системні виклики з багатим контекстом Kubernetes. Порівняно з Falco, Tetragon часто відчувається ближчим до примусового застосування на рівні мережі та процесів, тоді як Falco пропонує широку екосистему правил виявлення та зрілі інтеграції сповіщень. Обидва можуть бути доречними, але запуск обох без чіткої відповідальності може дублювати сигнали й заплутувати тих, хто реагує.
┌─────────────────────────────────────────────────────────────┐│ TETRAGON │├─────────────────────────────────────────────────────────────┤│ ││ WHAT: eBPF-based security observability and enforcement ││ BY: Cilium/Isovalent (CNCF) ││ ││ MONITORS: ││ ├── Process execution ││ ├── File access ││ ├── Network activity ││ └── System calls ││ ││ KEY FEATURES: ││ ├── Enforcement (not just detection) ││ ├── Low overhead (in-kernel eBPF) ││ ├── Rich Kubernetes context ││ └── TracingPolicy CRDs ││ ││ VS FALCO: ││ ├── Both: eBPF-based runtime monitoring ││ ├── Tetragon: More enforcement focus ││ ├── Tetragon: Tighter Cilium integration ││ └── Falco: More mature, larger rule library ││ │└─────────────────────────────────────────────────────────────┘Безпека середовища виконання вдається чи зазнає невдачі залежно від якості сигналу. Правило «оболонка в контейнері» цінне, коли виробничі вебконтейнери ніколи не потребують оболонок, але «шумне», коли завдання з обслуговування законно запускають shell-скрипти цілий день. Глобальне придушення правила знищує покриття. Кращий підхід — контекстне налаштування: дозволити відомі Pod’и обслуговування за міткою, понизити пріоритет очікуваних подій, тримати сповіщення з високим пріоритетом для незвичних просторів імен та спрямовувати серйозні події до людей, які можуть діяти. Правила виявлення мають кодувати операційні знання, а не воювати з ними.
Гіпотетичний сценарій: команда платформи розгорнула Falco з типовими сповіщеннями й спрямувала кожне попередження до того самого каналу інцидентів. За два тижні інженери привчили себе ігнорувати потік, бо пакетні завдання видавали «шумні» сповіщення про оболонки, а контейнери резервного копіювання писали у шляхи, що виглядали підозріло. Виправленням була не деінсталяція Falco. Команда побудувала винятки, специфічні для просторів імен, зіставила рівні серйозності з каналами реагування, додала runbook’и й переглядала найшумніші правила щоп’ятниці, доки сповіщення не стали достатньо рідкісними, щоб заслуговувати на увагу.
Інструментарій середовища виконання також залежить від зрілості реагування. Якщо Falco чи Tetragon виявляє підозрілий процес, особа, що реагує, має знати, чи слід ізолювати простір імен, масштабувати деплоймент до нуля, зібрати криміналістичні дані, ротувати облікові дані, заблокувати вихідний трафік або відкрити інцидент застосунку. Інструмент може сказати «ця поведінка незвична»; він не може самостійно визначити вплив на бізнес. Стек повний лише тоді, коли виявлення веде до відпрацьованої дії.
Керування секретами та безпека взаємодії між сервісами
Розділ «Керування секретами та безпека взаємодії між сервісами»Інструменти керування секретами зменшують імовірність витоку облікових даних через маніфести, логи, образи чи робочі станції розробників. Kubernetes Secret’и — це API-об’єкти, закодовані в base64, а не повноцінна система керування секретами. Вони стають значно безпечнішими, коли налаштовані шифрування у стані спокою, RBAC, обмеження сервісних акаунтів, аудит-логування, зовнішні сховища секретів та процеси ротації. Правильний інструмент залежить від того, чи потрібні команді динамічні облікові дані, дружні до GitOps зашифровані маніфести, інтеграція з хмарним провайдером чи централізована перевірюваність.
HashiCorp Vault — це широка платформа секретів, а не інструмент лише для Kubernetes. Він може видавати динамічні секрети, ротувати облікові дані, надавати докладні аудит-логи та застосовувати політики доступу. У Kubernetes Vault часто з’являється через інжекцію агента, монтування CSI або оператор, що синхронізує секрети в об’єкти Kubernetes Secret. Кожна інтеграція змінює межу довіри. Інжектовані файли уникають зберігання деяких значень як API-об’єктів Kubernetes, тоді як синхронізовані секрети вписуються в наявні застосунки, але повертають питання життєвого циклу Kubernetes Secret.
┌─────────────────────────────────────────────────────────────┐│ VAULT WITH KUBERNETES │├─────────────────────────────────────────────────────────────┤│ ││ WHAT: Enterprise secrets management ││ BY: HashiCorp ││ ││ INTEGRATION METHODS: ││ ││ 1. VAULT AGENT INJECTOR ││ ├── Sidecar automatically injects secrets ││ ├── Annotations control what secrets to inject ││ └── Secrets written to shared volume ││ ││ 2. CSI DRIVER ││ ├── Mounts secrets as volumes ││ └── Kubernetes CSI standard ││ ││ 3. EXTERNAL SECRETS OPERATOR ││ ├── Syncs Vault secrets to K8s Secrets ││ └── Periodic refresh from the source secret store ││ ││ BENEFITS: ││ • Dynamic secrets (auto-generated) ││ • Automatic rotation ││ • Detailed audit logging ││ • Fine-grained access control ││ • Encryption as a service ││ │└─────────────────────────────────────────────────────────────┘Sealed Secrets розв’язує вужчу проблему GitOps. Команди хочуть мати декларативні маніфести в Git, але звичайні об’єкти Kubernetes Secret не варто комітити, бо base64 — це лише кодування. Sealed Secrets шифрує Secret у SealedSecret, який може розшифрувати лише контролер кластера. Це дозволяє зашифрованому об’єкту мандрувати через Git, тримаючи відкритий текст поза репозиторієм. Компроміс у тому, що розшифрування прив’язане до приватного ключа контролера, а операційне відновлення залежить від дисципліни резервного копіювання ключа.
┌─────────────────────────────────────────────────────────────┐│ SEALED SECRETS │├─────────────────────────────────────────────────────────────┤│ ││ WHAT: Encrypt secrets for GitOps ││ BY: Bitnami ││ ││ PROBLEM SOLVED: ││ • Can't commit K8s Secrets to Git (base64 encoded) ││ • Need secrets in version control for GitOps ││ ││ HOW IT WORKS: ││ 1. Install controller in cluster ││ 2. Controller generates public/private key pair ││ 3. Use kubeseal CLI to encrypt secrets with public key ││ 4. Commit encrypted SealedSecret to Git ││ 5. Controller decrypts to regular Secret in cluster ││ ││ WORKFLOW: ││ kubectl create secret ... --dry-run=client -o yaml | ││ kubeseal > sealed-secret.yaml ││ git add sealed-secret.yaml ││ git commit -m "Add encrypted secret" ││ ││ SealedSecret → Git → Cluster → Secret ││ │└─────────────────────────────────────────────────────────────┘Інструменти для секретів слід оцінювати через призму ротації та радіуса ураження, а не лише зберігання. Статичний пароль бази даних, зашифрований у Git, усе одно може жити надто довго, з’явитися в пам’яті застосунку та бути скопійованим у логи, якщо застосунок неправильно з ним поводиться. Динамічні облікові дані Vault зменшують це вікно, але додають операційні залежності. External Secrets Operator може поєднати хмарні менеджери секретів із Kubernetes, але все одно створює об’єкти Kubernetes Secret. Найкращий дизайн — той, що робить ротацію рутинною й обмежує, скільки робочих навантажень можуть використовувати кожні облікові дані.
Безпека сервісної мережі додає ще один рівень, надаючи робочим навантаженням сильнішу сервісну ідентичність та комунікацію, контрольовану політикою. Istio може забезпечувати взаємний TLS, керування сертифікатами, автентифікацію учасників (peer authentication), автентифікацію запитів та політики авторизації, що оперують поняттями сервісних суб’єктів, шляхів, методів та заголовків. Це виразніше за звичайну NetworkPolicy, але також додає sidecar’и чи ambient-компоненти, поведінку площини управління, ротацію сертифікатів та складність налагодження. Безпека мережі потужна, коли проблемою є сервісна ідентичність; вона дорога, коли командам потрібна лише проста мережева сегментація.
┌─────────────────────────────────────────────────────────────┐│ ISTIO SECURITY │├─────────────────────────────────────────────────────────────┤│ ││ mTLS (MUTUAL TLS) ││ ├── Automatic certificate management ││ ├── Encryption between all services ││ ├── Service identity via SPIFFE ││ └── Modes: STRICT, PERMISSIVE, DISABLE ││ ││ AUTHORIZATION POLICIES ││ ├── Allow/deny based on source service ││ ├── Method, path, header matching ││ ├── JWT validation ││ └── More granular than NetworkPolicy ││ ││ EXAMPLE: ││ apiVersion: security.istio.io/v1 ││ kind: AuthorizationPolicy ││ spec: ││ selector: ││ matchLabels: ││ app: backend ││ rules: ││ - from: ││ - source: ││ principals: ["frontend.default.svc"] ││ to: ││ - operation: ││ methods: ["GET", "POST"] ││ │└─────────────────────────────────────────────────────────────┘Ключова точка рішення — чи намагається організація захистити секрети, автентифікувати сервіси, авторизувати запити чи все три одразу. Vault та хмарні менеджери секретів допомагають застосункам отримувати облікові дані. Sealed Secrets допомагає командам GitOps зберігати зашифровані маніфести секретів. Istio допомагає робочим навантаженням ідентифікувати й авторизувати одне одного під час запиту. Ці інструменти можуть доповнювати одне одного, але їх не варто вважати взаємозамінними. Шифрування Secret у Git не доводить, що лише потрібний сервіс може звертатися до бекенда, а mTLS не ротує витеклий пароль бази даних.
Який підхід ви обрали б тут і чому: невелика команда платформи з десятьма сервісами хоче GitOps та прості зашифровані облікові дані, тоді як більша регульована організація хоче динамічні акаунти бази даних, централізовані аудит-логи та короткоживучі облікові дані? Невелика команда цілком обґрунтовано може почати із Sealed Secrets та суворого RBAC. Регульованій організації, ймовірно, краще підійде Vault чи хмарний менеджер секретів, інтегрований через CSI або зовнішній контролер секретів, із сервісною ідентичністю, реалізованою окремим рівнем.
Посібник з вибору інструментів
Розділ «Посібник з вибору інструментів»Вибір інструмента стає легшим, коли ви називаєте завдання перш ніж назвати інструмент. «Нам потрібна безпека Kubernetes» — занадто широко, щоб скерувати дизайн. «Нам потрібно блокувати непідписані образи з несхвалених реєстрів у продакшені» вказує на підписування, політику реєстрів та примусове застосування допуску. «Нам потрібно знати, чи відповідають наші робочі ноди очікуванням CIS» вказує на kube-bench або докази бенчмарку від провайдера. «Нам потрібно виявити оболонку, запущену у виробничому контейнері» вказує на виявлення під час виконання та реагування.
┌─────────────────────────────────────────────────────────────┐│ TOOL SELECTION BY USE CASE │├─────────────────────────────────────────────────────────────┤│ ││ "I need to scan images for vulnerabilities" ││ → Trivy (comprehensive), Grype (fast) ││ ││ "I need to check cluster against CIS benchmark" ││ → kube-bench ││ ││ "I need to audit workload configurations" ││ → kubeaudit, Polaris ││ ││ "I need to block insecure configurations" ││ → Kyverno (simpler), OPA/Gatekeeper (flexible) ││ ││ "I need runtime threat detection" ││ → Falco (mature), Tetragon (Cilium users) ││ ││ "I need to sign and verify images" ││ → Cosign (Sigstore) ││ ││ "I need secrets management beyond K8s Secrets" ││ → Vault (enterprise), Sealed Secrets (GitOps) ││ ││ "I need service-to-service security" ││ → Istio (full mesh), Linkerd (simpler) ││ │└─────────────────────────────────────────────────────────────┘Мінімально життєздатний стек інструментів безпеки для багатьох кластерів починається зі сканування образів, політики допуску, виявлення під час виконання та доказів бенчмарку. Зазвичай це означає Trivy чи Grype у CI, Kyverno чи Gatekeeper у режимі аудиту, Falco чи Tetragon на нодах та kube-bench для базових оглядів. Керування секретами може стати нагальнішим раніше, якщо команди вже комітять облікові дані чи використовують довгоживучі спільні паролі. Підписування образів може стати нагальнішим раніше, якщо рушієм є ризик ланцюга постачання. Правильний перший інструмент — той, що закриває найнебезпечніший відкритий шлях із найменшою операційною несподіванкою.
Наступне порівняння підсумовує основні категорії в операційних термінах. Зверніть увагу, що «найкращий» інструмент змінюється залежно від того, хто відповідає за усунення. Розробники зазвичай можуть швидше виправити Dockerfile та залежності, ніж змінити налаштування площини управління кластера. Команди платформ можуть примусово застосовувати політику допуску, але потребують контексту застосунку для винятків. Команди безпеки можуть визначати цілі виявлення, але власники застосунків знають, яка поведінка під час виконання є нормальною. Дизайн стеку, що ігнорує відповідальність, застрягне, навіть якщо кожен інструмент технічно бездоганний.
| Категорія | Типові інструменти | Основне запитання | Найкращий перший власник |
|---|---|---|---|
| Сканування образів | Trivy, Grype, Clair | Чи несе цей артефакт відомий ризик? | Команда застосунку з огорожами платформи |
| Підписування образів | Cosign, Notary | Чи можемо ми довести ідентичність та цілісність артефакту? | Власники платформи та CI/CD |
| Оцінювання кластера | kube-bench, kubeaudit, Polaris | Чи слабкий базовий рівень платформи або робочого навантаження? | Команда платформи плюс власники сервісів |
| Політика допуску | Kyverno, Gatekeeper | Чи має API-сервер прийняти цей об’єкт? | Команда платформи з внеском політики безпеки |
| Виявлення під час виконання | Falco, Tetragon | Чи поводиться робоче навантаження підозріло? | Операції безпеки та команда платформи |
| Керування секретами | Vault, Sealed Secrets, SOPS | Як облікові дані зберігаються, доставляються та ротуються? | Команда платформи та власники застосунків |
| Безпека сервісної мережі | Istio, Linkerd, можливості Cilium | Чи можуть сервіси автентифікувати й авторизувати одне одного? | Власники мережі платформи |
Початковий короткий зведений довідник усе ще корисний, коли вам потрібна компактна підказка для пам’яті на рівні KCSA. Використовуйте його після глибшого порівняння, а не замість нього, бо таблиця називає категорію та основне призначення, не пояснюючи відповідальності, режиму розгортання чи операційного компромісу.
| Категорія | Інструменти | Призначення |
|---|---|---|
| Сканування | Trivy, Grype | Знаходити вразливості |
| Підписування | Cosign | Перевіряти автентичність образу |
| Оцінювання | kube-bench, kubeaudit | Перевіряти конфігурації |
| Політика | Kyverno, Gatekeeper | Застосовувати стандарти |
| Виконання | Falco, Tetragon | Виявляти загрози |
| Секрети | Vault, Sealed Secrets | Керувати чутливими даними |
Найважливіша проєктна звичка — уникати «осиротілих» знахідок. Кожен вихідний сигнал інструмента має мати призначення, власника, модель серйозності та очікування щодо усунення. Знахідка Trivy може зірвати збирання, створити тікет або бути прийнятою з датою завершення. Порушення Kyverno може попередити розробника, заблокувати продакшен або створити звіт на рівні простору імен. Сповіщення Falco може негайно викликати чергового, створити подію з низьким пріоритетом або збагатити SIEM. Без цих рішень стек лише збирає докази майбутніх жалів.
Практичний приклад: читання стеку як історії
Розділ «Практичний приклад: читання стеку як історії»Уявіть простір імен платежів, де команда розгортає новий образ API щодня по обіді. Перший засіб контролю — Trivy в CI, який зриває збирання, якщо образ містить критичну вразливість із доступним виправленням. Другий засіб контролю — Cosign, який підписує образ після того, як конвеєр створив SBOM та результати тестів. Третій засіб контролю — Kyverno, який відхиляє непідписані образи, блокує привілейовані Pod’и та вимагає базового контексту безпеки простору імен. Кожен засіб контролю відповідає на інше запитання, тож рішення про реліз сильніше за будь-який окремий результат сканування.
Тепер уявіть, що той самий API проходить CI й допуск, але починає робити незвичні вихідні з’єднання після розгортання. Сканер та двигун політик виконали свою роботу, але жоден з них не спостерігає за поведінкою процесів після старту. Falco чи Tetragon постачає погляд на середовище виконання, тоді як NetworkPolicy або політика мережі може обмежити, яких призначень може досягати робоче навантаження. Особа, що реагує й бачить сповіщення середовища виконання, має запитати, чи збігається дайджест образу з підписаним артефактом, чи був Pod допущений за очікуваною політикою та чи потребує ротації якийсь секрет, змонтований у Pod.
Приклад показує, чому розмови про інструменти безпеки мають слідувати шляхом робочого навантаження. Створення артефакту, допуск, поведінка під час виконання, використання облікових даних та комунікація між сервісами — це пов’язані події в одній історії. Якщо команда обговорює інструменти як ізольовані продукти, вона пропустить передачі між етапами. Якщо вона обговорює історію розгортання, то може вирішити, де знахідка має блокувати, де попереджати, де викликати чергового, а де ставати доказом для наступного огляду безпеки.
Цей стиль огляду також запобігає надмірному ускладненню. Невелике внутрішнє пакетне завдання може не потребувати політики сервісної мережі з першого дня, якщо воно не має вхідного сервісного трафіку й виконується в обмеженому просторі імен. Йому все одно потрібні сканування образів, розумна політика допуску та поводження із секретами. Публічний API, що обробляє платежі, ймовірно, потребує сильнішого підписування, виявлення під час виконання, контролю вихідного трафіку, ротації секретів та авторизації на рівні запитів. Різниця не в тому, що одна команда дбає про безпеку, а інша — ні; різниця у ризику, відкритості та операційній цінності.
Патерни та антипатерни
Розділ «Патерни та антипатерни»Сильні програми інструментів безпеки Kubernetes використовують невеликий набір перевірених патернів. Вони починають із видимості, переходять до примусового застосування й тримають цикл зворотного зв’язку близько до людей, які можуть виправити проблему. Вони також ставляться до інструментів як до засобів контролю з операційною вартістю, а не як до значків. Встановлення двигуна політик, сканера чи детектора середовища виконання змінює досвід розробника, реагування на інциденти та планування оновлень. Ці зміни слід проєктувати свідомо.
| Патерн | Коли використовувати | Чому він працює | Міркування щодо масштабування |
|---|---|---|---|
| Аудит перед примусом | Впровадження перевірок допуску Kyverno, Gatekeeper чи Polaris у наявний кластер | Він виявляє поточні порушення, не ламаючи розгортань, і дає командам час на усунення | Встановіть дедлайни, власників та дати завершення винятків, щоб режим аудиту не став постійним |
| Зсув ліворуч плюс перевірка праворуч | Поєднання сканування образів у CI зі скануванням реєстру чи кластера | CI ловить проблеми рано, а пізніші сканування виявляють дрейф, старі теги та зміни в базах | Тримайте правила серйозності узгодженими, інакше розробники бачитимуть суперечливі вердикти |
| Сповіщення середовища виконання з runbook’ами | Розгортання Falco чи Tetragon у продакшені | Особи, що реагують, знають, що означає кожне сповіщення та яка дія дозволена | Регулярно переглядайте «шумні» правила й спрямовуйте різні рівні серйозності в різні канали |
| Політика як продукт | Публікація прикладів, документації та самообслуговуваних шляхів винятків для політик допуску | Команди вивчають передбачений безпечний патерн замість того, щоб бачити лише повідомлення про відхилення | Ведіть версії політик, оголошуйте зміни, що ламають сумісність, і вимірюйте тренди порушень |
Антипатерни з’являються, коли команди плутають наявність інструмента з результатами безпеки. Найпоширеніша невдача — дашборд, повний знахідок, які ніхто не контролює. Інша — розгортання примусового застосування, що захоплює команди застосунків зненацька й спричиняє збої. Третя — купівля широкої платформи з припущенням, що її типові правила відповідають моделі загроз організації. Краща альтернатива — визначити мету контролю, під’єднати інструмент до робочого процесу й виміряти, чи справді зменшується ризикована поведінка.
| Антипатерн | Що йде не так | Чому команди в це впадають | Краща альтернатива |
|---|---|---|---|
| Сканер як театр | Про вразливості повідомляють, але ніколи не усувають | Легко додати крок у CI й важко профінансувати прибирання | Визначте SLA за серйозністю, дати завершення винятків та маршрутизацію до власників |
| Примус «великим вибухом» | Дійсні розгортання раптово зриваються в багатьох просторах імен | Керівництво хоче швидкого доказу прогресу безпеки | Переходьте від аудиту до попередження й примусу за простором імен та класом політики |
| Шквал середовища виконання | Особи, що реагують, ігнорують сповіщення, бо переважають хибні спрацювання | Типові правила трактують як завершену виробничу політику | Налаштуйте правила за мітками, рівнями серйозності та задокументованими runbook’ами |
| Перекриття інструментів без відповідальності | Кілька інструментів повідомляють про схожі знахідки різними словами | Команди встановлюють популярні інструменти незалежно | Оберіть джерело істини для кожної категорії та зіставте дубльовані сигнали |
Початкова таблиця швидких помилок залишається доброю стенограмою для огляду на дошці, особливо коли ви наставляєте команду, яка ось-ось встановить інструментів швидше, ніж зможе ними керувати. Ставтеся до цих фраз як до підказок для обговорення, а потім розгорніть їх у конкретніші помилки та виправлення далі в модулі.
| Помилка | Чому це шкодить | Розв’язання |
|---|---|---|
| Забагато інструментів | Складність, перекриття | Оберіть сфокусований стек |
| Сканування без дій | Хибна безпека | Визначте SLA, автоматизуйте |
| Політика без тестування | Ламає розгортання | Спершу тестуйте в режимі аудиту |
| Виконання без реагування | Сповіщення ігнорують | Створіть runbook’и інцидентів |
| Без базового рівня | Неможливо виміряти покращення | Спершу проведіть оцінювання |
Патерн, який варто запам’ятати для KCSA, — покриття з потоком. Інструмент має покривати категорію, видавати сигнал у потрібний момент і спрямовувати цей сигнал до рішення. Якщо рішення — «блокувати», використовуйте допуск чи бар’єри CI з чітким усуненням. Якщо рішення — «розслідувати», використовуйте сповіщення середовища виконання з контекстом та runbook’ами. Якщо рішення — «покращити», використовуйте звіти бенчмарків та аудиту, що стають елементами беклогу. Покриття без потоку створює шум; потік без покриття пропускає ризик.
Фреймворк ухвалення рішень
Розділ «Фреймворк ухвалення рішень»Використовуйте цей фреймворк, коли проєктуєте чи переглядаєте стек інструментів безпеки Kubernetes. Почніть із запитання, де з’являється ризик. Якщо він з’являється до того, як код потрапляє в кластер, природними засобами контролю є сканування та підписування. Якщо він з’являється в маніфестах, природними засобами контролю є політика допуску та аудит робочих навантажень. Якщо він з’являється після старту контейнера, потрібні виявлення під час виконання та спостережуваність мережі. Якщо він стосується облікових даних чи сервісної ідентичності, до розмови належать засоби контролю секретів та мережі.
| Запитання рішення | Оберіть цей напрям | Компроміс, який слід прийняти |
|---|---|---|
| Чи потрібне нам швидко широке сканування образів, IaC та маніфестів? | Почніть із Trivy, бо він покриває кілька типів артефактів одним робочим процесом | Широке покриття може створювати змішані типи знахідок, що потребують ретельного сортування |
| Чи генеруємо ми вже SBOM і хочемо сфокусованого аналізу вразливостей? | Використовуйте Syft з Grype для сканування за принципом «SBOM передусім» | Ви супроводжуєте два пов’язані інструменти замість одного широкого сканера |
| Чи потрібне нам авторство політик, нативне для Kubernetes? | Оберіть Kyverno для правил validate, mutate, generate та verify на основі YAML | Політики специфічні для Kubernetes і менш переносні за межі кластера |
| Чи використовуємо ми OPA деінде або потребуємо складної багаторазової логіки політик? | Оберіть Gatekeeper з обмеженнями на основі Rego | Rego має крутішу криву навчання для багатьох команд платформ |
| Чи потрібне нам зріле виявлення під час виконання з багатьма наявними правилами? | Почніть із Falco й налаштовуйте сповіщення за простором імен, образом та серйозністю | Сенсору потрібна привілейована видимість та зусилля на налаштування |
| Чи стандартизувалися ми вже на Cilium і потребуємо контексту примусу на eBPF? | Оцініть Tetragon поряд із можливостями безпеки Cilium | Цінність найбільша, коли мережевий стек та стек середовища виконання вже узгоджені |
| Чи потрібні командам зашифровані секрети GitOps із помірною складністю? | Використовуйте Sealed Secrets з ретельним резервним копіюванням ключа | Він сам по собі не надає динамічних облікових даних чи централізованої політики секретів |
| Чи потрібні нам динамічні секрети, централізований аудит та ротація? | Використовуйте Vault чи хмарний менеджер секретів через CSI або зовнішній контролер секретів | Операційна залежність та складність інтеграції зростають |
Після вибору напряму визначте режим розгортання. Інструменти видимості зазвичай можуть починати в режимі звітування. Інструменти примусу мають починати в режимі аудиту чи попередження, якщо тільки цільовий простір імен не новий і порожній. Інструменти середовища виконання мають починати з маршрутизації сповіщень, що відокремлює інформаційні події від термінових інцидентів. Інструментам для секретів потрібне планування міграції, бо застосунки можуть кешувати облікові дані чи очікувати змінні середовища. Безпека сервісної мережі має починатися з permissive- або обмеженого простором імен розгортання перш ніж суворий mTLS та політики авторизації дістануться продакшену.
Ось практичний цикл рішень: визначте ризик, оберіть категорію, виберіть інструмент, яким ваша команда може керувати, запустіть у режимі видимості, виміряйте знахідки, призначте власників, застосовуйте примусово лише стабільні правила та переглядайте винятки. Повторюйте цикл, коли Kubernetes оновлюється, команда змінює патерни розгортання або змінюється модель загроз. Кластери Kubernetes 1.35+ еволюціонують швидко; стек, який був адекватним минулого кварталу, може пропускати нову політику допуску, можливість середовища виконання чи засіб контролю провайдера сьогодні.
Ще один тест рішення — оборотність. Якщо інструмент можна впровадити в режимі лише для читання й видалити, не змінюючи поведінки застосунку, це низькоризиковий перший експеримент. Якщо інструмент змінює допуск, мережеві шляхи, доставку секретів чи поведінку sidecar’ів, він заслуговує на поетапне розгортання та план відкату. Саме тому сканери та інструменти бенчмарків часто йдуть перед примусовим застосуванням політики чи суворістю сервісної мережі. Видимість будує доказову базу, що робить пізніше примусове застосування правдоподібним.
Інший тест — відповідність навичкам. Gatekeeper може бути кращим довгостроковим вибором для організації, яка вже використовує політики OPA в CI, API-шлюзах та хмарній авторизації, бо одна мова політик може мандрувати між системами. Kyverno може бути кращим першим вибором для Kubernetes-орієнтованих команд, які хочуть писати політики звичним YAML. Falco може бути швидшою перемогою середовища виконання для команд, яким потрібні поширені правила виявлення, тоді як Tetragon може підійти командам, які вже інвестували в Cilium та спостережуваність на eBPF. Правильне порівняння включає людей, які супроводжуватимуть правила.
Нарешті, вирішіть, як вимірюватиметься успіх. «Інструмент встановлено» — це не результат безпеки. Кращі показники включають відсоток образів, просканованих перед розгортанням, кількість порушень політик, що йде на спад, середній вік винятків щодо вразливостей, частку хибних спрацювань сповіщень середовища виконання, кількість успішно ротованих секретів та час, потрібний для створення доказів бенчмарку. Ці вимірювання перетворюють інструменти безпеки з одноразового встановлення на безперервну спроможність платформи.
Чи знали ви?
Розділ «Чи знали ви?»- Falco приєднався до CNCF у 2018 році й згодом отримав статус graduated, що є однією з причин широкого визнання його екосистеми правил та інтеграцій з Kubernetes.
- Безключове підписування Cosign спирається на ідентичність OpenID Connect, тож CI-робочий процес може підписати образ без довгоживучих приватних ключів підпису, що зберігаються в конвеєрі.
- Бенчмарки CIS Kubernetes версіонуються відповідно до релізів Kubernetes, тому докази бенчмарку мають називати версію кластера та профіль бенчмарку.
- Kubernetes Secret’и за замовчуванням є API-об’єктами, закодованими в base64, тож командам усе одно потрібні шифрування у стані спокою, RBAC, аудит-логування та дисципліна ротації.
Типові помилки
Розділ «Типові помилки»| Помилка | Чому вона трапляється | Як її виправити |
|---|---|---|
| Встановлення забагатьох інструментів одразу | Команди хочуть швидкого покриття й копіюють популярні референсні стеки без зіставлення відповідальності | Почніть з одного інструмента на одну прогалину життєвого циклу, назвіть власника й додавайте перекриття лише тоді, коли воно розв’язує реальну проблему |
| Сканування образів без правил усунення | Сканер легко додати в CI, але виправлення старих залежностей потребує планування | Визначте SLA за серйозністю, маршрутизацію тікетів, дати завершення винятків та політику для невиправлених вразливостей |
| Надто швидке вмикання примусового застосування політик | Знахідки аудиту створюють тиск показати негайний прогрес | Переходьте від аудиту до попередження й до примусу за простором імен, починаючи з низькоризикових робочих навантажень |
| Ставлення до сповіщень середовища виконання як до самоочевидних | Типові правила видають технічні повідомлення без локального бізнес-контексту | Додавайте runbook’и, збагачуйте сповіщення мітками й налаштовуйте відому-добру поведінку замість того, щоб глушити цілі правила |
| Використання Sealed Secrets як повної заміни Vault | Обидва інструменти пов’язані із секретами, тож команди припускають, що вони розв’язують ту саму проблему | Використовуйте Sealed Secrets для зашифрованих маніфестів GitOps, а Vault чи хмарний менеджер — для динамічних облікових даних та централізованого аудиту |
| Ігнорування меж керованого кластера в результатах бенчмарку | kube-bench може повідомляти про перевірки, які клієнт не може змінити безпосередньо | Відокремте засоби контролю, що належать провайдеру, від тих, що належать клієнту, і задокументуйте компенсувальні докази |
| Прийняття підписаних образів без політики щодо вразливостей | Підписування плутають зі скануванням безпеки | Перевіряйте підписи на ідентичність та цілісність, а потім застосовуйте правила сканера чи атестації для рішень про ризик |
Тест
Розділ «Тест»Ваша організація хоче оцінити покриття інструментів безпеки на етапах збирання, розгортання, виконання, аудиту, секретів та взаємодії між сервісами. Поточний стек має Trivy в CI й жодних інших засобів контролю. Про які прогалини в покритті ви повідомили б першими?
Trivy дає корисну видимість вразливостей на етапі збирання, але він не застосовує примусово маніфести Kubernetes на допуску, не перевіряє поведінку під час виконання, не проводить бенчмарк конфігурації кластера, не керує секретами й не автентифікує виклики між сервісами. Перший звіт має відокремити превентивні та детективні прогалини, щоб керівники не переоцінювали те, що дає сканування образів. Розумний наступний крок — Kyverno чи Gatekeeper у режимі аудиту для засобів контролю розгортання, kube-bench для доказів базового рівня платформи та Falco чи Tetragon для виявлення під час виконання. Засоби контролю секретів та мережі слід пріоритезувати залежно від того, чи є облікові дані або сервісна ідентичність уже активними рушіями ризику.
Ваша команда має порівняти Trivy, Grype, Cosign, kube-bench, Kyverno, Gatekeeper, Falco, Tetragon, Vault, Sealed Secrets та Istio для платформи Kubernetes 1.35+. Як би ви їх згрупували, щоб порівняння було корисним?
Групуйте їх за завданням безпеки, а не за популярністю. Trivy та Grype належать до сканування, Cosign — до підписування та перевірки, kube-bench — до оцінювання за бенчмарком, Kyverno та Gatekeeper — до політики допуску, Falco та Tetragon — до виявлення під час виконання, Vault та Sealed Secrets — до керування секретами, а Istio — до сервісної ідентичності та авторизації. Таке групування запобігає хибним порівнянням, як-от запитанню, чи кращий Cosign за Trivy, бо вони відповідають на різні запитання. Воно також виявляє, де перекриття реальне, наприклад Kyverno проти Gatekeeper або Falco проти Tetragon.
Команда платформи проєктує план впровадження Kyverno після того, як знайшла багато порушень у режимі аудиту. Керівництво просить примусове застосування у продакшені до кінця тижня. Який безпечніший план має запропонувати команда?
Команда має уникнути раптового перемикання з аудиту на примус у всіх просторах імен, бо звичайні перезапуски та розгортання можуть зірватися одночасно. Безпечніший план категоризує порушення за серйозністю, призначає власників сервісів, виправляє малозатратні проблеми та переводить політики через попередження й примус по одному класу за раз. Простори імен поза продакшеном мають застосовувати примус першими, за ними — виробничі простори імен, які досягли нуля порушень аудиту для обраного набору політик. Винятки мають бути явними, мати власника, обмеженими в часі та переглядатися, щоб режим аудиту не став постійним.
Під час інциденту Falco повідомляє про оболонки в контейнерах, kube-bench має кілька невдалих перевірок нод, а Trivy повідомляє про високі вразливості в образі. Як ви діагностуєте, яка знахідка відповідає негайному операційному ризику?
Почніть із сигналу середовища виконання, бо він описує поведінку, що відбувається зараз. Оболонка у виробничому контейнері може вказувати на активне зловживання, тож особи, що реагують, мають визначити Pod, образ, простір імен, користувача та нещодавню історію розгортань перш ніж вирішувати, чи ізолювати, чи зібрати докази. Знахідка Trivy пояснює можливий шлях входу, якщо вразливий пакет досяжний, тоді як знахідки kube-bench описують слабкості платформи, що можуть збільшити радіус ураження. Діагноз має пов’язувати сигнали, а не трактувати їх як три непов’язані тікети.
Команда хоче впровадити мінімально життєздатний стек інструментів безпеки Kubernetes і має лише один спринт. Які інструменти та кроки перевірки ви обрали б першими?
Оберіть невеликий стек, що покриває найцінніші точки життєвого циклу, не перевантажуючи команду. Практичний перший спринт — це Trivy в CI для сканування образів, Kyverno в режимі аудиту для видимості політики допуску, kube-bench для базового рівня кластера та Falco з обмеженою маршрутизацією сповіщень для виявлення під час виконання. Перевірка має включати один навмисно вразливий образ, один маніфест, що порушує політику, один звіт бенчмарку та одне очікуване сповіщення середовища виконання в тестовому просторі імен. Секрети та підписування можуть бути наступними, якщо поточний спринт не може включити їх відповідально.
Ваша організація використовує Vault централізовано, але одна команда GitOps просить використати Sealed Secrets для кількох облікових даних застосунків. Як вам вирішити, чи створює це прогалину в покритті?
Порівняйте вимогу із сильною стороною кожного інструмента. Sealed Secrets розумний, коли метою є зашифровані маніфести GitOps, а облікові дані достатньо статичні для такого робочого процесу, але він не надає динамічної видачі облікових даних, централізованої політики чи тієї самої моделі аудиту, що й Vault. Якщо організація вимагає доказів ротації та централізованого контролю доступу, External Secrets Operator чи інтеграція Vault CSI може зберегти розгортання GitOps, тримаючи Vault джерелом істини. Рішення має ґрунтуватися на ротації, аудиті та радіусі ураження, а не лише на вподобанні.
Практична вправа: проєктування стеку інструментів безпеки
Розділ «Практична вправа: проєктування стеку інструментів безпеки»У цій вправі ви спроєктуєте та перевірите мінімально життєздатний стек інструментів безпеки для виробничого середовища Kubernetes. Вам не потрібно встановлювати кожен інструмент локально, щоб завершити міркування, але ви маєте записати стек так, ніби команда платформи могла б перетворити його на тікети. Послідовно використовуйте аліас k, коли накидаєте команди перевірки, як-от k get pods -A, бо мета — повторюваний робочий процес оператора Kubernetes, а не одноразова документація.
Сценарій: Ваше завдання — спроєктувати стек інструментів безпеки для виробничого середовища Kubernetes з такими конкретними вимогами:
- Сканувати образи на вразливості в CI/CD
- Застосовувати політики для блокування небезпечних конфігурацій
- Виявляти загрози під час виконання
- Безпечно керувати секретами
- Проводити аудит конфігурації кластера за бенчмарком CIS
Поступові завдання: Виконуйте ці завдання по порядку, щоб дизайн рухався від широкого покриття життєвого циклу до розгортання та доказів:
- Зіставте кожну вимогу з однією категорією життєвого циклу та одним основним інструментом.
- Оберіть, чи буде Kyverno або Gatekeeper першим двигуном політики допуску, і обґрунтуйте компроміс.
- Визначте одну політику в режимі аудиту, одну віху примусового застосування та одне правило винятку з власником.
- Опишіть, як сповіщення середовища виконання від Falco чи Tetragon потраплятимуть до особи, що реагує, з достатнім контекстом Kubernetes.
- Додайте один вибір керування секретами й поясніть, як працюватиме ротація чи відновлення GitOps.
- Запишіть критерії успіху, що доводять, що стек може сканувати, блокувати, виявляти, проводити аудит та поводитися з обліковими даними.
Рекомендований стек інструментів
1. Сканування образів (CI/CD)
- Інструмент: Trivy
- Чому: Комплексне сканування (ОС + мовні пакети), швидке, добра інтеграція з CI
- Реалізація:
# In CI pipelinetrivy image --exit-code 1 --severity CRITICAL,HIGH $IMAGE2. Примусове застосування політик
- Інструмент: Kyverno
- Чому: Нативний для YAML, легше впровадити, validate + mutate + generate
- Реалізація:
- Застосовувати Pod Security Standards
- Вимагати обмеження ресурсів
- Блокувати привілейовані контейнери
- Застосовувати дозволені реєстри
3. Безпека середовища виконання
- Інструмент: Falco
- Чому: Зрілий, багата бібліотека правил, статус CNCF graduated
- Реалізація:
- Розгорнути як DaemonSet
- Увімкнути типові правила
- Сповіщати в Slack/PagerDuty
- Створити runbook’и реагування
4. Керування секретами
- Інструмент: Sealed Secrets + External Secrets Operator
- Чому: Дружній до GitOps, може інтегруватися з хмарними сховищами секретів
- Реалізація:
- Sealed Secrets для робочого процесу GitOps
- External Secrets Operator для секретів хмарного провайдера
- Регулярно ротувати секрети
5. Аудит конфігурації
- Інструмент: kube-bench
- Чому: Галузевий стандарт бенчмарку CIS
- Реалізація:
- Запускати як Job щотижня/щомісяця
- Сповіщати про невдачі
- Відстежувати покращення з часом
Опціональні доповнення:
- Cosign для підписування образів (якщо безпека ланцюга постачання є пріоритетом)
- Istio для mTLS, якщо потрібне шифрування між сервісами
- Polaris — дашборд для видимості
Архітектура:
CI/CD: Trivy scan → Cosign sign → Push ↓Cluster: Kyverno (admission) → Falco (runtime) ↓ ↓ Block bad configs Detect threats ↓ ↓Secrets: Sealed Secrets ← Git → External Secrets ↓Audit: kube-bench → ReportsРозв'язання контрольного списку перевірки
Сильна відповідь зіставляє сканування образів із Trivy чи Grype, політику допуску з Kyverno чи Gatekeeper, виявлення під час виконання з Falco чи Tetragon, базовий огляд кластера з kube-bench, а керування секретами з Vault, хмарним менеджером секретів, Sealed Secrets чи External Secrets Operator. Розгортання політики має починатися в режимі аудиту, включати відповідальність за порушення й переходити до примусу за простором імен чи класом політики. Виявлення під час виконання має включати маршрутизацію сповіщень та runbook’и, а не лише встановлення. Фінальна перевірка має довести, що кожен інструмент видає сигнал і що кожен сигнал має власника та шлях рішення.
Критерії успіху: Вправа завершена, коли ваш записаний стек можна перевірити за такими операційними перевірками:
- Кожна вимога зіставлена з категорією життєвого циклу та названим основним інструментом.
- Дизайн пояснює, чому кожен обраний інструмент підходить команді й де він перекривається з альтернативами.
- Розгортання політики включає режим аудиту, віхи примусового застосування та обробку винятків.
- Виявлення під час виконання включає маршрутизацію сповіщень, налаштування та відповідальність за реагування.
- Керування секретами включає ротацію, відновлення чи міркування про джерело істини.
- Фінальний стек включає покриття сканування, підписування чи перевірки, аудиту, політики, середовища виконання та секретів.
Джерела
Розділ «Джерела»- Kubernetes: Security Checklist
- Kubernetes: Pod Security Standards
- Kubernetes: Admission Controllers
- Kubernetes: Auditing
- Kubernetes: Secrets
- Trivy Documentation
- Grype Documentation
- Cosign Documentation
- OPA Gatekeeper Documentation
- Kyverno Documentation
- Falco Documentation
- Tetragon Documentation
- kube-bench Project
- Sealed Secrets Project
- Istio Authorization Policy
Наступний модуль
Розділ «Наступний модуль»Модуль 6.1: Фреймворки відповідності — Далі ви пов’яжете ці практичні засоби контролю Kubernetes із фреймворками відповідності, збиранням доказів та аудиторськими розмовами, які команди безпеки використовують, щоб довести, що платформа керується відповідально.