Hrushi-d/Secure-CI

GitHub: Hrushi-d/Secure-CI

Secure-CI 是一个将 DevOps 流程转化为 DevSecOps 流程的自动化工具。

Stars: 7 | Forks: 0

# 🔒 安全CI [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/6502537840040904.svg)](https://github.com/Hrushi-d/Secure-CI/actions/workflows/ci.yml) [![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE) [![Release](https://img.shields.io/github/v/release/Hrushi-d/Secure-CI)](https://github.com/Hrushi-d/Secure-CI/releases) [![OSS](https://img.shields.io/badge/tools-100%25%20OSS-green)](https://github.com/Hrushi-d/Secure-CI#the-stack) 为独立开发者、独立黑客、副项目、初创公司、开源维护者, 以及任何希望在第一天就获得生产级容器安全而无需购买任何东西或运行任何基础设施的人。 **👉 急于使用?** 跳转到 [QUICKSTART.md](QUICKSTART.md) — 3 步,2 分钟。 ## 栈 | 层 | 工具 | 为什么 | | --- | --- | --- | | CI | **GitHub Actions** | 公共仓库免费,内置 OIDC | | 机密扫描 | **gitleaks** | 开源标准,快速,误报率低 | | SAST | **semgrep** | 最大的开源规则集,覆盖 OWASP/CWE | | SCA + IaC | **trivy fs** | 一个扫描器用于依赖项、Dockerfile、K8s、Terraform | | 容器扫描 | **trivy image** | 同样的引擎,无需学习第二个工具 | | SBOM | **syft** (CycloneDX) | OWASP 支持的 SBOM 格式 | | 图像签名 | **cosign keyless** | Sigstore + GitHub OIDC,无需管理密钥 | | 仓库 | **GHCR** | 免费,身份集成,原生 OIDC | 全部免费。全部开源。无需创建账户。 ## 它是如何工作的 ``` flowchart LR subgraph DEV["👤 What YOU do — once, ~10 lines of YAML"] direction TB D1[Write your
Dockerfile] D2[Add ci.yml
calling SecureCI] D3[git push] D1 --> D2 --> D3 end subgraph SECURECI["🔒 What SecureCI does — every push, automatic"] direction LR B[🔑 gitleaks
secrets] C[🔍 semgrep
SAST] E[🛡️ trivy fs
SCA + IaC] F[🐳 docker build] G[🔵 trivy image
CVE scan] H[📋 syft
SBOM CycloneDX] I[🔏 cosign
keyless sign + attest] B --> C --> E --> F --> G --> H --> I end subgraph OUT["📦 What you GET — free, automatic"] direction TB O1[(GHCR signed image
:sha + :latest)] O2[GitHub Security tab
SARIF findings] O3[(Sigstore Rekor
signature + SBOM attestation)] end D3 ==> B I ==> O1 E -. SARIF .-> O2 G -. SARIF .-> O2 I -. attest .-> O3 classDef dev fill:#475569,stroke:#475569,color:#fff classDef sec fill:#16a34a,stroke:#16a34a,color:#fff classDef out fill:#f1f5f9,stroke:#475569,stroke-width:2px,color:#1e293b ``` **底线:** 开发者编写 1 个 Dockerfile + 10 行 YAML。SecureCI 处理 8 个安全关卡、签名、SBOM 和发布 — 每次推送,永远如此。 ## 解决了什么问题 这句话对大多数开发者和小型团队来说都是真的。SecureCI 通过三种方式解决这个问题: 1. **您不需要选择工具。** 为您选择了有见地的开源选择(gitleaks、semgrep、trivy、syft、cosign)。 2. **您不需要连接它们。** 一个可重用的工作流程来完成它;您在 ~10 行 YAML 中引用它。 3. **您不需要操作基础设施。** GitHub Actions 运行它,GHCR 存储它,Sigstore 签名它。**每月 $0**,无需服务器。 它还为您提供了大多数副项目从未得到的东西:**供应链信任**。 任何拉取您镜像的人都可以运行 `cosign verify` 并证明 *这个确切的 镜像是由您的 GitHub Actions、从您的仓库、在您的主分支上构建的* — 没有人 else。与 Kubernetes、Helm 和 distroless 一起提供的相同属性。 ## 帮助的对象 | 受众 | 他们得到什么 | | --- | --- | | 👤 独立开发者 | 每个副项目从第一天开始就有企业级扫描和签名。 | | 🚀 初创公司(A 轮前) | 在您负担得起安全工程师之前,就有真正的 DevSecOps。审计员喜欢它。 | | 🎓 学生/学习者 | SBOM、无密钥签名和供应链安全的实际参考。 | | 🔧 开源维护者 | 您发布的镜像变得 *可验证* — 用户可以证明二进制文件来自您的仓库。 | | 📋 正在试点 DevSecOps 的团队 | 在购买商业工具之前,以无风险的方式展示价值。 | 有关详细说明,请参阅 [docs/PROBLEM.md](docs/PROBLEM.md)。 新接触 DevSecOps?[docs/DEVSECOPS-101.md](docs/DEVSECOPS-101.md) 解释了 8 个 安全类别、您所听说的商业工具,以及 SecureCI 使用的免费 OSS 等效工具。 ## 它是如何工作的 在每次推送时,位于 [`.github/workflows/secureci.yml`](.github/workflows/secureci.yml) 的可重用工作流程按顺序运行这些关卡。如果任何一个失败,则不会发布任何内容。 | # | 步骤 | 工具 | 检查内容 | | - | --- | --- | --- | | 1 | 🔑 机密 | gitleaks | 没有AWS密钥、令牌、密码泄漏到git中 | | 2 | 🔍 SAST | semgrep | 不安全的代码模式(SQLi、XSS、硬编码凭据) | | 3 | 🛡️ SCA + IaC | trivy fs | 易受攻击的依赖项 + 配置错误的 Terraform / K8s | | 4 | 🐳 构建 | docker build | 构建您的容器镜像 | | 5 | 🔵 图像扫描 | trivy image | 最终镜像中的高/关键 CVE | | 6 | 🚦 关卡检查 | GitHub Actions | 聚合扫描结果,如果任何必需的检查失败则阻止发布/签名 | | 7 | 📋 SBOM | syft (CycloneDX) | 镜像中每个库的成分清单 | | 8 | 📦 发布 | GHCR | 将签名的、证明的镜像推送到 `ghcr.io/Hrushi-d/` | | 9 | 🔏 签名 | cosign keyless | 通过 Sigstore + GitHub OIDC 签名镜像(无需管理密钥) | 所有发现都作为 SARIF 上传到您的仓库的 **安全选项卡**,因此分类只需单击一下。您可以使用 [scripts/local-scan.sh](scripts/local-scan.sh) 在您的笔记本电脑上运行相同的关卡。 ## 仓库布局 ``` secureci/ ├── .github/ │ ├── workflows/ │ │ ├── secureci.yml # The reusable workflow (the paved road) │ │ └── ci.yml # Sample consumer: builds the sample apps │ └── dependabot.yml # Auto-bumps actions / deps / base images ├── scripts/ │ └── local-scan.sh # Run the same gates on your laptop ├── samples/ │ ├── java/ # Java consumer (multi-stage Dockerfile) │ └── node/ # Node consumer ├── docs/ │ ├── PROBLEM.md # The problem this project solves │ ├── DEVSECOPS-101.md # Primer: categories, tools, free alternatives │ └── verifying-signed-images.md # How users verify your signed images ├── QUICKSTART.md # 3-step CI setup ├── CHANGELOG.md ├── SECURITY.md ├── LICENSE └── README.md ``` ## 关于安全选项卡发现 安全选项卡中的所有警报都是 `node:20-alpine` 基础镜像中 npm 自带的捆绑依赖项内的 CVE — 不是在示例应用程序代码中。这是故意的。 SecureCI 的 trivy 关卡捕获了大多数管道从未扫描的基础镜像中隐藏的漏洞。即使是 "Hello World" Node 应用程序也有 15 个隐藏在基础镜像中的高 CVE。这正是关卡 5 存在要解决的问题。 ## 快速入门 — 在您自己的仓库中使用它 完整的 3 步说明位于 **👉 [QUICKSTART.md](QUICKSTART.md)**。 简而言之: ``` # .github/workflows/ci.yml 在您的仓库中 jobs: secureci: uses: Hrushi-d/Secure-CI/.github/workflows/secureci.yml@v1 with: image-name: ghcr.io/${{ github.repository }} permissions: contents: read packages: write id-token: write security-events: write ``` 提交,推送,并查看 **操作** 选项卡。在绿色运行后,您将在 `ghcr.io/Hrushi-d/:` 获取签名的镜像以及 `:latest`,**安全** 选项卡中的 SARIF 发现,以及作为工作流程工件的风暴DX SBOM。 ## 在您的笔记本电脑上尝试它(无需 CI) ``` # 1. 安装工具一次 brew install gitleaks semgrep trivy # macOS # (Linux:查看每个官方安装程序) # 2. 克隆并扫描包含 Dockerfile 的任何项目文件夹 git clone https://github.com/Hrushi-d/Secure-CI.git cd secureci ./scripts/local-scan.sh samples/java ./scripts/local-scan.sh /path/to/your/own/project ``` 报告将出现在 `/.secureci-reports/`。 ## 验证签名的镜像(供您的用户使用) ``` cosign verify ghcr.io/Hrushi-d/: \ --certificate-identity-regexp "https://github.com/Hrushi-d/.*" \ --certificate-oidc-issuer https://token.actions.githubusercontent.com ``` 完整说明请参阅 [docs/verifying-signed-images.md](docs/verifying-signed-images.md). ## 扩展它 — 添加或交换安全工具 8 个默认关卡是 **有见地的,不是锁定的**。工作流程是纯 GitHub Actions YAML,因此您可以添加、替换或删除任何阶段。一些常见的升级: | 您想添加… | 工具 | 适合位置 | | --- | --- | --- | | 许可证合规性 | **scancode-toolkit** 或 **trivy --scanners license** | SCA 之后 | | 更严格的 SAST(付费 OSS 规则) | **semgrep --config p/owasp-top-ten** 或 **CodeQL** (`.github/codeql-action`) | 替换步骤 2 | | 容器最佳实践 linting | **hadolint** (Dockerfile) + **dockle** | 构建之前 | | 运行时/行为扫描 | **Falco** 规则嵌入到镜像中 | 构建后 | | 策略即代码关卡 | **OPA / conftest** 在 K8s 清单中 | 发布之前 | | 更强的机密覆盖 | **trufflehog** 与 gitleaks 一起 | 步骤 1 | | 集群准入验证 | **Kyverno** 或 **sigstore policy-controller** | 在您的集群上 | | 原因(SLSA 级别 3) | **slsa-github-generator** | 替换/增强 cosign 步骤 | | 在 PR 上进行依赖项审查 | **actions/dependency-review-action** | 新的 PR 仅作业 | **如何实际添加一个** — 只需编辑 [`.github/workflows/secureci.yml`](.github/workflows/secureci.yml) 并 插入一个步骤。例如,添加 hadolint: ``` - name: Dockerfile lint (hadolint) uses: hadolint/hadolint-action@v3.1.0 with: dockerfile: ${{ inputs.dockerfile }} failure-threshold: warning ``` 因为工作流程是基于 `workflow_call` 的,所以每个消费者仓库都会在下次推送时自动获取新的关卡 — **一次铺路升级,每个项目都受益。** 这就是整个模式的目的。 需要这里没有的工具?打开一个问题或 PR — 添加免费、开源且不需要外部账户的功能是合适的。 ## 它不是什么 - 一旦您扩展,它不是真正的安全计划的替代品。 - 它不是代码审查或威胁建模的替代品。 - 它不是一种神奇地使不安全代码安全的方法 — 它捕获了明显的 类别的错误,快速且一致。 ## 在您的 CD 管道中的位置 SecureCI 是一个 **CI-side** 工具 — 它停在 "在 GHCR 中的签名镜像"。您使用什么来部署该镜像从那里开始。 ## 许可证 Apache License 2.0
标签:DevSecOps, GitHub Actions, LLM防护, Web截图, XML 请求, YAML, 上游代理, 二进制发布, 代码安全, 安全合规, 安全库, 安全开发, 安全配置管理, 容器安全, 开源工具, 开源框架, 持续交付, 持续集成, 漏洞枚举, 结构化查询, 网络代理, 自动化安全, 自动笔记