MehdiJ0uh4ri/devsecops-compliance-system
GitHub: MehdiJ0uh4ri/devsecops-compliance-system
一套安全左移的 DevSecOps 管线与 SOC2 合规自动化系统,将 SAST/DAST/SCA/SBOM 扫描、策略即代码门控、最小权限 IAM 生成和审计证据收集整合到每个 PR 的 CI 流程中。
Stars: 0 | Forks: 0
# DevSecOps Pipeline 与合规系统
安全左移与合规即代码:每一个 PR 都会进行扫描,以检查 secrets、
SAST、SCA、容器漏洞以及 IaC 配置错误,只有通过后才能
合并 —— 并且,每一项支持 SOC2 审计的控制措施都会自动生成其专属的
证据,而不是在审计员要求的前一周才让人去拼凑截图。
## 目录说明
| 领域 | 路径 | 亮点 |
|---|---|---|
| **CI pipeline** | [`.github/workflows/pipeline.yml`](.github/workflows/pipeline.yml) | Semgrep (SAST), Trivy + Syft (SCA/SBOM/容器扫描), OWASP ZAP (DAST), OPA/Conftest (策略门控), gitleaks (secrets) — 全部作用于每个 PR |
| **降噪分诊** | [`security/triage/`](security/triage/) | [`triage.py`](security/triage/triage.py) + [`cve-allowlist.yml`](security/triage/cve-allowlist.yml) — 仅在出现 CRITICAL、未修复且不在白名单中的漏洞时才让构建失败 |
| **Secrets** | [`security/secrets/`](security/secrets/) | Pre-commit + CI gitleaks 扫描,外加自动化的 [密钥轮换手册与脚本](security/secrets/rotate-key-runbook.md) |
| **策略即代码** | [`policy/opa/`](policy/opa/) | 禁止 root 容器、强制使用 IMDSv2、禁止 `0.0.0.0/0` 安全组 — 拒绝策略,在 PR 审查时强制执行,每条规则均带有单元测试 |
| **最小权限 IAM** | [`iam/generator/`](iam/generator/) | [`generate_policy.py`](iam/generator/generate_policy.py) 将声明性请求转化为限定范围的策略 + MFA 验证且具有时效性的信任策略 — 拒绝通配符操作 |
| **SOC2 合规** | [`compliance/soc2/`](compliance/soc2/) | 40 项控制措施映射至实现它们的工具/流程,一份[差距分析](compliance/soc2/gap-analysis.md),以及一份[修复路线图](compliance/soc2/remediation-roadmap.md) |
| **证据自动化** | [`compliance/evidence-collector/`](compliance/evidence-collector/) | [`collect_evidence.py`](compliance/evidence-collector/collect_evidence.py) 验证每项控制措施的证据产物是否依然存在,并在几分钟内生成一份审计就绪的包 |
| **扫描目标** | [`sample-app/`](sample-app/), [`k8s/`](k8s/), [`infra/`](infra/) | 供 pipeline 实际运行扫描的最小化 Flask 应用 + Kubernetes/Terraform 清单 |
请参阅 [`docs/architecture.md`](docs/architecture.md) 以获取完整的 pipeline
图表、威胁模型以及 mTLS/零信任网络笔记。
## 快速开始
```
# 本地 pre-commit hooks(镜像 CI gate)
pip install pre-commit
pre-commit install
pre-commit run --all-files
# 针对 Trivy scan 运行 CVE triage engine
pip install pyyaml
trivy image --format json -o trivy-results.json sample-app:local
python security/triage/triage.py --allowlist security/triage/cve-allowlist.yml \
--report-out triage-report.json trivy-results.json
# 生成 least-privilege IAM role
pip install pyyaml jsonschema
python iam/generator/generate_policy.py \
iam/generator/examples/ci-deploy-role-request.yml --out-dir out/
# 运行 policy-as-code 单元测试
opa test policy/opa -v
# 生成 SOC2 evidence package
pip install pyyaml requests
python compliance/evidence-collector/collect_evidence.py \
--control-matrix compliance/soc2/control-matrix.csv --output-dir evidence-package/
```
## 设计原则
1. **对关键问题大声报警,对无关紧要的保持沉默。** CRITICAL、
未修复、不在白名单中的漏洞会阻止合并。传递依赖中的 MEDIUM 级别漏洞
则不会 —— 它会被上报,但不会导致构建中断。相同的逻辑也适用于
DAST (`security/dast/zap-rules.tsv`)。策略即代码是一个刻意的例外:
root 容器、IMDSv1 和完全开放的安全组始终会阻断合并 (参见 [`policy/README.md`](policy/README.md))。
2. **白名单本身也会受到审计。** [`cve-allowlist.yml`](security/triage/cve-allowlist.yml) 中的每个
条目都有负责人和
有效期;过期的条目会恢复为阻断级别,而不是永远被静默忽略。
3. **合规证据是自动生成的,而非人为整理的。** SOC2 控制矩阵
并不是某人在审计前才去更新的电子表格 —— 证据收集器在每次
运行时,都会检查支持每项自动化控制措施的文件/策略/工作流是否依然存在。
4. **最小权限是通过构造强制实现的。** IAM 生成器会直接
拒绝通配符操作,并将会话时效限制 + MFA 编码到
信任策略本身中,而不是将“请缩减权限范围”写在
没人看的 Wiki 页面上。
标签:DevSecOps, IAM权限控制, SOC2合规, 上游代理, 子域名突变, 安全合规, 策略即代码, 网络代理, 聊天机器人安全, 逆向工具