BjarneRentz/central-cyclone

GitHub: BjarneRentz/central-cyclone

围绕 cdxgen 构建的集中式 SBOM 生成与上传服务,通过统一配置文件批量管理多个仓库的软件物料清单,免除逐个仓库搭建流水线的繁琐工作。

Stars: 9 | Forks: 0

# 中心气旋 🌪️ Central Cyclone 是一个围绕 [cdxgen](https://github.com/CycloneDX/cdxgen) 构建的集中式 SBOM (软件物料清单) 生成服务。它可以被配置为分析和上传多个仓库及多个目标的结果,这样您就不必为每个仓库单独创建流水线。这类似于 Renovate 可以被配置为管理多个仓库的方式。 []() ## 目录 - [功能](#features) - [用法](#usage) - [配置](#configuration) - [命令](#commands) - [环境变量](#environment-variables) - [示例](#example) - [路线图](#roadmap) - [贡献与支持](#contributing--support) - [开发环境设置](#development-setup) - [DevContainer](#devcontainer) - [本地机器](#local-machine) - [AI 免责声明](#ai-disclaimer) ## 功能 - 为多个仓库/项目提供集中式 SBOM 生成 - 上传至 [DependencyTrack](https://dependencytrack.org) - 配置驱动:在单一配置文件中管理所有目标 - 提供用于轻松实现自动化的命令行界面 ## 用法 ### 配置 在一个 JSON 配置文件中定义您的目标和设置。有关配置示例,请参见 `exampleConfig.json`。它看起来像这样 ``` { "dependencyTrack": { "url": "http://apiserver:8080" }, "repositories": [ { "url": "https://github.com/BjarneRentz/obsidian-gemini-generator.git", "targets": [ { "projectId": "2fbbfb99-132e-4e8d-b253-4aa8d58aa505", "type": "node", "directory": "web" }, { "projectId": "2fbbfb99-132e-3d8d-b253-4aa8d58aa505", "type": "java" } ] } ], "applications": [ { "name": "My-App", "type": "node", "projects": [ { "name": "My-App - Dev", "version": "Dev", "isLatest": true }, { "name": "My-App - Prod", "version": "Prod", "isLatest": false } ] } ] } ``` 配置文件中的 `dependencyTrack` 部分**是强制性的**,同时设置 `DEPENDENCYTRACK_API_KEY` 环境变量也是必须的。有关更多详细信息,请参阅 [环境变量](#environment-variables) 部分。 您可以为单个仓库配置多个*目标*。这对于 monorepo(单一仓库)非常有用,在这种情况下,不同的编程语言或项目在同一个仓库下进行管理。您可以在 [cdxgen 文档](https://cyclonedx.github.io/cdxgen/#/PROJECT_TYPES) 中找到所有支持的目标。 如果您的项目包含多个相同类型的子项目。您可以使用可选的 `directory` 属性指定仓库中的子目录。 新的 `applications` 块是可选的,可用于定义应用程序。一个应用程序可以包含多个*项目*。每个项目代表 DependencyTrack 中的一个项目。 这个概念将在未来的更新中使用,以启用 GitOps 模式,在该模式下,central cyclone 将监控您的 GitOps 仓库,并为您环境中部署的版本创建 SBOM。 ### 命令 #### 全局参数 |参数| 快捷方式| 描述| |-|-|-| |`--config`| `-c`| 配置文件的路径| #### 分析已配置的仓库 `analyze` 命令会克隆并分析所有已配置的仓库中定义的目标。生成的 SBOM 会被保存在 `~/.central-cyclone/workfolder/sboms` 路径下,或者直接上传。 ``` analyze ``` - `-c path-to-config`:配置 JSON 文件的路径。 - `--upload`:可选,上传生成的 SBOM 而不是保存它们。 #### 上传 upload 命令可用于上传由 analyze 命令生成的 SBOM 文件。这在受限制的网络环境中非常有用。您可以使用两阶段流水线,首先在云端 Agent 上分析项目,然后使用自托管 Agent 上传生成的 SBOM。 需要注意的是,Central Cyclone 只能上传由相同版本的 Central Cyclone 创建的 SBOM。Central Cyclone 不会将*原始的* SBOM 保存为 JSON,而是将其与一些元数据(如 DependencyTrack Project Id)包装在一起保存。 ``` upload ``` - `-c path-to-config`:配置 JSON 文件的路径。 - `--sboms-dir`:必填,包含所有待上传 SBOM 的目录路径。 ` #### 将项目与 DependencyTrack 同步 您可以使用 central cyclone 来创建和同步 DependencyTrack 项目。但是,此功能并非“配置即代码”解决方案。如配置中所述,它只会同步为应用程序定义的项目。这将在以后用于 central cyclone 的 GitOps 模式。 使用此命令触发同步: ``` dt projects sync ``` - `-c path-to-config`:配置 JSON 文件的路径 该命令只会在项目不存在时创建它们。现有项目既不会被删除也不会被更新。 ### Docker 镜像 我们在 GitHub 的 Packages 部分提供了官方的 Docker 镜像。建议使用 Docker 镜像来运行 Central-Cyclone,因为它已经包含了所有依赖项,例如 `git` 和 `cdxgen`。 要使用它,请按照上述说明创建一个配置并将其挂载到容器中。只需确保传递给 analyze 命令的路径与挂载的路径相匹配: ``` docker run \ -v ./myConfig.json:/config/config.json \ -e DEPENDENCYTRACK_API_KEY=MY_API_KEY \ ghcr.io/bjarnerentz/central-cyclone:latest analyze -c /config/config.json ``` 提取 `analyze` 命令生成的 SBOM 的最简单方法是挂载 central cyclone 的工作文件夹。 工作文件夹位于 home 目录下,对于当前的 Docker 镜像,此目录为 `\root`。 ``` docker run \ -v ./myConfig.json:/config/config.json \ -v ./sboms:/root/.central-cyclone/workfolder/sboms \ -e DEPENDENCYTRACK_API_KEY=MY_API_KEY \ ghcr.io/bjarnerentz/central-cyclone:latest analyze -c /config/config.json ``` ### 克隆私有仓库 **支持的平台:** 目前,此功能已在 GitHub 和 Azure DevOps 上进行了测试。如果您成功在其他平台上使用了它,请告诉我们! **URL 转换示例:** GitHub: https://github.com//.git ⟶ https://@github.com//.git Azure DevOps: https://dev.azure.com///_git/ ⟶ https://@dev.azure.com///_git/ **注意:** 对于 GitHub,请使用细粒度的个人访问令牌。选择您想要克隆的仓库,并添加 *Contents* 权限设为只读。 对于 Azure DevOps,请使用具有 "Code" 读取权限的 PAT。 如果您遇到任何问题或需要支持其他平台,请提出 Issue,以便我们在未来的版本中进行改进。 另请查阅文档中可用的流水线变量,例如 Azure Devops 中的 [`System.AccessToken`](https://learn.microsoft.com/de-de/azure/devops/pipelines/build/variables?view=azure-devops&tabs=yaml#systemaccesstoken),以避免使用长期有效的令牌。 ## 环境变量 - `DEPENDENCYTRACK_API_KEY`(必填):用于与 Dependency-Track 进行身份验证的 API key。 - `GIT_TOKEN`(可选)可设置为用于克隆私有仓库。 该 API key 仅需要具有项目的 BOM-Upload 权限。Central Cyclone 不会在 DependencyTrack 中为您创建项目。 ## 示例 有关最小可用的配置,请参见 `exampleConfig.json`。 ## 路线图 - 支持 GitOps:自动为应用程序已部署的版本创建 SBOM。 ## 贡献与支持 如有任何问题、议题或贡献,请在 GitHub 上提出 Issue 或 Pull Request。 ### 开发环境设置 #### DevContainer 本项目附带了一个 DevContainer 设置,其中附带了所有必需的依赖项: - git - cdxgen - DependencyTrack 首次启动时,您可以使用用户名 `admin` 和密码 `admin` 在 `http://localhost:8080` 登录 DependencyTrack。之后,系统会提示您更改 `admin` 用户的默认密码。DevContainer 配置为使用一个卷来保存 DependencyTrack 的数据,因此将会持久化保存新密码。 接下来,创建一个项目和一个供 Central Cyclone 使用的新团队及 API key。有关这方面的更多详细信息,请参阅官方的 [DependencyTrack 文档](https://docs.dependencytrack.org)。 #### 本地机器 如果您不想使用 DevContainer,请确保 Central Cyclone 可以通过您的 `PATH` 访问以下工具: - git - cdxgen 并且能够访问到 DependencyTrack 实例。 ## AI 免责声明 本项目是在 AI 的辅助下创建的。您可以自由地让 AI 协助您处理 Pull Request,但请您务必自行审查更改。
标签:cdxgen, CycloneDX, DependencyTrack, DevSecOps, EVTX分析, GNU通用公共许可证, GPT, JSON配置, MITM代理, Node.js, SBOM, SBOM上传, SBOM生成, 上游代理, 代码分析, 凭证管理, 占用监测, 安全合规, 开源框架, 开源组件管理, 持续集成, 文档结构分析, 漏洞管理, 硬件无关, 网络代理, 网络安全研究, 网络调试, 自动化, 请求拦截, 资产管理, 跌倒检测, 软件物料清单, 集中化