BChance512/secure-cicd-demo

GitHub: BChance512/secure-cicd-demo

以 Flask 应用为例展示如何通过 GitHub Actions 构建「失败即关闭」的安全 CI/CD 流水线,集成测试、安全扫描与容器部署。

Stars: 0 | Forks: 0

# 安全 CI/CD 示例 ## 概述 本项目展示了一个使用 GitHub Actions 为简单 Flask Web 应用程序构建的安全持续集成与持续部署 (CI/CD) 流水线。 该仓库的目标是展示自动化测试、安全扫描、依赖验证和容器部署,作为现代 DevSecOps 工作流的一部分。 ## 应用程序 该应用程序是一个轻量级的 Flask API,公开了一个根端点 (/) 和一个健康检查端点 (/health)。 ### 端点 GET / 返回一条简单的欢迎消息,指示应用程序正在运行。 GET /health 返回: ``` { "status": "healthy" } ``` ## CI/CD 流水线 每次向 **main** 分支进行的推送或 pull request 都会自动执行以下 GitHub Actions 工作流: 1. 检出仓库 2. 设置 Python 3. 安装项目依赖 4. 使用 **pytest** 运行单元测试 5. 使用 **Bandit** 执行静态代码安全分析 6. 使用 **pip-audit** 扫描依赖项以查找已知漏洞 7. 构建 Docker 镜像 8. 将 Docker 镜像发布到 GitHub Container Registry (GHCR) ## 安全方法 该仓库演示了多项安全最佳实践: - 使用 Bandit 进行静态应用安全测试 (SAST) - 使用 pip-audit 进行软件组合分析 (SCA) - 锁定的依赖版本 - 部署前的自动化安全验证 - 通过 GitHub Actions 自动发布容器镜像 在开发过程中,Bandit 识别出 Flask 应用程序中使用了 `debug=True`。在最终执行流水线之前,已更新应用程序以禁用 debug 模式,从而使安全门禁能够成功通过。 此外,pip-audit 还识别出了过时的依赖项,并在最终执行流水线之前将其升级到了安全的版本。 ### 流水线行为 流水线被有意配置为“失败即关闭”。如果单元测试、静态代码分析、依赖扫描或容器镜像发布失败,工作流将停止,且部署不会完成。 这种方法确保只有通过自动化测试和安全验证的代码才会被发布,从而展示了一个安全优先的 CI/CD 工作流。 ## 本地运行 创建并激活虚拟环境: ``` python -m venv .venv ``` Windows: ``` .venv\Scripts\activate ``` 安装依赖项: ``` pip install -r requirements.txt ``` 运行应用程序: ``` python app/main.py ``` ## Docker 构建镜像: ``` docker build -t secure-cicd-demo . ``` 运行容器: ``` docker run -p 5000:5000 secure-cicd-demo ``` ## 使用的技术 - Python - Flask - GitHub Actions - Docker - Pytest - Bandit - pip-audit - GitHub Container Registry (GHCR) ## 设计决策 应用程序有意保持简单,以便将重点放在展示安全的 CI/CD 流水线上,而不是应用程序的复杂性上。 该流水线验证应用程序功能,执行自动化安全分析,检查依赖项是否存在已知漏洞,并构建和发布容器镜像,从而提供一个可重复且以安全为核心的部署过程。
标签:DevSecOps, Docker, Flask, GitHub Actions, SAST, 上游代理, 安全防御评估, 盲注攻击, 自动笔记, 请求拦截, 逆向工具