容器安全栈
Harbor 镜像库 + Grype/Syft 扫描器 + Checkov IaC 检查 + CrowdSec + Cilium eBPF — 在被打之前堵住供应链漏洞。
这个 pack 装了什么
这个包收齐了多数团队在告别商业容器安全平台后会落地的 六个开源工具。它们覆盖镜像仓库、镜像扫描、基础设施代码静态检查、运行时防御 —— 每次供应链事故复盘里都会出现的四层。
| # | 资产 | 层 | 为什么放它 |
|---|---|---|---|
| 1 | Harbor | 镜像仓库 | CNCF 毕业级仓库,自带扫描 / 签名 / 复制 |
| 2 | Grype | 镜像扫描 | 直接读 OCI 镜像的漏洞扫描器 |
| 3 | Syft | SBOM | 给任意镜像 / 文件系统生成软件物料清单 |
| 4 | Checkov | IaC 检查 | 1000+ 策略覆盖 Terraform / K8s / Helm / CloudFormation |
| 5 | CrowdSec | 运行时 | 行为检测 + 全网共享黑名单 |
| 6 | Cilium | 网络 | eBPF 网络 + NetworkPolicy + Hubble 可观测 |
这个分工很关键:只有仓库没扫描是摆设;只扫不出 SBOM,拿到 CVE 编号也没法定位修复面;运行时没有网络策略,能看见入侵也压不住爆破半径。
为什么现在要做容器安全
2024-2025 的供应链事件(xz-utils、polyfill.io、npm 蠕虫)把一件事钉死了:你交付的二进制等于你没审过的所有依赖之和。一个现代容器镜像要拉系统底包、语言运行时、应用层、构建工具 —— 四条供应链叠在一起。一个被污染的间接依赖造成的代价,五人创业团队和五百强一个数量级。
商业扫描器(Snyk / Wiz / Aqua)能用,但每节点每月要 30-100 美金,还把遥测送回他们云端。这套开源 pack 给的是:
- 合并前 IaC 扫描(Checkov 在 CI 抓 S3 桶配置错、缺 securityContext、明文密钥)
- 构建后镜像扫描(每次推 Harbor 跑 Grype + Syft,CVSS ≥ 7 直接 fail)
- 运行时防御(CrowdSec 吃 nginx / Traefik 日志,跟 10 万 + 节点共享攻击者 IP)
- 网络隔离(Cilium NetworkPolicy 让被打穿的 pod 也跳不到数据库)
一条命令装齐
# 把整个 pack 装进当前项目
tokrepo install pack/container-security
# 或只装单个
tokrepo install grype
tokrepo install checkov
TokRepo CLI 把扫描器配置、CI 任务模板、Helm value 片段写进你仓库。每个资产页都给了 Anchore / Bridgecrew / Isovalent / Harbor 团队推荐的生产参数。
常见踩坑
- 只扫
latesttag。生产 manifest 必须钉到 digest,latest会漂,扫描历史会失去意义。 - 拿 CVSS 当优先级。一个 dev-only 基础镜像里的 CVSS 9.8 比你边缘代理里的 CVSS 6.5 优先级低。Grype 输出要叠运行时可达性分析。
- 不生成 SBOM。下次 xz 级别后门一来,已经把 Syft SBOM 入库的团队几分钟内回答「我们暴露了吗」,没做的团队要查一周。
- 只用 Checkov 当 IaC 门。Checkov 擅长抓「已知坏模式」,抓不到业务安全(例如 IAM 角色技术上有效但权限过大)。叠
tfsec或 OPA 做第二遍。 - CrowdSec 不调 scenarios。默认场景能挡明显攻击但会误伤激进爬虫。
parsers/scenarios不调,你监控自己都会被封。
这套不够用的时候
K8s 大规模上线还要叠 Falco 做 syscall 级运行时检测(最早的运行时工具,Cilium Tetragon 现在重合但 Falco 规则库更大)。密钥单独管要加 Vault 或 Infisical —— 两个都没放进 pack 是因为密钥管理是另一个问题域。供应链溯源(这个镜像谁建的、在哪个 runner)看 Sigstore + in-toto 证明;Harbor 原生支持 cosign 签名,路径很短。
6 个资产打包就绪
常见问题
整套全跑下来收费吗?
不收。每个工具都是 Apache 2.0 或 MIT 许可证开源。你需要给 Harbor 准备存储(按镜像数扩)和 Postgres 存元数据,但没有按席位收费。CrowdSec 有付费集中控制台,但 agent + 社区黑名单免费,那部分才是承重的。
比 Snyk Container / Wiz 怎么样?
Snyk / Wiz 多出来的是托管 UI、厂商策展的 CVE 优先级、SOC 2 合规报告。这个 pack 给一样深度的扫描(Grype 漏洞库源头是同一份 NVD + GHSA),零节点费用,但仪表盘要自己搭或者把结果灌进 Grafana / DefectDojo。合规报告是瓶颈选托管,工程时间和自建比席位费便宜选这个 pack。
用 Claude Code / Cursor 能自动修吗?
能。Claude Code 可以直接跑 grype <image> 和 checkov -d .,解析 JSON,按 PR 出补丁。TokRepo 资产页带了把 Grype + Checkov 连起来的 security-fix 斜杠命令的 subagent prompt。Cursor 用户走自定义规则,两边都按资产单独写好了。
Grype 跟 Syft 区别?
Syft 生成 SBOM —— 镜像里每个包的清单。Grype 拿这个 SBOM(或直接扫镜像)跟漏洞库匹配。基本永远一起用:构建时 Syft 跑一次,按计划用 Grype 扫 SBOM(便宜),加上每次新推时再扫(捉旧镜像里的新 CVE)。
Cilium 上线运维坑?
Cilium 默认在很多安装路径里会替换 kube-proxy,从已运行集群迁要小心 —— hostNetwork pod 没考虑到时 DNS 解析会断。先用 --kube-proxy-replacement=partial,跑完 cilium connectivity test 验证再切 strict。Hubble UI 不要直接挂公网入口,前面必须套鉴权。