CSPM и управление постуром
IaC-скан останавливает плохой конфиг до apply, но консоли, рантайм и ещё 10 команд продолжают менять прод. CSPM — это read-only обход API по всем аккаунтам, который находит публичный бакет, на который никто не заводил тикет.
Твой IaC-гейт зелёный. Каждый Terraform-план сканируется, ничего публичного через пайплайн не уходит, и ты спишь спокойно. Потом разработчик упирается в дедлайн, открывает консоль AWS и жмёт «сделать публичным» на бакете, чтобы поделиться демо-ассетом, — без PR, без плана, без скана. Через три недели on-call из твоего DR-аккаунта (того, которым никто не владеет, поднятого руками в 2022-м) будит тебя: security group открыта в 0.0.0.0/0 на порт 5432, и Postgres отвечает. Ни одно изменение не прошло через твой прекрасный гейт, потому что ни одно из них не было кодом. Именно этот разрыв закрывает CSPM: пайплайн охраняет то, что течёт сквозь него, но прод мутируют консоли, SDK-скрипты, рантайм-автоскейлинг и ещё сорок аккаунтов, в которые ты ни разу не заходил. Управление постуром — это read-only обход, который непрерывно спрашивает: «независимо от того, как оно таким стало, — безопасно ли живое облако прямо сейчас?»
К концу урока ты будешь знать, как CSPM читает состояние облака по множеству аккаунтов, чтобы находить мисконфиг в масштабе, почему он дополняет, а не заменяет IaC-гейт, и где его слепые зоны и шум тебя укусят.
Что CSPM на самом деле делает
Cloud Security Posture Management механически — вещь неэффектная: он принимает read-only IAM-роль в каждом твоём облачном аккаунте, вызывает describe/list-API (DescribeSecurityGroups, GetBucketPolicy, ListAttachedRolePolicies и сотни других), нормализует ответы в граф ресурсов и их связей и проверяет этот граф по библиотеке правил. Правило — это просто предикат над состоянием ресурса: «S3-бакет, чья эффективная политика или ACL даёт * на чтение» или «ingress security group с CIDR 0.0.0.0/0 на порт базы данных». Когда ресурс совпадает — это находка.
Единственное свойство, которое отличает CSPM от IaC-сканирования, — это где он смотрит. IaC-скан читает твой намеренный конфиг — Terraform-план, до apply. CSPM читает фактический конфиг — ресурс в том виде, в каком он существует в облаке прямо сейчас, после каждого клика в консоли, вызова SDK, события автоскейлинга и внепланового изменения от команд, которые никогда не трогали твой репозиторий. Гейт пайплайна — это контрольный пункт на одной дороге в прод; CSPM — спутник над всей страной, и большую часть страны твой пайплайн никогда не асфальтировал.
Поэтому CSPM по сути — дисциплина непрерывного мониторинга, а не разовый аудит. Руководство NIST по непрерывному мониторингу формулирует ту же идею для любой системы: состояние безопасности деградирует в тот момент, когда ты перестаёшь за ним следить, поэтому переоценку делают на постоянной основе, а не в точке времени. Облачный аккаунт, который был чист в 9 утра, к 3 часам дня — уже другой объект безопасности: кто-то задеплоил, кто-то кликнул, чья-то Lambda приняла более широкую роль. Задача CSPM — продолжать перечитывать.
Двое часов: обход и поток событий
Серьёзный CSPM работает на двух каденциях, и понимание разницы — это то, что отделяет «у нас есть инструмент» от «у нас есть покрытие». Периодический обход перечитывает каждый ресурс в каждом аккаунте на фиксированном интервале — скажем, каждые несколько часов. Это гарантия полноты: даже ресурс, созданный процессом, о котором ты не знаешь, в итоге будет перечислен и проверен, потому что обход не зависит от того, сообщили ли ему о чём-либо. Его слабость — задержка. Если обход идёт каждые 6 часов, бакет, сделанный публичным в 12:05, может быть отмечен только к 18:00 — шестичасовое окно экспозиции, которым scanner-as-a-service, ползающий по облачным диапазонам, с радостью воспользуется.
Событийный путь закрывает это окно. Облачный провайдер эмитит событие изменения конфига (правила AWS Config, EventBridge на вызов ModifyDB/PutBucketAcl, фиды GCP Asset Inventory), и CSPM переоценивает только этот один изменённый ресурс за секунды. Он быстрый и дешёвый, потому что инкрементальный. Его слабость — обратная слабости обхода: он видит только те изменения, на которые подписан, в регионах и аккаунтах, где проводка событий реально настроена, — а эта проводка ломается молча. Нужны оба. Обход — твой пол (всё в итоге увидено); поток событий — твой потолок (то, за чем ты следишь, видится быстро).
| Измерение | IaC-скан (до деплоя) | CSPM (после деплоя) |
|---|---|---|
| Что читает | Намеренный конфиг: Terraform-план | Фактический конфиг: живое состояние через API |
| Когда | До apply, в пайплайне | Непрерывно, после того как ресурсы существуют |
| Ловит консоль / SDK / дрейф | Нет — только то, что течёт через CI | Да — в этом весь смысл |
| Ловит до экспозиции | Да — плохой конфиг не уходит в прод | Нет — на момент находки он уже живой |
| Покрывает legacy / clickops аккаунты | Нет — у них нет IaC | Да — читает состояние независимо от происхождения |
| Режим отказа | Пропущенная поверхность (дрейф, внеплановое изменение) | Усталость от алертов (тысячи находок) |
Дрейф, масштаб и почему «находка» — это не «риск»
Две силы превращают CSPM из аккуратного линтера в трудную инженерную задачу: дрейф и масштаб.
Дрейф — это медленное расхождение между тем, что говорит твой IaC, и тем, что реально задеплоено. Даже в дисциплинированной команде кто-то горячим фиксом правит security group в 2 ночи во время инцидента и забывает перенести правку обратно в Terraform; следующий apply либо откатывает его фикс (ломая прод), либо кто-то добавляет ignore, и ресурс теперь навсегда вне гейта. CSPM — это то, как ты видишь дрейф: он сообщает живое состояние, которое твой код больше не описывает. Но увидеть — это лишь половина цикла. Вторая половина — примирить: либо втянуть изменение обратно в IaC, либо формально его принять. Дрейф, который ты видишь, но никогда не разрешаешь, просто становится вечной находкой, которую все приучаются проматывать.
Масштаб — убийца в энтерпрайзе. CSPM, наведённый на 300 аккаунтов с дефолтным набором правил, в первый же день вернёт десятки тысяч находок. Большинство — реальные-но-нерелевантные: «у S3-бакета нет логирования доступа» на бакете с публичными маркетинговыми картинками, «security group разрешает весь ICMP» внутри приватной подсети. Если ты маршрутизируешь их все, ты построил пожарный шланг алертов, который никто не читает, и единственная находка, которая важна, — боевая база данных, открытая в интернет, — тонет. Зрелый навык в CSPM — не запуск скана, а триаж: ранжируй по радиусу поражения (достижим ли ресурс из интернета? хранит ли чувствительные данные? даёт ли привилегии?), подавляй с зафиксированной причиной, а не молча игнорируй, и маршрутизируй человеку только верхний слой — тому, у кого есть контекст это починить. Находка — это факт; риск — это находка, оценённая против достижимости и ущерба. Смешивать их — это и есть то, как команды тонут.
▸Почему это работает
Почему бы просто не навести CSPM на прод и не включить все правила? Потому что два собственных свойства CSPM работают против тебя. Во-первых, read-only роль сама по себе — мишень: она может перечислить каждый ресурс в каждом аккаунте, поэтому переразмеренная или утёкшая CSPM-роль — золотая жила для разведки; держи её строго read-only, по аккаунту и в идеале без возможности читать содержимое объектов, только метаданные. Во-вторых, «все правила включены» максимизирует находки, а у находок есть цена: каждая потребляет внимание триажа, а внимание — и есть реальное узкое место. Команды, получающие пользу от CSPM, начинают с маленького высокосигнального набора правил (доступно из интернета + чувствительное + привилегированное), доказывают, что могут довести их до нуля, и только потом расширяются. Покрытие, по которому ты не можешь действовать, — это театр.
Как зрелый инженер встраивает это
CSPM не заменяет IaC-гейт — он стоит за ним как эшелонированная защита. Гейт останавливает мисконфиг, который ты пишешь в коде, до того как он уйдёт в прод; CSPM ловит мисконфиг, который приходит любым другим путём. Зрелый инженер подключает оба, затем связывает вывод CSPM с реальным процессом: дедуплицирует находки, чтобы одна корневая причина не была 400 алертами, оценивает по радиусу поражения, авто-маршрутизирует критический слой в трекер владеющей команды с достаточным контекстом, чтобы действовать, подавляет остальное с аудит-следом и скармливает повторяющиеся паттерны обратно в policy-as-code, чтобы тот же класс мисконфига ловился до apply в следующий раз. Конечное состояние — не «мы гоняем сканер». Это замкнутый цикл: предотврати в пайплайне, обнаружь то, что проскользнуло, в облаке, примири дрейф в код и со временем сожми повторяющиеся категории.
Твой CSPM, наведённый на 300 аккаунтов, возвращает 40 000 находок на первом прогоне. В команде безопасности 3 инженера. Что ты делаешь?
Скан твоего IaC-пайплайна зелёный на каждом деплое. Почему тебе всё равно нужен CSPM?
Бакет сделан публичным через консоль в 12:05. Твой CSPM делает полный обход каждые 6 часов и также подписан на события изменения конфига. Каково реалистичное время обнаружения и зачем гонять оба часов?
Упорядочь конвейер CSPM от сырого доступа до актуализируемого результата:
- 1 Принять read-only роль в каждом аккаунте
- 2 Опросить describe/list-API в нормализованный граф ресурсов
- 3 Вычислить правила, чтобы получить находки
- 4 Дедуплицировать и ранжировать по радиусу поражения (достижимость + чувствительность + привилегии)
- 5 Маршрутизировать верхний слой владельцу; остальное подавить с зафиксированной причиной
- 01Объясни, как CSPM находит мисконфигурацию по множеству аккаунтов в масштабе и почему он дополняет, а не заменяет IaC-сканирование.
- 02Почему «дрейф», модель двух часов и различие находка-против-риска — трудные части эксплуатации CSPM?
CSPM — это read-only обход, который непрерывно спрашивает, безопасно ли живое облако, — независимо от того, как каждый ресурс таким стал. Механически он принимает read-only роль на аккаунт, опрашивает describe/list-API в нормализованный граф ресурсов и проверяет этот граф по правилам, получая находки. Его определяющее отличие от IaC-сканирования — он читает фактический конфиг (после каждого клика в консоли, скрипта и рантайм-события), а не намеренный Terraform-план, поэтому он — единственное, что ловит дрейф консоли, внеплановые изменения и legacy clickops-аккаунты. Он работает на двух часах: периодический обход для полноты (всё в итоге увидено) и событийный путь для скорости (изменённый ресурс перепроверяется за секунды). Две трудные проблемы — дрейф, который CSPM даёт увидеть, но который ты всё равно должен примирить обратно в код, и масштаб, где дефолтный набор правил по сотням аккаунтов производит десятки тысяч находок, и реальный навык — триаж: находка — это факт, риск — это находка, оценённая по радиусу поражения, и только верхний слой заслуживает человека. CSPM не заменяет IaC-гейт; он стоит за ним как эшелонированная защита, и повторяющиеся категории, которые он вскрывает, должны течь обратно в policy-as-code. Теперь, когда скан твоего пайплайна зелёный, твой следующий вопрос: что меняет моё боевое облако, минуя пайплайн целиком?
Практика
Начни сверху. Задачи идут от простого к сложному: вспомнить факт, применить к случаю, затем senior-уровень. Открой, попробуй, потом открой ответ.
Что-то непонятно?
Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.
Примени это
Примени этот урок в реальном проекте.