用途
devsecops-pipeline 是一个用于 CI/CD 流水线安全建设与评估的技能。它评估当前 CI/CD 流水线在 8 个阶段(Plan → Code → Build → Test → Release → Deploy → Operate → Monitor)的安全成熟度,识别 DevSecOps 缺口,并生成可直接使用的 GitHub Actions 工作流配置、安全门禁策略定义和分阶段实施路线图。
适用时机:
- 为现有 CI/CD 流水线添加安全控制
- 搭建需要从一开始就内置安全的新流水线
- 准备 DevSecOps 成熟度评估或审计
- 跨多个团队或仓库统一安全工具链
前置依赖
工具按阶段引用,只需安装适用于自身技术栈的部分:
- SAST:semgrep(免费)、CodeQL(GitHub 原生)、SonarQube(自托管或云)
- SCA:snyk CLI、trivy、Dependabot(GitHub 原生)
- 密钥扫描:gitleaks
- IaC 扫描:checkov、tfsec
- 容器扫描:trivy、grype + syft
- DAST:zaproxy(OWASP ZAP)、nuclei
- SBOM:syft(CycloneDX/SPDX 输出)、cosign(制品签名)
- 运行时:Falco(Kubernetes)、CSPM 工具(AWS Security Hub、GCP SCC 等)
安装示例(Debian/Ubuntu):
pip install semgrep checkov
brew install gitleaks trivy grype syft cosign nuclei # macOS
# Or: curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh
输入变量
| 变量 | 必填 | 说明 |
|---|---|---|
| SECSKILL_REPO_PATH | 必填 | 仓库根目录路径 |
| SECSKILL_CI_PLATFORM | 可选 | github 或 gitlab(默认:github) |
| SECSKILL_OUTPUT_DIR | 可选 | 输出目录(默认:./devsecops-output) |
| SECSKILL_REGISTRY | 可选 | 用于镜像扫描的容器镜像仓库 URL |
| SECSKILL_IMAGE_NAME | 可选 | 待扫描的容器镜像 name:tag |
工作流程
Step 1:评估当前流水线成熟度
设置仓库、CI 平台与输出目录环境变量,创建成熟度评估文件,然后检测现有流水线文件:查找 .github/workflows 目录(GitHub Actions)与 .gitlab-ci.yml(GitLab CI)。随后逐项检测 CI 配置中是否已集成各安全工具,覆盖内容写入成熟度文件,包括:
- Pre-commit hooks(gitleaks)
- SAST(semgrep/codeql)
- SCA(snyk/trivy)
- IaC scanning(checkov/tfsec)
- Container scan(trivy/grype)
- DAST(zap/nuclei)
- SBOM generation(syft)
- Artifact signing(cosign)
- Runtime monitoring(falco)
关键命令片段:
export REPO="${SECSKILL_REPO_PATH:?Set SECSKILL_REPO_PATH}"
export CI_PLATFORM="${SECSKILL_CI_PLATFORM:-github}"
export OUTDIR="${SECSKILL_OUTPUT_DIR:-./devsecops-output}"
mkdir -p "$OUTDIR"
Step 2:按阶段识别缺口
生成缺口分析文件 gap_analysis.md,并扫描仓库结构补充上下文,例如是否存在 Dockerfile、docker-compose.yml、terraform/infra 目录、.pre-commit-config.yaml、package.json、requirements.txt 或 pyproject.toml、go.mod 等,以确定适用的扫描类型。完整的缺口分析表(覆盖 14 项流水线阶段/控制项,含工具与状态列)参见 REFERENCE.md。
Step 3:生成 CI/CD 配置
输出 GitHub Actions 工作流文件 devsecops-pipeline.yml 与 GitLab CI 片段 gitlab-devsecops.yml。完整模板(密钥扫描、SAST、SCA、IaC、容器扫描、DAST、SBOM + cosign 签名)参见 REFERENCE.md。
Step 4:定义安全门禁策略
生成 security-gate-policies.md,包含硬门禁(失败即阻断)、软门禁(告警 + 例外)以及指标目标。完整策略表参见 REFERENCE.md。
Step 5:输出实施路线图
生成 implementation-roadmap.md。分阶段路线图(5 个阶段,第 1–8 周及后续成熟度事项)参见 REFERENCE.md。
完成时输出文件清单:
- 成熟度评估:maturity_assessment.txt
- 缺口分析:gap_analysis.md
- GitHub Actions CI:devsecops-pipeline.yml
- GitLab CI 片段:gitlab-devsecops.yml
- 安全门禁策略:security-gate-policies.md
- 实施路线图:implementation-roadmap.md
完成标准
- 已对照全部 8 个阶段评估流水线成熟度
- 缺口分析表已填入当前工具覆盖情况
- CI/CD 配置文件已生成并保存
- 已定义含硬门禁与软门禁的安全门禁策略
- 已在输出目录创建分阶段实施路线图
失败模式
| 现象 | 原因 | 解决方式 |
|---|---|---|
| 未检测到 CI 配置 | 新仓库尚无流水线 | 使用生成的文件作为起点 |
| gitleaks 阻断提交 | 暂存文件中存在真实密钥 | 轮换凭据,再用 git filter-repo 从历史中移除 |
| Semgrep 超时 | 大型 monorepo | 添加 .semgrepignore 排除 vendored/生成代码 |
| ZAP 扫描找不到目标 | 未设置 DAST_TARGET_URL | 在 CI 环境设置中配置该变量 |
| cosign 签名失败 | 无 OIDC token | 确保 GitHub Actions job 具备 id-token: write 权限 |
| Trivy DB 过期 | 离线环境 | 用 trivy image --download-db-only 预拉取并缓存 DB |
注意事项
- 仅从 Phase 1 开始——一次性加入所有门禁会导致告警疲劳和流水线弃用。
- 先在审计模式(非阻断)下调优 SAST 规则 2 周,再启用硬门禁。
- SBOM 生成是供应链合规的前提(参见 supply-chain-audit 技能)。
- 如需 SLSA 合规,可将本技能与 supply-chain-audit 技能配合使用。
- devsecops-output/ 中的流水线配置为模板——提交前请审查并调整严重性阈值、语言矩阵和目标 URL。