CI/CD 安全
2020 年,SolarWinds 供应链攻击震惊了整个安全行业。攻击者通过篡改 CI/CD 流水线中的构建组件,将恶意代码注入到数万家企业的系统中。
这个事件让人们意识到:CI/CD 流水线本身就是一个巨大的攻击面。当你把代码变成可部署的镜像、从镜像变成运行中的服务时,每一个环节都可能成为攻击者的切入点。
CI/CD 安全不是「加几个检查点」那么简单,它是一个系统工程。
供应链安全
构建时代
SBOM 清单
SBOM(Software Bill of Materials)记录软件的所有组件依赖:
使用
SBOM
密钥管理
密钥暴露风险
密钥泄露案例]
Vault 集成
Vault
直接使用
Kubernetes Secrets
External
Sealed Secrets
Sealed
镜像安全
镜像扫描
Trivy
Trivy
多阶段构建
安全的多阶段构建]
非 root 用户
非
流水线安全
最小权限原则
GitLab
OIDC 认证
使用
AWS
Pipeline 审批
生产环境需要审批]
Approval
代码安全
静态代码分析
SonarQube
SonarQube
依赖扫描
OWASP
密钥检测
GitLeaks
.gitleaks.toml]
运行时安全
Pod 安全策略
Pod
网络策略
默认拒绝网络策略]
安全检查清单
CI/CD Pipeline 检查
- 所有密钥使用 Vault 或 Secrets Manager 管理
- CI Runner 使用最小权限
- 禁止使用 privileged 容器
- 所有镜像经过安全扫描
- 生产环境部署需要审批
- 启用 OIDC 而非长期密钥
- 定期轮换密钥
镜像检查
- 使用最小化基础镜像
- 非 root 用户运行
- 不包含调试工具
- 定期重建以获取安全补丁
- 签名镜像
- 验证镜像签名
代码检查
- 启用 SAST(静态应用安全测试)
- 启用 DAST(动态应用安全测试)
- 启用依赖扫描
- 启用密钥检测
- 代码审查是强制流程
常见反模式
反模式一:使用长期密钥
错误示例]
正确做法:使用 OIDC 或短期凭证。
反模式二:privileged 容器
错误示例]
正确做法:最小化权限,禁用 privileged。
反模式三:忽视扫描结果
扫描发现问题但选择忽略。
正确做法:设置 Quality Gate,阻断高危问题。
延伸思考
CI/CD 安全是一个深度防御的问题。没有单一方案可以解决所有安全问题,你需要:
- 供应链安全:SBOM、签名验证、镜像扫描
- 密钥管理:Vault、External Secrets、OIDC
- 运行时安全:PSP、Network Policy、Security Context
- 代码安全:SAST、DAST、密钥检测
另一个值得关注的趋势是SLSA(Supply-chain Levels for Software Artifacts)。Google 提出的 SLSA 框架定义了软件供应链安全的四个级别,帮助组织逐步提升安全水平。
但技术只是手段,安全文化才是根本。再好的安全工具,如果团队成员不遵守规范,也会形同虚设。
建立安全流水线的第一步,不是选择哪个工具,而是让团队理解:为什么安全很重要?当你让每个工程师都意识到「我的每一次提交,都可能影响成千上万的用户」时,安全就不再是「额外的负担」,而是「职业的素养」。