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, 上游代理, 安全防御评估, 盲注攻击, 自动笔记, 请求拦截, 逆向工具