calvareh/cloud-devsecops-pipeline
GitHub: calvareh/cloud-devsecops-pipeline
这是一个集成多种安全工具的DevSecOps流水线项目,用于在软件开发生命周期中自动化安全扫描以早期发现漏洞。
Stars: 0 | Forks: 0
[](https://github.com/calvareh/cloud-devsecops-pipeline/actions/workflows/devsecops-pipeline.yml)




# 云端DevSecOps安全流水线
一个实践性的DevSecOps流水线项目,专注于使用GitHub Actions将自动化安全控制集成到软件开发生命周期(SDLC)中。
本项目演示了如何将多种安全扫描技术协同编排,以识别和修复跨越源代码、依赖项、容器、基础设施即代码(IaC)以及运行中应用程序的安全问题。
## 已实施的安全控制
| 安全层 | 使用的工具 | 目的 |
|---|---|---|
| 密钥检测 | Gitleaks | 检测硬编码的密钥和敏感数据 |
| 依赖扫描 | Trivy | 检测存在漏洞的应用程序依赖项 |
| 静态应用安全测试(SAST) | Semgrep | 检测不安全的编码模式 |
| 容器安全扫描 | Trivy | 扫描Docker镜像的操作系统/库漏洞 |
| 基础设施即代码(IaC)扫描 | Checkov | 验证Terraform配置并识别不安全的云基础设施模式 |
| 动态应用安全测试(DAST) | OWASP ZAP | 扫描运行中的Web应用程序以发现安全弱点 |
## 使用的技术
- GitHub Actions
- Docker
- Python
- Flask
- Terraform
- Gitleaks
- Trivy
- Semgrep
- Checkov
- OWASP ZAP
## DevSecOps流水线流程
1. 开发者将代码推送到GitHub
2. GitHub Actions流水线自动启动
3. 执行密钥扫描
4. 执行依赖漏洞扫描
5. 执行SAST分析
6. 执行容器镜像扫描
7. 执行IaC安全扫描
8. 使用OWASP ZAP在本地对运行的容器化应用程序执行DAST验证
9. 根据安全发现结果,流水线判定为通过或失败
## 演示的安全场景
本项目有意引入并修复了多个安全问题,包括:
- 硬编码的密钥
- 存在漏洞的依赖项
- 命令注入风险
- 不安全的Flask配置
- 容器漏洞
- 权限过于宽松的Terraform配置
- 缺失的HTTP安全头
## 项目目标
- 演示分层的DevSecOps安全控制
- 实践左移安全原则
- 模拟企业级CI/CD安全关卡
- 学习修复工作流
- 培养实用的云安全工程技能
## 仓库结构
```
.github/workflows/ # GitHub Actions pipeline
app/ # Flask demo application
config/ # Security configuration files
docs/screenshots/ # Project screenshots
terraform-insecure-demo/ # Intentionally insecure Terraform examples
terraform-secure/ # Future remediated Terraform configurations
```
## 如何在本地运行
### 克隆仓库
```
git clone https://github.com/calvareh/cloud-devsecops-pipeline.git
cd cloud-devsecops-pipeline
```
### 构建Docker镜像
```
docker build -t devsecops-demo-app .
```
### 运行容器化应用程序
```
docker run -p 5050:5000 devsecops-demo-app
```
### 访问应用程序
打开浏览器:
```
http://localhost:5050/ping
```
预期响应:
```
pong
```
### 执行本地OWASP ZAP DAST扫描
```
docker run -t zaproxy/zap-stable zap-baseline.py -t http://host.docker.internal:5050
```
## 当前状态
- 已实现密钥扫描
- 已实现依赖扫描
- 已实现SAST
- 已实现容器扫描
- 已在本地验证DAST
- 已使用Checkov实现IaC扫描框架
- 已启用流水线强制执行
- 已测试安全修复工作流
## 流水线执行
成功的GitHub Actions DevSecOps流水线执行:

## 安全发现与修复示例
### Semgrep命令注入检测
在测试期间,Semgrep成功检测到Flask应用程序中使用`os.system()`的不安全命令执行模式。
流水线在易受攻击的代码被修复前自动使SAST阶段失败。

### Checkov基础设施即代码发现
在基础设施即代码(IaC)扫描阶段,Checkov成功检测到多个不安全的Terraform配置。
有意设置的不安全Terraform示例包括:
- 公共S3存储桶暴露风险
- 权限过于宽松的安全组规则
- 来自互联网的开放SSH访问
- 不受限制的出站流量配置
#### 公共S3存储桶暴露检测

#### 权限过于宽松的安全组检测

### OWASP ZAP动态应用安全测试(DAST)
使用OWASP ZAP对容器化的Flask应用程序执行本地运行时安全验证。
与其他安全控制不同,DAST扫描目前在本地对运行的Docker容器执行,尚未集成到GitHub Actions流水线中。
扫描发现了多个缺失的HTTP安全头和响应加固问题,包括:
- 缺失的防点击劫持头
- 缺失的X-Content-Type-Options头
- 缺失的内容安全策略(CSP)头
- 缺失的跨源嵌入者策略头
- 通过HTTP响应头泄露的服务器版本信息
这些问题可能增加遭受点击劫持、MIME类型混淆攻击、浏览器策略绕过以及向攻击者不必要地泄露信息等风险。
#### OWASP ZAP DAST扫描结果

## 经验教训
- 安全扫描工具在功能上可能存在重叠,需要仔细调优以避免重复发现和告警疲劳。
- 容器漏洞通常继承自基础镜像和操作系统库,而不仅来自应用程序代码。
- 左移安全实践有助于在部署前的SDLC早期阶段识别问题。
- CI/CD安全关卡可有效防止不安全的代码和配置进入生产环境。
- 基础设施即代码(IaC)扫描在资源部署前提供了宝贵的云安全验证。
- 安全工具需要在严格强制执行与开发者可用性及工作流效率之间取得平衡。
- 即使应用程序代码未变,容器漏洞结果也可能随漏洞数据库更新而变化。
- 安全关卡应区分具有可用修复的可操作漏洞与需要监控或风险接受的上游未修复漏洞。
## 未来改进方向
- 完全集成CI的DAST自动化
- 加固的生产Docker镜像
- 安全的Terraform部署示例
- GitHub分支保护策略
- 安全报告仪表板
- SBOM生成
- 制品签名与验证
标签:DevSecOps, Docker容器化, ECS, Flask框架, Gitleaks, GPT, IaC扫描, OWASP ZAP, Python开发, SDLC安全, Semgrep, Terraform, Web截图, WordPress安全扫描, 上游代理, 云安全监控, 依赖扫描, 动态应用安全测试, 安全扫描, 安全管道, 容器安全, 持续安全集成, 时序注入, 模型提供商, 漏洞管理, 请求拦截, 软件开发, 逆向工具, 静态分析