ravisinghrajput95/AI-Powered-DevSecOps-CI-CD-Pipeline

GitHub: ravisinghrajput95/AI-Powered-DevSecOps-CI-CD-Pipeline

整合多维度安全扫描工具输出,借助 AI 生成带证据引用的云原生应用发布就绪报告的 DevSecOps 平台。

Stars: 0 | Forks: 0

# AI 驱动的 DevSecOps CI/CD Pipeline [![Test Suite](https://static.pigsec.cn/wp-content/uploads/repos/cas/4f/4fbbfa1c0ccb63d136e8ba92d94dbda439d836f0f900b25ca504784ee280250f.svg)](https://github.com/ravisinghrajput95/AI-Powered-DevSecOps-CI-CD-Pipeline/actions/workflows/tests.yaml) [![CodeQL](https://static.pigsec.cn/wp-content/uploads/repos/cas/73/73721a0ab8ff3d64fd3a57205cc9130f873189e35218be05a6bc861800c54d84.svg)](https://github.com/ravisinghrajput95/AI-Powered-DevSecOps-CI-CD-Pipeline/actions/workflows/codeql.yaml) [![Tests](https://img.shields.io/badge/tests-559%20passing-brightgreen)](tests/) [![License: MIT](https://img.shields.io/badge/license-MIT-blue)](LICENSE) 九个安全扫描器生成了九份互不兼容的报告,没人能告诉你这次发布是否安全。本 Pipeline 将它们整合为**一份带有证据引用的发布建议** —— 每一个结论都通过 ID 追溯到真实的发现,每一个缺失的信号都会被明确声明,而不是被显示为无异常。 [![AI 发布就绪报告 — 结论“不予批准”,健康状态 CRITICAL,带有引用具体发现 ID 的跨领域关联](https://static.pigsec.cn/wp-content/uploads/repos/cas/e9/e93a53974b841f357caec47d06efa434ec567de28d8c0872cf67c42245519941.png)](reports/sample/release_report.md) *这是一份来自该 Pipeline 的真实报告 —— 包含 240 个发现、4 个领域、9 个工具,全部 19 个扫描器均报告 `SUCCESS`,使用 `claude-sonnet-4-6`。[查看完整版本](reports/sample/release_report.md) ([带样式的 HTML](reports/sample/release_report.html))。每个关联下方的标签是 `finding_id` 引用,指向 `final_release_context.json` 中实际的扫描器发现。格式错误的 ID 会通不过 schema 验证,渲染器将拒绝写入报告;格式正确但找不到匹配发现的 ID 可以渲染,但会在分析和渲染步骤中引发警告。请注意关联本身:将 Checkov 的静态 Terraform 发现与 Kyverno 的实时准入结果结合起来,跨越了应用程序、基础设施和运行时领域,带有九处引用,最终得出容器逃逸将导致整个 GCP 项目被完全攻破的结论。一个静态工具,一个运行时工具,一句话得出了它们单独无法产生的结论。* **三个特性使其超越了普通的仪表盘:** - **跨领域关联。** 将静态 Terraform 分析与实时集群准入结果结合,将应用程序代码与容器 CVE 结合 —— 这些是任何单一扫描器都无法得出的声明,也是本项目存在的理由。 - **基于引用的证据。** AI 从不重述发现,只进行引用。格式错误的 `finding_id` 会通不过 schema 验证,渲染器将拒绝写入文件。 - **缺失信号会被明确声明。** `NO_SIGNAL` 区分了“工具运行了但未发现任何东西”和“根本没有东西可发现”,因此未测量的领域绝不会被视为无异常。 | | | |---|---| | **查看输出** | [`reports/sample/release_report.md`](reports/sample/release_report.md) — 一份包含 240 个发现的真实报告 | | **离线运行** | `python3 scripts/demo_report.py` — 无需集群、无需 API 密钥、无需网络 | | **工作原理** | [ARCHITECTURE.md](ARCHITECTURE.md) — 设计、schema、领域模型 | | **报告 Bug** | [SECURITY.md](SECURITY.md) — 请先阅读;此处的多数漏洞都是故意的 | ## 目标应用程序 — CloudCart CloudCart 是一个功能齐全的云原生电子商务应用程序,包含真实的漏洞和配置错误,旨在跨 DevSecOps 工具链生成丰富的发现。它是该 Pipeline 的测试夹具:上面报告中的发现都是真实的,并且都是故意植入在此处的。 ## 架构 ``` +-------------+ +-------------+ +--------------+ | React | --> | Flask API | --> | PostgreSQL | | Vite SPA | | SQLAlchemy | | Database | +-------------+ +------+------+ +--------------+ | +------v-------+ | Prometheus | | Grafana | +--------------+ ``` ## 技术栈 | 层级 | 技术 | |-------|------------| | Frontend | React 18, Vite, Axios | | Backend | Flask, SQLAlchemy, Gunicorn | | Database | PostgreSQL 13 | | Containers | Docker, Docker Compose | | Orchestration | Kubernetes, Helm | | Infrastructure | Terraform (GKE) | | Observability | Prometheus, Grafana | | CI/CD | GitHub Actions | | Security | Kyverno, KubeArmor, Cosign, Checkov, Snyk, GitGuardian, Kubelinter, Kubeconform, Syft, SonarCloud, CodeQL, Dependabot, GHAS, SBOM, ZAP | | **AI 发布智能** | **Claude (强制使用工具) — 请参阅下方的 [AI 发布智能平台](#ai-release-intelligence-platform)** | ## 业务功能 - 用户注册和登录 - 带搜索功能的产品目录 - 购物车和结账 - 产品评论 - 订单管理 - 用户个人资料和文件上传 - 管理后台 ## 故意设置的漏洞 ### 应用层 (OWASP Top 10) | 漏洞 | 位置 | |---------------|----------| | SQL 注入 | `backend/routes/products.py` - `/api/products/search` | | 存储型 XSS | `frontend/src/components/ReviewList.jsx` - `dangerouslySetInnerHTML` | | SSRF | `backend/routes/vulnerable.py` - `/api/vuln/fetch`, `/api/vuln/proxy` | | 命令注入 | `backend/routes/admin.py` - `/api/admin/exec` | | 路径遍历 | `backend/routes/vulnerable.py` - `/api/vuln/file` | | 不安全的文件上传 | `backend/routes/vulnerable.py` - `/api/vuln/upload` | | 硬编码密钥 | `backend/config.py`, `secrets/credentials.json` | | 敏感信息暴露 | `/api/config`, `/api/admin/env`, `/api/vuln/debug` | | 访问控制失效 | 管理员路由、个人资料更新、购物车/订单 IDOR | | 缺失授权 | 创建产品、更新订单状态、删除评论 | | 启用调试模式 | 全程 `FLASK_DEBUG=true` | | 薄弱的会话管理 | 不安全的 Cookie、长期有效的 JWT、localStorage 令牌 | ### 依赖项漏洞 - **Python (Docker / Snyk):** 见 `backend/requirements-vulnerable.txt` - Flask 2.0.1, Pillow 8.3.2, PyJWT 1.7.1 等。 - **Python (本地开发):** `backend/requirements.txt` - 支持 Python 3.11 至 3.13 安装。 - **npm:** axios 0.21.1, lodash 4.17.15, moment 2.29.1 (`frontend/package.json`)。 ### 容器安全 - Root 容器(没有 `USER` 指令) - 缺失 `HEALTHCHECK` - 存放在 `ENV` 变量中的密钥 - 过期的基础镜像 (`python:3.7-slim`, `node:14-alpine`, `nginx:latest`) - 可变的 `:latest` 镜像标签 ### Kubernetes 配置错误 - 特权容器,`hostNetwork: true` - `hostPath` 挂载,包括 `/var/run/docker.sock` - `cluster-admin` RBAC 绑定 - 具有过度权限的默认服务账户 - 缺失资源限制 - 公开的 `LoadBalancer` 服务 - 无 NetworkPolicies - 明文清单中的密钥 ### Terraform 配置错误 - 防火墙规则对 `0.0.0.0/0` 开放 - 过于宽松的 IAM (`roles/owner`, `roles/storage.admin`) - 公开的 GCS 存储桶 - 禁用了日志记录/监控 - 启用了旧版 ABAC - 禁用了私有集群 ## 工具覆盖矩阵 | 工具 | 发现内容 | |------|---------------| | GitHub Advanced Security (CodeQL) | SQLi、命令注入、SSRF 模式 | | GitGuardian | 代码、配置、工作流中的硬编码密钥 | | SonarCloud | 代码异味、安全热点、重复代码 | | Snyk Open Source | 存在漏洞的 Python/npm 依赖项 | | Snyk Container | Docker 基础镜像中的 CVE | | Syft / CycloneDX | SBOM 生成 | | Checkov | Terraform、Kubernetes、Helm 配置错误 | | Kyverno | 特权 Pod、缺失限制、hostPath | | KubeArmor | 运行时进程/文件违规 | | Cosign | 镜像签名和验证 | | ZAP | DAST | | Prometheus / Grafana | 应用程序指标仪表盘 | | **AI 发布智能 Agent** | **跨领域关联、优先级风险推理、发布就绪建议 — 见下文** | ## 项目结构 ``` Cloudcart/ |-- frontend/ # React + Vite SPA | |-- public/images/ # SVG and product catalog image assets | `-- src/ |-- backend/ # Flask REST API |-- database/ # PostgreSQL init SQL |-- helm/ | |-- cloudcart/ # Application Helm chart | |-- postgresql/ # Database Helm chart | `-- monitoring/ # Prometheus/Grafana Helm chart |-- terraform/ # GKE infrastructure |-- monitoring/ # Prometheus and Grafana configs |-- policies/ | |-- kyverno/ # 19 Kyverno ClusterPolicies (pod-security, supply-chain) | `-- kubearmor/ # 8 KubeArmor runtime policies |-- .github/workflows/ # 14 CI/CD + security workflows |-- scripts/ # Normalizers, ReleaseContext builders, AI agent, renderers |-- tests/ # 559 automated tests + golden regression dataset |-- docker-compose.yml |-- README.md ``` ## 快速开始 (Docker Compose) ### 前置条件 - Python 3.11+(支持 3.13) - Node.js 18+ - Docker(推荐用于 PostgreSQL) ### 0. 仓库设置(一次性) 在执行以下步骤之前,从仓库根目录运行: ``` # 安装 husky git hooks、lint-staged 和 eslint。 # 没有它,.husky/ 中的 pre-commit hooks 永远不会激活。 npm install # pre-commit hook 对暂存的 Python 文件运行的 formatters/linters。 pip install -r backend/requirements-dev.txt ``` 确认 Git 钩子已配置好 —— 这应该输出 `.husky/_`: ``` git config core.hooksPath ``` 可选安装 [ggshield](https://docs.gitguardian.com/ggshield-docs/getting-started) 用于 pre-commit 密钥扫描。如果不存在,它会被跳过并发出警告,但 绝不会阻止提交。 ### 1. 启动 PostgreSQL ``` docker compose up -d postgres ``` ### 2. 后端 (终端 1) **Windows (PowerShell):** ``` cd backend .\run-backend.ps1 ``` **macOS / Linux:** ``` cd backend python3 -m venv venv source venv/bin/activate pip install -r requirements.txt export DATABASE_URL=postgresql://cloudcart:CloudCartDB_Pass123!@localhost:5432/cloudcart python app.py ``` API 健康检查: http://localhost:5000/health ### 3. 前端 (终端 2) ``` cd frontend npm install npm run dev ``` App: http://localhost:3000 ### 演示登录 - **admin** / **admin123** - 或在 http://localhost:3000/register 注册 ## 产品图片 产品目录图片的访问路径为: ``` frontend/public/images/products/ ``` 种子数据和产品 API 返回类似 `/images/products/headphones.jpg` 的图片路径。如果在开发中目录图片看起来有缓存滞后,请重启前端服务器或强制刷新浏览器缓存。 ## Kubernetes 部署 ### 前置条件 - 已配置 `kubectl` - 已构建容器镜像并可供目标集群使用 ### 构建镜像 ``` docker build -t cloudcart-backend:latest ./backend docker build -t cloudcart-frontend:latest ./frontend ``` ### 加载到本地 kind/minikube kind load docker-image cloudcart-backend:latest kind load docker-image cloudcart-frontend:latest ### 使用 Helm 部署 ``` helm upgrade --install cloudcart ./helm/cloudcart \ --namespace cloudcart \ --create-namespace \ --wait ``` ### 应用安全策略 ``` # Kyverno policies(audit 模式) kubectl apply -f policies/kyverno/ # KubeArmor policies kubectl apply -f policies/kubearmor/ ``` ## GKE 部署 ### 前置条件 - Google Cloud SDK (`gcloud`) - Terraform >= 1.0 - 启用了结算功能的 GCP 项目 ### 步骤 ``` # 认证 gcloud auth login gcloud config set project YOUR_PROJECT_ID # 配置 Terraform cd terraform cp terraform.tfvars.example terraform.tfvars # 使用你的 project_id 编辑 terraform.tfvars terraform init terraform plan terraform apply # 获取集群凭据 gcloud container clusters get-credentials cloudcart-gke \ --zone us-central1-a --project YOUR_PROJECT_ID # 构建并推送镜像到 GCR/Artifact Registry docker tag cloudcart-backend:latest gcr.io/YOUR_PROJECT_ID/cloudcart-backend:latest docker push gcr.io/YOUR_PROJECT_ID/cloudcart-backend:latest # 部署 helm upgrade --install cloudcart ../helm/cloudcart \ --namespace cloudcart \ --create-namespace \ --set image.backend.repository=gcr.io/YOUR_PROJECT_ID/cloudcart-backend \ --set image.frontend.repository=gcr.io/YOUR_PROJECT_ID/cloudcart-frontend ``` ## CI/CD Pipeline 该 Pipeline 被拆分为几个专注的工作流,而不是一个单一的庞大文件 —— 每个扫描器的工作流都会记录自己真实的成功/失败状态,AI 发布智能 Pipeline(见下文)会直接读取这些状态,而不是进行假设。 | 工作流 | 触发条件 | 产出 | |---|---|---| | `backend-ci.yaml` / `frontend-ci.yaml` | `backend/**` / `frontend/**`,以及 Helm chart 变更 | 构建、单元测试 | | `app-security-scan-backend.yaml` / `-frontend.yaml` | `backend/**` / `frontend/**` | CodeQL, SonarCloud, GitGuardian, Snyk SCA 发现 + `scan_status_*.json` | | `infra-security-scan.yaml` | `helm/**`, `terraform/**` | Checkov, kube-linter, kubeconform 发现 | | `infra-readiness.yml` | 手动 / 定时 | 将基础设施发现合并到 `infra_context.json`,如果不存在精确匹配的提交,则回退到最近一次成功的运行 | | `runtime-security-scan.yaml` | 部署 / 手动 | 针对实时集群的 Kyverno, KubeArmor, ZAP 发现 | | `release-readiness.yaml` | 手动 / 发布 | 将上述内容拉取合并到 `final_release_context.json`,运行 AI 发布智能 Agent,渲染报告 | ### 必需的 Secrets | Secret | 用途 | |--------|---------| | `SNYK_TOKEN` | Snyk 漏洞扫描 | | `SONAR_TOKEN` | SonarCloud 分析 | | `GITGUARDIAN_API_KEY` | GitGuardian 密钥扫描 | | `ANTHROPIC_API_KEY` | AI 发布智能 Agent | 扫描被设计为即使未设置密钥也会产生发现;部分工作流步骤在合适的地方使用了 `continue-on-error`。 ## AI 发布智能平台 上面的每个扫描器都会产生其原始的、特定于工具的输出。该平台将其转化为一个结构化的、基于证据的发布决策 —— 这不是汇总数字的仪表盘,而是一个实际带有引用的推理建议,可追溯到真实的发现。 ### 具象化的基于引用的证据 决定性的限制是 AI 从不重述发现 —— 它只引用发现。在渲染的报告中,每个引用都是一个原生的 `
` 折叠元素,它将一个裸露的 `finding_id` 展开为它所解析到的发现:严重程度、组件、类别和扫描器自己的信息。无需 JavaScript,默认支持访问。 ![One cross-domain correlation with four of its nine evidence chips expanded, each resolving a finding_id to its severity, component, category and scanner message](https://static.pigsec.cn/wp-content/uploads/repos/cas/13/13a75d31abb3eaaa4bdeac2cf9838d8f3d533e52253ca03c01ecb868a9c3b059.png) *与上面相同的卡片,展开了四个引用,另外五个仍然折叠。请注意混合的内容:`f1f751c2ee51` 和 `54c214b711d1` 是针对 Terraform 的 Checkov 发现,`f913039e3a2a` 是实时集群上的 Kyverno 准入失败。一个关联,两个工具,静态和运行时证据并排呈现 —— 并且上面正文中的每一个声明都可以追溯到具体的发现,而不是被改写的。* 在本地从提交的测试夹具重现渲染和引用解析过程 —— 无需集群、无需 API 密钥、无需网络: ``` python3 scripts/demo_report.py --list # 9 scenarios, verdicts from APPROVE to DO_NOT_APPROVE python3 scripts/demo_report.py # renders the real captured run ``` **完整的设计、schema 参考、领域模型和工作流编排图:[ARCHITECTURE.md](ARCHITECTURE.md)** 三层严格分离 —— 安全工具拥有事实,Python 拥有确定性计算,AI 仅拥有推理,人类拥有实际的部署决策: ``` flowchart TD subgraph Tools["Raw security tool output"] T1[Checkov] T2["kube-linter / kubeconform"] T3[CodeQL] T4[SonarCloud] T5[GitGuardian] T6[Snyk SCA] T7[Kyverno] T8[KubeArmor] T9[ZAP] end subgraph Normalize["scripts/normalize_*.py"] N["One canonical Finding shape
(severity, category, type, confidence, finding_id)"] end T1 --> N T2 --> N T3 --> N T4 --> N T5 --> N T6 --> N T7 --> N T8 --> N T9 --> N N --> B1["build_release_context.py
app + runtime findings"] N --> B2["build_infra_context.py
infra + terraform findings"] B1 --> C["compose_release_context.py
merge · assign_domain · compute statistics"] B2 --> C C --> RC[("final_release_context.json
ReleaseContext v1.0 — frozen")] RC --> AI["AI Release Intelligence Agent
run_security_analysis.py
Claude, forced tool-use, schema-validated"] AI --> ER[("executive_report.json
ExecutiveReport v1.0 — frozen")] ER --> R1["render_report.py → Markdown"] ER --> R2["render_html_report.py → HTML"] RC -. resolves finding_id citations .-> R1 RC -. resolves finding_id citations .-> R2 ``` ### 实际验证的内容,基于真实数据 — 而非假设 | 领域 | 状态 | |---|---| | `infrastructure_security` | 在多次真实的 CI 运行中验证 | | `runtime_security` | 在多次真实的 CI 运行中验证 | | `application_security` | **已使用真实数据验证** — 在一次真实运行中包含来自 CodeQL/SonarCloud/GitGuardian/Snyk SCA 的 119 个真实发现,零无效引用,正确的跨领域关联完整性 | | `container_security` | **确认真实发现已成功流转**(在一次真实运行中包含 8 个真实的 CVE)— 验证范围比 `application_security` 窄:确认了数据路径,但尚未专门针对该领域验证 AI 推理/引用的正确性 | ### 测试套件 559 个自动化测试 (`tests/`) — schema 验证、证据引用完整性、跨领域关联完整性、渲染器正确性,以及涵盖 8 个代表性场景的黄金回归数据集。详见 [ARCHITECTURE.md](ARCHITECTURE.md#test-suite)。 ``` pip install -r tests/requirements.txt python3 -m pytest ``` 已知缺陷和完整的领域分配/schema 参考:请参阅 [ARCHITECTURE.md](ARCHITECTURE.md#known-gaps)。 ## API 端点 | 方法 | 端点 | 描述 | |--------|----------|-------------| | POST | `/api/auth/register` | 注册用户 | | POST | `/api/auth/login` | 登录 | | GET | `/api/products/` | 列出产品 | | GET | `/api/products/search?q=` | 搜索 (SQLi) | | GET/POST | `/api/cart/` | 购物车 | | POST | `/api/orders/checkout` | 下单 | | POST | `/api/reviews/` | 创建评论 (XSS) | | GET | `/api/admin/stats` | 管理员统计 (无身份验证) | | POST | `/api/admin/exec` | 命令执行 | | POST | `/api/vuln/fetch` | SSRF | | POST | `/api/vuln/upload` | 文件上传 | | GET | `/metrics` | Prometheus 指标 | ## AI 平台集成 此代码库生成由 **AI 发布智能平台** 使用的发现(见[上方](#ai-release-intelligence-platform))—— 这是一个单一的 AI Agent,它可以综合分析 CodeQL/Snyk/SonarCloud/GitGuardian (应用程序)、Checkov/kube-linter (基础设施) 和 Kyverno/KubeArmor/ZAP (运行时) 的发现,将它们跨领域进行关联,并生成带有引用的、通过 schema 验证的发布就绪建议。这取代了本 README 早期草稿中描述的一系列独立的、假设的未来工具(漏洞分析器、修复专家、PR 审查器等)—— 这些想法已经融合成了上述文档记录的一个真实的、经过验证的系统,而不是以前在这里列出的多个推测性工具。 ## 安全测试示例 ``` # SQL Injection curl "http://localhost:5000/api/products/search?q=' OR '1'='1" # SSRF curl -X POST http://localhost:5000/api/vuln/fetch \ -H "Content-Type: application/json" \ -d '{"url": "http://169.254.169.254/latest/meta-data/"}' # Path Traversal curl "http://localhost:5000/api/vuln/file?path=etc/passwd" # 暴露的 Config curl http://localhost:5000/api/config ``` ## 推送到 GitHub 本仓库故意包含用于培训的易受攻击的代码、薄弱的配置和示例密钥。除非公开暴露是您培训计划的一部分,否则请使用私有仓库。 ``` git add . git commit -m "Initial commit: CloudCart DevSecOps training application" git branch -M main git remote add origin https://github.com/YOUR_ORG/cloudcart.git git push -u origin main ``` 配置 GitHub Actions 密钥 (`SNYK_TOKEN`, `SONAR_TOKEN` 等) 以进行完整的 Pipeline 运行。扫描被设计为即使未设置密钥也会产生发现;部分工作流步骤在合适的地方使用了 `continue-on-error`。 ## 许可证 MIT 许可证 - 见 [LICENSE](LICENSE)。本项目仅用于**教育和安全培训**。请在隔离的环境中负责任地使用。
标签:ASTO, DevSecOps, GPT, LLM防护, 上游代理, 人工智能, 子域名突变, 安全合规, 测试用例, 漏洞管理, 用户模式Hook绕过, 网络代理, 请求拦截