3. CNAPP工程化架构设计

CNAPP平台要同时覆盖云基础设施、容器编排、工作负载运行时和应用代码,如果只是把若干安全工具拼在一起,很快会遇到数据重复采集、告警口径不一致、策略无法统一下发、响应动作互相冲突等问题。工程化架构设计的核心,是把平台拆成职责清晰、接口稳定的四层:数据采集层、分析引擎层、策略控制层、响应编排层,并让层与层之间通过标准化的数据契约解耦,从而支持横向扩展和功能替换。

四层架构的职责边界

数据采集层负责“把原始事实拿回来”,包括云API配置快照、Kubernetes对象与审计日志、镜像仓库元数据、CI/CD流水线事件、eBPF运行时行为、漏洞库与威胁情报。它的输出不是告警,而是带来源标识和时间戳的标准化事件与资源快照。分析引擎层负责“把事实变成判断”,包括资产归一化、图关系构建、规则与行为检测、漏洞可达性分析、风险评分。策略控制层负责“把判断变成约束”,把检测结果映射为准入策略、网络策略、镜像签名要求和合规基线。响应编排层负责“把约束变成动作”,执行隔离、阻断、工单、通知和回滚。

四层之间必须约定统一的数据模型。推荐以“资源实体 + 关系边 + 事件”作为核心抽象:资源实体用唯一ID标识(如 cluster/ns/workload/image 路径),关系边描述“运行于、拉取自、暴露于、可访问”,事件则携带检测结论和证据引用。这样分析引擎可以跨云、跨集群做关联,策略层也能基于同一实体ID精确下发。

CNAPP 四层工程化架构与数据流 数据采集层 · 原始事实 云API配置快照 CSPM / CIEM K8s对象+审计日志 KSPM / 准入 镜像与SBOM 仓库 / 流水线 eBPF运行时行为 CWPP 漏洞库 / 威胁情报 外部Feed 标准化事件 / 资源快照 分析引擎层 · 事实→判断 资产归一化 统一实体ID 关系图构建 运行/拉取/暴露 规则+行为检测 Sigma / 异常 漏洞可达性 调用链分析 风险评分 优先级排序 检测结论 + 证据引用 策略控制层 · 判断→约束 准入策略 镜像签名 / 高危阻断 网络策略 东西向微隔离 合规基线 CIS / 等保映射 策略版本与灰度 审计 / 回滚 策略决策 / 动作指令 响应编排层 · 约束→动作 隔离工作负载 阻断网络连接 工单 / 通知 镜像回滚 取证快照 响应结果反馈至分析

可扩展性的三个关键设计

第一,采集侧采用“代理 + 无代理”混合模式。云API采集适合无代理,按固定周期拉取配置快照,例如每15分钟一次全量、每1分钟一次增量;K8s审计日志通过Webhook或日志管道实时接入;运行时行为用eBPF采集,避免在业务Pod中注入Sidecar带来的资源开销。采集器应支持水平扩展,按云账号或集群分片,每个分片独立消费,避免单点瓶颈。

第二,分析引擎采用流批一体。实时流处理负责秒级检测(如异常进程、可疑外联),批处理负责图关系重建、漏洞可达性计算和每日风险评分。两者共享同一份实体ID和关系存储,避免“实时告警找不到资产上下文”。分析规则以插件形式注册,新增检测能力不需要改动核心引擎。

第三,策略与响应解耦。策略层只输出“决策结果”,例如“拒绝部署镜像X到生产命名空间”,不直接调用K8s API;响应编排层根据决策结果选择执行器(准入Webhook、网络策略控制器、工单系统)。这样策略可以灰度发布,响应动作可以按环境替换,也便于审计“谁在什么时候基于哪条策略执行了什么动作”。

一个可落地的参数示例

假设某企业有3个云账号、12个K8s集群、约2000个工作负载。采集层按集群分片部署12个采集器,每个采集器处理约170个工作负载;云API采集按账号分3个任务,每15分钟全量、每1分钟增量。分析层用2个流处理节点处理运行时事件,峰值约5000事件/秒;批处理每天凌晨重建一次关系图,约200万条边。策略层维护约80条准入策略和40条网络策略,按命名空间标签匹配。响应层配置5类执行器,其中隔离动作要求二次确认,阻断动作在预发环境先观察24小时再上生产。

工程化架构的验收标准不是“功能齐全”,而是:新增一个云账号或集群时,采集层能否自动分片接入;新增一类检测规则时,分析层能否热加载;调整一条策略时,能否灰度到单个命名空间而不影响全局;执行一次响应时,能否追溯到策略版本和证据链。

常见架构陷阱

  • 采集层直接输出告警:导致分析层无法做跨源关联,同一风险在多个工具中重复出现。
  • 分析引擎与策略层强耦合:检测规则里直接写死“发现即阻断”,无法按环境调整处置力度。
  • 响应层绕过策略层直接调用API:动作来源不可审计,回滚困难。
  • 缺少统一实体ID:云上资源、K8s对象、镜像、进程各自为政,无法回答“这个漏洞到底影响哪个在线业务”。

把四层职责、数据契约和扩展方式定清楚之后,后续的采集器开发、检测规则编写、策略下发和响应剧本编排才有稳定的工程边界。架构设计阶段多花时间定义接口,比后期在告警风暴中反复修补要划算得多。