idlab-discover/aibomgen-cli

GitHub: idlab-discover/aibomgen-cli

一款用 Go 编写的命令行工具,通过扫描代码仓库自动发现 Hugging Face 模型与数据集的使用情况,生成 CycloneDX 标准的 AI/ML 物料清单并支持漏洞扫描与 SBOM 合并。

Stars: 4 | Forks: 1

# AIBoMGen CLI [![构建 + 单元测试](https://img.shields.io/github/actions/workflow/status/idlab-discover/aibomgen-cli/build.yml?label=Build+%2B+Unit+Tests)](https://github.com/idlab-discover/aibomgen-cli/actions/workflows/build.yml) [![扫描集成](https://img.shields.io/github/actions/workflow/status/idlab-discover/aibomgen-cli/integration.yml?label=Scan+Integration)](https://github.com/idlab-discover/aibomgen-cli/actions/workflows/integration.yml) [![Go 版本](https://img.shields.io/badge/go-1.25+-00ADD8?logo=go)](go.mod) [![Go 参考](https://img.shields.io/badge/pkg.go.dev-reference-007d9c?logo=go&logoColor=white)](https://pkg.go.dev/github.com/idlab-discover/aibomgen-cli) [![Go 报告卡](https://img.shields.io/badge/go%20report-A%2B-brightgreen?logo=go&logoColor=white)](https://goreportcard.com/report/github.com/idlab-discover/aibomgen-cli) [![GitHub 发布](https://img.shields.io/github/v/release/idlab-discover/aibomgen-cli)](https://github.com/idlab-discover/aibomgen-cli/releases) [![许可证](https://img.shields.io/github/license/idlab-discover/aibomgen-cli)](LICENSE) [![Go 报告卡](https://goreportcard.com/badge/github.com/idlab-discover/aibomgen-cli)](https://goreportcard.com/report/github.com/idlab-discover/aibomgen-cli) 扫描代码仓库以查找 **Hugging Face 模型和数据集使用情况**,并生成 **CycloneDX AI 物料清单 (AIBOM)** 的 Go CLI 工具。 ## 安装说明 ### 使用 `go install` 需要 Go: ``` go install github.com/idlab-discover/aibomgen-cli@latest ``` 确保 `$HOME/go/bin` 在您的 `PATH` 中,然后验证: ``` aibomgen-cli --help ``` **卸载:** ``` rm "$(go env GOPATH)/bin/aibomgen-cli" hash -r # refresh shell command cache ``` ### 从发布归档文件安装(首选) ``` VERSION=0.2.0 # replace with the desired version (without leading 'v') OS=$(uname -s | tr '[:upper:]' '[:lower:]') # linux, darwin ARCH=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/') # amd64, arm64 curl -L -o aibomgen-cli_${VERSION}_${OS}_${ARCH}.tar.gz \ https://github.com/idlab-discover/aibomgen-cli/releases/download/v${VERSION}/aibomgen-cli_${VERSION}_${OS}_${ARCH}.tar.gz tar -xzf aibomgen-cli_${VERSION}_${OS}_${ARCH}.tar.gz chmod +x aibomgen-cli sudo mv aibomgen-cli /usr/local/bin/aibomgen-cli hash -r # refresh shell command cache without opening a new terminal ``` **卸载:** ``` sudo rm /usr/local/bin/aibomgen-cli rm -f ~/.local/share/bash-completion/completions/aibomgen-cli hash -r # refresh shell command cache ``` ### 从源码安装 ``` go test ./... go build -o aibomgen-cli . aibomgen-cli --help ``` **卸载:** ``` rm ./aibomgen-cli ``` ## 配置优先级 设置可以来自多个来源。优先级顺序(从低到高)为: 1. **内置默认值**:代码中硬编码的值 2. **配置文件**:来自 `~/.aibomgen-cli.yaml` 或 `./config/defaults.yaml` 的值(或使用 `--config` 设置的自定义路径) 3. **环境变量**:`AIBOMGEN_*` 前缀(例如,`AIBOMGEN_GENERATE_HF_TOKEN`) 4. **命令行标志**:`--flag` 参数(最高优先级) 每一层都会覆盖其下层的设置。例如: ``` # 1. 代码中的默认值(如果已设置) # 2. 配置文件中的值(如果存在) generate: hf-token: "hf_config_value" # 3. 环境变量(如果已设置) export AIBOMGEN_GENERATE_HF_TOKEN="hf_env_value" aibomgen-cli generate -m gpt2 # 结果:使用 env_value # 4. 显式标志(始终优先) aibomgen-cli generate -m gpt2 --hf-token hf_flag_value # 结果:使用 flag_value(忽略环境变量和配置文件) ``` 带有短横线的配置键在环境变量名称中会转换为下划线: - `generate.hf-token` → `AIBOMGEN_GENERATE_HF_TOKEN` - `scan.hf-mode` → `AIBOMGEN_SCAN_HF_MODE` - `enrich.log-level` → `AIBOMGEN_ENRICH_LOG_LEVEL` ## 命令 ### `scan` 遍历目录以查找与 AI 相关的导入,支持 Python、YAML、JSON、Markdown、shell、Dockerfile 和 JavaScript/TypeScript 文件。为检测到的每个模型写入一个 AIBOM。默认情况下,来自 Hugging Face tree API 的安全扫描数据会嵌入到每个 BOM 中。 ``` aibomgen-cli scan -i targets/target-2 aibomgen-cli scan -i targets/target-3 --format xml --hf-mode online aibomgen-cli scan -i targets/target-1 --no-security-scan ``` 默认情况下,这会在 `dist/` 目录下写入 JSON 文件,文件名派生自模型 ID,例如: - `dist/google-bert_bert-base-uncased_aibom.json` - `dist/templates_model-card-example_aibom.json` 选项: - `--input, -i `:要扫描的目录(默认:当前目录;不能与 `--hf-mode=dummy` 一起使用) - `--output, -o `:输出文件路径(使用目录部分) - `--format, -f json|xml|auto`(默认:`auto`) - `--spec `:输出的 CycloneDX 规范版本(例如,`1.4`、`1.5`、`1.6`) - `--hf-mode online|dummy`(默认:`online`) - `--hf-token `:用于受限/私有模型 - `--hf-timeout ` - `--no-security-scan`:跳过获取 Hugging Face 安全扫描树 - `--log-level quiet|standard|debug` ### `generate` 从直接指定的或通过交互式模型浏览器选择的一个或多个 Hugging Face 模型 ID 生成 AIBOM。默认情况下,安全扫描数据会嵌入到 BOM 中。当您想从源目录检测模型时,请改用 `scan`。 ``` aibomgen-cli generate -m google-bert/bert-base-uncased aibomgen-cli generate -m gpt2 -m meta-llama/Llama-3.1-8B aibomgen-cli generate --interactive ``` 选项: - `--model-id, -m `:Hugging Face 模型 ID(可以多次指定或以逗号分隔) - `--interactive`:打开交互式模型选择器(不能与 `--model-id` 一起使用) - `--output, -o `:输出文件路径(使用目录部分) - `--format, -f json|xml|auto`(默认:`auto`) - `--spec `:输出的 CycloneDX 规范版本(例如,`1.4`、`1.5`、`1.6`) - `--hf-mode online|dummy`(默认:`online`) - `--hf-token `:用于受限/私有模型 - `--hf-timeout ` - `--no-security-scan`:跳过获取 Hugging Face 安全扫描树 - `--log-level quiet|standard|debug` ### `validate` 验证现有的 AIBOM 文件 (JSON/XML),运行完整性检查,并可以在严格模式下失败。 ``` aibomgen-cli validate -i dist/google-bert_bert-base-uncased_aibom.json aibomgen-cli validate -i dist/google-bert_bert-base-uncased_aibom.json --strict --min-score 0.5 ``` 选项: - `--input, -i `:AIBOM 文件的路径(必需) - `--format, -f json|xml|auto` - `--strict`:遇到缺失的必填字段时失败 - `--min-score 0.0-1.0`:可接受的最低完整性得分 - `--check-model-card`:验证模型卡字段(默认:`false`) - `--log-level quiet|standard|debug` ### `completeness` 使用元数据字段注册表计算并打印现有 AIBOM 的完整性得分。对模型组件和任何链接的数据集组件进行评分。 ``` aibomgen-cli completeness -i dist/google-bert_bert-base-uncased_aibom.json ``` 选项: - `--input, -i `:AIBOM 文件的路径(必需) - `--format, -f json|xml|auto` - `--plain-summary`:打印单行机器可读的摘要(无样式) - `--log-level quiet|standard|debug` ### `enrich` 通过交互式填充缺失的元数据字段或从 YAML 配置文件来丰富现有的 AIBOM。可以选择在提示之前从 Hugging Face 重新获取最新的元数据。 ``` aibomgen-cli enrich -i dist/google-bert_bert-base-uncased_aibom.json aibomgen-cli enrich -i dist/google-bert_bert-base-uncased_aibom.json --strategy interactive aibomgen-cli enrich -i dist/google-bert_bert-base-uncased_aibom.json --strategy file --file config/enrichment.yaml ``` 选项: - `--input, -i `:现有 AIBOM 的路径(必需) - `--output, -o `:输出文件路径(默认:覆盖输入文件) - `--format, -f json|xml|auto`:输入 BOM 格式 - `--output-format json|xml|auto`:输出 BOM 格式(默认:与输入相同) - `--spec `:输出的 CycloneDX 规范版本 - `--strategy interactive|file`(默认:`interactive`) - `--file `:用于基于文件丰富的丰富配置文件(默认:`./config/enrichment.yaml`) - `--required-only`:仅丰富必填字段 - `--min-weight `:用于丰富字段的最低权重阈值 - `--refetch`:在丰富之前从 Hugging Face Hub 重新获取模型元数据 - `--no-preview`:在保存之前跳过预览 - `--hf-token `:Hugging Face API token(用于重新获取) - `--hf-base-url `:Hugging Face 基础 URL(用于重新获取) - `--hf-timeout `:Hugging Face API 超时时间(用于重新获取) - `--log-level quiet|standard|debug` ### `vuln-scan` 从 Hugging Face Hub 获取现有 AIBOM 中引用的每个模型和数据集组件的逐文件安全扫描结果,并显示漏洞报告。涵盖的扫描器包括 Cisco Foundation AI (ClamAV)、ProtectAI、HuggingFace Pickle Scanner、VirusTotal 和 JFrog Research。 可以选择使用 `--enrich` 将发现的结果作为 CycloneDX `BOM.Vulnerabilities` 重新注入回 AIBOM。 ``` aibomgen-cli vuln-scan -i dist/google-bert_bert-base-uncased_aibom.json aibomgen-cli vuln-scan -i dist/google-bert_bert-base-uncased_aibom.json --enrich aibomgen-cli vuln-scan -i dist/google-bert_bert-base-uncased_aibom.json --enrich --no-preview ``` 选项: - `--input, -i `:现有 AIBOM 的路径(必需) - `--output, -o `:设置 `--enrich` 时的输出路径(默认:覆盖输入文件) - `--format, -f json|xml|auto`:输入 BOM 格式 - `--output-format json|xml|auto`:输出 BOM 格式 - `--spec `:输出的 CycloneDX 规范版本 - `--enrich`:将发现的漏洞重新注入回 AIBOM - `--interactive`:在保存前显示确认提示(默认:`true`,仅与 `--enrich` 相关) - `--no-preview`:跳过确认提示(仅与 `--enrich` 一起使用时) - `--hf-token `:Hugging Face API token - `--hf-base-url `:Hugging Face 基础 URL 覆盖 - `--hf-timeout `(默认:`15`) - `--log-level quiet|standard|debug` ### `merge` **[测试版]** 将一个或多个 AIBOM 与来自不同来源(例如 Syft、Trivy)的现有 SBOM 合并为一个全面的 BOM。 SBOM 的应用程序元数据将作为主要组件保留,而来自 AIBOM 的 AI/ML 模型和数据集组件将添加到组件列表中。 ``` # 1. 使用 Syft 为软件依赖项生成 SBOM syft scan . -o cyclonedx-json > sbom.json # 2. 使用 AIBoMGen 为 AI/ML 组件生成 AIBOM aibomgen-cli scan -i . -o aibom.json # 3. 将它们合并为全面的 BOM aibomgen-cli merge --aibom aibom.json --sbom sbom.json -o merged.json # 4. 将多个 AIBOM 与一个 SBOM 合并(适用于在单独的 AIBOM 文件中使用多个模型的项目) aibomgen-cli merge --aibom model1_aibom.json --aibom model2_aibom.json --sbom sbom.json -o merged.json ``` 选项: - `--aibom `:AIBOM 文件的路径(可多次指定,必需) - `--sbom `:SBOM 文件的路径(必需) - `--output, -o `:合并后 BOM 的输出路径(必需) - `--format, -f json|xml|auto`:输出格式(默认:`auto`) - `--deduplicate`:基于 BOM-ref 移除重复的组件(默认:`true`) - `--log-level quiet|standard|debug` ### 全局标志 - `--config `:要使用的配置文件(默认:`$HOME/.aibomgen-cli.yaml` 或 `./config/defaults.yaml`) 配置文件是一个 YAML 文件,用于为任何命令标志设置默认值,这样您就不必在命令行中重复它们。键按命令命名空间划分: ``` scan: hf-token: "hf_..." hf-mode: "online" log-level: "debug" validate: strict: true min-score: 0.5 ``` 任何未在 CLI 中传递的标志都会回退到配置文件中的值。CLI 标志始终优先。有关所有可用键的完整参考,请参阅 [`config/defaults.yaml`](config/defaults.yaml)。 ## 文档和示例 - API 参考:[pkg.go.dev/github.com/idlab-discover/aibomgen-cli](https://pkg.go.dev/github.com/idlab-discover/aibomgen-cli) - `targets/` — 用于集成测试和示例的小型代码库 - `docs/` — 设计说明和字段映射文档(草案) - [`config/defaults.yaml`](config/defaults.yaml) — 所有配置文件键的完整参考
标签:AIBOM, AI模型安全, AI模型管理, AI组件分析, AI资产管理, CycloneDX, DevSecOps, EVTX分析, GitHub Action, Go CLI, Go语言, GPT, Hugging Face, IP 地址批量处理, ML BOM, NLP模型扫描, SBOM, WebSocket, 上游代理, 云安全监控, 人工智能, 代码仓库扫描, 依赖分析, 大模型扫描, 密钥泄露防护, 文档安全, 日志审计, 机器学习安全, 模型合规性, 漏洞管理, 用户模式Hook绕过, 硬件无关, 程序破解, 跌倒检测, 软件物料清单, 配置审计, 静态分析