Richonn/ShieldCI

GitHub: Richonn/ShieldCI

一款自动检测技术栈并生成加固 DevSecOps CI/CD 流水线的 GitHub Action,集成安全扫描后直接创建 PR。

Stars: 4 | Forks: 1

# ShieldCI [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/25cf50e34d132931.svg)](https://github.com/Richonn/ShieldCI/actions/workflows/ci.yml) ## 快速开始 **1. 创建一个个人访问令牌**,权限范围包含 `repo` + `workflow`,并将其作为一个密钥(例如 `GH_TOKEN`)存储在你的仓库中。 **2. 将该 action 添加到你的 workflow:** ``` - uses: Richonn/ShieldCI@v1 with: github-token: ${{ secrets.GH_TOKEN }} ``` ShieldCI 将检测你的技术栈,生成相应的 workflows,并创建一个 PR。 ## 输入参数 | Input | Required | Default | Description | |---|---|---|---| | `github-token` | ✅ | — | 用于创建分支和 PR 的 Token | | `language` | ❌ | `auto` | 语言覆盖:`node`, `python`, `java`, `go`, `auto` | | `docker` | ❌ | `auto` | Docker 检测:`true`, `false`, `auto` | | `kubernetes` | ❌ | `false` | 是否包含 K8s 部署 workflow | | `enable-trivy` | ❌ | `true` | 添加 Trivy 镜像扫描任务 | | `enable-gitleaks` | ❌ | `true` | 添加 Gitleaks 密钥扫描任务 | | `enable-sast` | ❌ | `true` | 添加 SAST 任务 (CodeQL 或 Semgrep) | | `sast-tool` | ❌ | `codeql` | SAST 工具:`codeql` 或 `semgrep` | | `branch-name` | ❌ | `shieldci/generated-workflows` | 推送生成的 workflows 的目标分支 | | `pr-title` | ❌ | `[ShieldCI] Add CI/CD DevSecOps pipeline` | PR 标题 | | `dry-run` | ❌ | `false` | 如果为 `true`,将生成的 workflows 打印到 Job Summary,而不创建分支或 PR | | `max-depth` | ❌ | `3` | Monorepo 组件检测的最大目录深度 | ## 输出参数 | Output | Description | |---|---| | `pr-url` | 创建的 pull request 的 URL | | `detected-stack` | 检测到的技术栈(JSON 格式) | | `generated-files` | 生成的文件路径列表(逗号分隔) | ## 在下游步骤中使用输出 ``` - name: Generate pipelines id: shieldci uses: Richonn/ShieldCI@v1 with: github-token: ${{ secrets.GH_TOKEN }} - name: Print detected stack run: | echo "Stack: ${{ steps.shieldci.outputs.detected-stack }}" echo "PR: ${{ steps.shieldci.outputs.pr-url }}" - name: Conditional step based on detected stack if: ${{ fromJson(steps.shieldci.outputs.detected-stack).language == 'go' }} run: echo "Go project detected — run extra Go-specific steps here" ``` ## 支持的技术栈 | Language | CI | Lint | Test | Build | |---|---|---|---|---| | Go | ✅ | golangci-lint | go test -race | go build | | Node.js | ✅ | eslint | jest | npm/yarn build | | Python | ✅ | ruff | pytest | build/poetry | | Java | ✅ | — | mvn/gradle | mvn/gradle | | Rust | ✅ | cargo clippy | cargo test | cargo build | 检测到 Docker 和 Kubernetes 时会自动生成相应的 workflows。 ## 安全工具 - **Gitleaks** — git 历史中的密钥检测 - **Trivy** — 容器漏洞扫描,并将 SARIF 上传至 GitHub Security 标签页 - **CodeQL / Semgrep** — 静态分析 (SAST) - **Syft** — SBOM 生成 ### Semgrep 自定义规则 当设置了 `sast-tool: semgrep` 且目标仓库中不存在 `.semgrep/` 目录时,ShieldCI 会生成一个 `.semgrep/rules/example.yml` 文件,其中包含一个注释过的示例规则以帮助你入门。 如果 `.semgrep/` 已经存在,ShieldCI 将使用你现有的规则 (`--config=.semgrep/`),而不是默认的社区规则集 (`--config=auto`)。 ## Dry-run 模式 设置 `dry-run: "true"` 以在 GitHub Actions Job Summary 中预览生成的 workflows,而无需触碰你的仓库: ``` - uses: Richonn/ShieldCI@v1 with: github-token: ${{ secrets.GH_TOKEN }} dry-run: "true" ``` Job Summary 会将每个生成的 workflow 文件显示为一个 YAML 代码块。不会创建任何分支或 PR。 ## 版本控制 ShieldCI 使用浮动主版本标签(`v1`),该标签始终指向 `v1.x.x` 系列中的最新版本。这意味着 `Richonn/ShieldCI@v1` 会自动获取新功能和修复,而你无需进行任何更改。 浮动标签会在每次新发布时通过 GitHub Actions workflow 自动更新。 如果你需要可复现性,请固定到特定版本: ``` - uses: Richonn/ShieldCI@v1.1.1 ``` ## 使用 Cosign 进行镜像签名 当检测到 `Dockerfile` 时,ShieldCI 会生成一个 Docker workflow,该 workflow 会通过 GitHub Actions OIDC 在无密钥模式下使用 [Cosign](https://github.com/sigstore/cosign) 自动对构建的镜像进行签名。 无需管理密钥或密钥 —— 签名与 GitHub Actions 身份绑定并存储在公开的 [Rekor](https://rekor.sigstore.dev) 透明度日志中。 镜像会被推送到 `ghcr.io//:` 并在构建后立即签名。任何人都可以使用以下命令验证签名: ``` cosign verify ghcr.io//: \ --certificate-identity-regexp="https://github.com//" \ --certificate-oidc-issuer="https://token.actions.githubusercontent.com" ``` ## SBOM 生成 ShieldCI 通过 [Syft](https://github.com/anchore/syft) 生成两种 SBOM workflows: - **`sbom.yml`** — 始终生成,分析仓库源代码和依赖项 - **`sbom-docker.yml`** — 当检测到 `Dockerfile` 时生成,构建镜像并据此生成 SBOM SBOM 文件作为 artifacts 上传,可从 Actions 运行摘要中获取。 ## Monorepo 支持 ShieldCI 通过扫描子目录(深度可配置)自动检测 monorepos。每个检测到的组件会生成一个独立的 workflow,命名为 `-ci.yml`, `-lint.yml` 等。 **支持的 monorepo 布局:** ``` my-monorepo/ ├── backend-services/ │ ├── user-service/ # Go component → user-service-ci.yml │ └── media-service/ # Rust component → media-service-ci.yml └── tools/ └── inspector/ # Python component → inspector-ci.yml ``` 以下目录会自动从扫描中排除:`node_modules`, `vendor`, `dist`, `build`, `target`, `docs`, `scripts` 等。 使用 `max-depth` 调整扫描深度(默认:`3`): ``` - uses: Richonn/ShieldCI@v1 with: github-token: ${{ secrets.GH_TOKEN }} max-depth: '4' ``` ## 路线图 - [x] Rust 支持 - [x] `dry-run` 模式 - [x] 在生成的 workflows 中固定 action SHA - [x] Semgrep 自定义规则支持 - [x] 通过 Syft 生成 SBOM - [x] Monorepo 支持 - [x] 使用 Cosign 进行镜像签名(通过 OIDC 无密钥模式) - [ ] 通过 `slsa-github-generator` 生成 SLSA 来源 - [x] 在生成的 workflows 中进行构建缓存(Go modules, pip/poetry, npm/yarn, maven/gradle) - [x] 在生成的 workflows 中进行多版本矩阵测试 - [ ] OpenSSF Scorecard 集成 - [x] 在生成的 workflows 中使用并发组 (`cancel-in-progress`) ## 许可证 MIT
标签:CI/CD 安全, CodeQL, DevOps 工具, DevSecOps, EVTX分析, GitHub Action, Gitleaks, JS文件枚举, LLM防护, MITM代理, SAST, Semgrep, StruQ, Web截图, WordPress安全扫描, 上游代理, 可视化界面, 子域名突变, 安全专业人员, 安全左移, 安全评估工具, 容器安全, 密钥泄露检测, 工作流自动化, 数据投毒防御, 文档安全, 日志审计, 活动识别, 盲注攻击, 自动化流水线, 请求拦截, 逆向工具, 错误基检测, 镜像扫描, 静态代码分析