GitHub Actions + 安全扫描:如何在你的流水线中集成 Trivy 和 Checkov
Source: Dev.to
(未提供需要翻译的正文内容。如需翻译文章正文,请粘贴完整文本。)
🛡️ 解决方案:在 GitHub Actions 中集成 Security Scanning
在那次经历之后,我决定创建一个 永不 再让漏洞进入生产环境的流水线。于是这个项目诞生了,我今天与您分享。
🔍 我们解决的问题
# Así era nuestro workflow ANTES:
- name: Build Docker Image
run: docker build -t mi-app .
- name: Push to Registry
run: docker push mi-app:latest
# ¡Sin validaciones de seguridad!
结果:漏洞、泄露的密钥、不安全的配置……全部进入生产环境。
🚀 我们安全流水线的架构
我们的新流水线有 4 个关键阶段:
1️⃣ 使用智能标签进行构建
# Tags únicos por commit + ambiente
IMAGE_TAG_SHA: "sha-${GITHUB_SHA::7}"
IMAGE_TAG_ENV: "${{ inputs.target_env }}-latest"
2️⃣ 使用 Trivy 进行漏洞扫描
- name: Security Scan con Trivy
run: |
docker run --rm \
-v $(pwd):/src \
aquasec/trivy:latest \
image --severity CRITICAL,HIGH \
mi-imagen:${TAG}
Trivy 帮助我们发现:
- 系统软件包中的漏洞
- 已知 CVE 的依赖
- 意外泄露的密钥
- 不安全的配置
3️⃣ 使用 Checkov 验证 Dockerfile
- name: IaC Security con Checkov
run: |
docker run --rm \
bridgecrew/checkov \
--file Dockerfile \
--framework dockerfile
Checkov 检查我们的 Dockerfile 是否遵循最佳实践:
- 是否使用 root 用户? ❌
- 是否有未更新的包? ❌
- 是否硬编码了密钥? ❌
4️⃣ 失败时自动阻断
关键点在这里:如果出现关键或高危漏洞,流水线将被阻止。
if [ "$VULNERABILIDADES" -gt 0 ]; then
echo "❌ WORKFLOW BLOQUEADO"
echo "Hay $VULNERABILIDADES problemas de seguridad"
exit 1
fi
📊 实时安全仪表板
所有内容会自动显示在 GitHub Actions Summary 中:
🐳 Reporte de Escaneo - Trivy
══════════════════════════════
📊 Resumen General
──────────────────
| Tipo | Severidad | Cantidad |
|--------------------|-----------|----------|
| Vulnerabilidades | 🔴 CRÍTICA| 2 |
| Vulnerabilidades | 🟠 ALTA | 9 |
| Total | | 11 |
🏗️ Checkov Security Scan
══════════════════════════
✅ Todos los checks pasaron (22 passed, 0 failed)
🎯 结果:自动化信任
之前
- “希望没有漏洞”
- 每 3 个月进行一次手动审计
- 频繁的安全事件
之后
- ✅ 每次提交 自动验证
- ✅ 每个镜像 在发布前扫描
- ✅ 每次部署 附带安全报告
- ✅ 零 生产环境漏洞,自实施以来
示例图片
💡 经验教训
-
安全 ≠ 缓慢
很多人认为加入安全扫描会让流水线变慢。错!我们的扫描只会增加 2‑3 分钟。 -
快速失败胜于生产环境失败
我们更倾向于让流水线失败(并通知开发者),而不是在生产环境中失败(影响用户)。 -
报告是你最好的盟友
清晰且自动化的报告能让团队 理解并修复 问题,而不仅仅是“打补丁”。
🚀 在 3 步简易实现
步骤 1:克隆并探索
git clone https://github.com/francotel/docker-image-security-scan
cd docker-image-security-scan
步骤 2:检查工作流
打开 .github/workflows/ci.yml 文件(或相应的文件名),并检查上述描述的每个阶段。
步骤 3:调整并部署
- 根据你的项目修改 tags(标签)和 variables(变量)。
- 将你的 Docker 注册凭证作为 secrets(密钥)添加到 GitHub。
- 提交(commit)并打开一个 Pull Request;观察流水线的运行情况。
示例文件
github/workflows/publish-nginx-image.yml – 一切准备就绪!
步骤 3:根据你的情况进行适配
根据你的技术栈修改镜像名称、注册表和策略。
完成!现在你的流水线会在每个 Docker 镜像进入生产之前验证其安全性。 🎉
📈 直接影响
- 检测:从每季度一次到 每次提交
- 覆盖率:从抽样到 100 % 的图像
- 信心:从“我期待”到 “我知道已经验证”
🤝 如何贡献?
El proyecto está activo en github.com/francotel/docker-image-security-scan.
改进想法?
- Slack/Teams 通知
- 历史仪表盘
- 自动扫描基础镜像
- 自定义 Policy as Code
🎯 今天就做!
关键优势
- ✅ 免费 (open source)
- ✅ 简洁 (单个 YAML 文件)
- ✅ 高效 (阻止真实问题)
立即行动
- ⭐ 给仓库加星
- 🐑 Fork 并自定义
- 💬 在 issue 中评论
准备好实现自动化安全了吗? 👉 github.com/francotel/docker-image-security-scan
#DevSecOps #GitHubActions #DockerSecurity
不要错过!关注我的 LinkedIn,获取所有更新和未来文章:
☕ 用咖啡支持我
如果这篇内容对你有帮助,想要支持我继续创作,请考虑请我喝咖啡。你的支持意义重大! 🥰
感谢阅读,期待下次再见! 👋




