GitHub Actions + 安全扫描:如何在你的流水线中集成 Trivy 和 Checkov

发布: (2026年1月19日 GMT+8 10:06)
6 min read
原文: Dev.to

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 个月进行一次手动审计
  • 频繁的安全事件

之后

  • 每次提交 自动验证
  • 每个镜像 在发布前扫描
  • 每次部署 附带安全报告
  • 生产环境漏洞,自实施以来

示例图片

trivy-1

trivy-2

checkov-1

💡 经验教训

  1. 安全 ≠ 缓慢
    很多人认为加入安全扫描会让流水线变慢。错!我们的扫描只会增加 2‑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,获取所有更新和未来文章:

LinkedIn

☕ 用咖啡支持我

如果这篇内容对你有帮助,想要支持我继续创作,请考虑请我喝咖啡。你的支持意义重大! 🥰

BuyMeACoffee

感谢阅读,期待下次再见! 👋

Back to Blog

相关文章

阅读更多 »

Rapg:基于 TUI 的密钥管理器

我们都有这种经历。你加入一个新项目,首先听到的就是:“在 Slack 的置顶消息里查找 .env 文件”。或者你有多个 .env …

技术是赋能者,而非救世主

为什么思考的清晰度比你使用的工具更重要。Technology 常被视为一种魔法开关——只要打开,它就能让一切改善。新的 software,...

踏入 agentic coding

使用 Copilot Agent 的经验 我主要使用 GitHub Copilot 进行 inline edits 和 PR reviews,让我的大脑完成大部分思考。最近我决定 t...