craevidence/cli
GitHub: craevidence/cli
CRA Evidence CLI 是一款帮助团队在本地和 CI/CD 流水线中执行欧盟网络弹性法案合规检查的命令行工具。
Stars: 0 | Forks: 0
# CRA Evidence CLI
[](https://pypi.org/project/craevidence/)
[](https://github.com/craevidence/cli/actions/workflows/ci.yml)
[](https://github.com/craevidence/cli/blob/main/LICENSE)
[](https://github.com/craevidence/cli/blob/main/docs/installation.md)
[](https://hub.docker.com/r/craevidence/cli)
用于 [CRA Evidence](https://craevidence.com) 工作流和本地软件供应链检查的命令行工具。

CLI 有两种模式:
- 无需 CRA Evidence 账号或 API 密钥即可运行的本地命令。
- 从 CRA Evidence 上传证据或读取发布状态的账号命令。
本页涵盖了公共命令的基础知识。完整的参考文档位于
[docs/](https://github.com/craevidence/cli/blob/main/docs/README.md)。
已注册的 CRA Evidence 用户也可以登录查看命令
文档,网址为 https://docs.craevidence.com/cli。
本地检查是审查辅助工具和 CI 门禁。它们不是审计,并且
退出码为 0 并不能证明合规。
## 安装
```
pip install craevidence
pipx install craevidence
```
`pipx` 非常适合用于安装命令行工具,因为它将包安装在
隔离的环境中。
安装的命令是:
```
craevidence --help
```
需要 Python 3.12 或更高版本。Docker 镜像及其他安装选项
详见[安装指南](https://github.com/craevidence/cli/blob/main/docs/installation.md)。
## 文档
| 页面 | 内容 |
|---|---|
| [本地命令](https://github.com/craevidence/cli/blob/main/docs/local-commands.md) | `check`、`eol-check`、`egress-check`、`secrets-check`、`config-check`、`draft`、`assessment`、`db` 以及离线模板脚手架。 |
| [账号命令](https://github.com/craevidence/cli/blob/main/docs/account-commands.md) | 上传、扫描、状态、发布生命周期、分发器、配置文件、验证和校验。 |
| [CI/CD 集成](https://github.com/craevidence/cli/blob/main/docs/ci-cd.md) | GitHub Action、GitLab Component、Docker、Jenkins、OpenSSF Scorecard 和 complyctl。 |
| [安装](https://github.com/craevidence/cli/blob/main/docs/installation.md) | PyPI、Docker、容器镜像库和源码安装。 |
| [故障排除](https://github.com/craevidence/cli/blob/main/docs/troubleshooting.md) | 常见错误及修复方法。 |
## 本地检查
`craevidence check` 扫描目录、容器镜像或现有的 SBOM,并
报告已知的漏洞信号,当达到阈值时这些信号可以阻止 CI。
它不需要账号,也不会将您的项目上传到 CRA Evidence。
```
craevidence check .
craevidence check --image ghcr.io/acme/app:1.4.2
craevidence check --sbom sbom.cdx.json
craevidence check . --fail-on known-exploited
```
默认情况下,`check` 使用网络数据源。安装并正常运行时它会使用 Grype,
当 Grype 缺失或失败时回退到 OSV.dev,并查询
CISA KEV 和 FIRST EPSS 进行数据富化。对于网络受限的运行环境,请
使用 `--sbom` 提供 SBOM,并在 Grype 拥有本地数据库的地方运行;如果无法访问
CISA KEV 和 FIRST EPSS,系统会将它们的数据富化报告为不可用。
详细输出包含一个名为 **此本地快照无法告诉您什么** 的部分。JSON 输出
以机器可读的格式保留相同的审查上下文。
## 免费命令
这些命令不需要 `CRA_EVIDENCE_API_KEY`:
| 命令 | 用途 |
|---|---|
| `check` | 扫描目录、镜像或 SBOM,并使用 `--fail-on` 控制 CI 门禁。 |
| `eol-check` | 从本地 SBOM 组件中标记生命周期结束 (EOL) 和支持状态。 |
| `egress-check` | 清点外部接口和数据外发指标。 |
| `secrets-check` | 扫描工作区以查找疑似硬编码的密钥。 |
| `config-check` | 审计 Dockerfile、Terraform 和 Kubernetes 文件中的不安全默认配置。 |
| `draft` | 为审查构建 VEX、security.txt、公告、风险评估和威胁模型的草案。 |
| `compliance-as-code template --offline` | 无需 API 密钥,从本地输入创建基础 YAML。 |
| `assessment` | 构建 Annex I 适用性矩阵,并根据结构化的差距控制 CI 门禁。 |
| `db update` / `db status` | 管理和检查本地 Grype 漏洞数据库缓存。 |
## CI 示例
GitHub Actions:
```
jobs:
cra-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: pipx install craevidence
- run: craevidence check . --fail-on known-exploited
```
GitLab CI:
```
cra-check:
image: python:3.12-slim
script:
- pip install craevidence
- craevidence check . --fail-on known-exploited
```
## 账号命令
上传证据或读取 CRA Evidence 发布状态的命令需要 API 密钥:
```
export CRA_EVIDENCE_API_KEY=...
craevidence upload-sbom --product my-product --version 1.0.0 --file sbom.cdx.json
craevidence status --product my-product --version 1.0.0
```
默认的 API URL 是:
```
https://api.craevidence.com
```
您可以使用以下命令覆盖它:
```
export CRA_EVIDENCE_URL=https://api.craevidence.com
```
## 环境变量
| 变量 | 用途 |
|---|---|
| `CRA_EVIDENCE_API_KEY` | 用于账号命令的 API 密钥。 |
| `CRA_EVIDENCE_URL` | CRA Evidence API URL。默认为 `https://api.craevidence.com`。 |
| `CRA_EVIDENCE_ORG` | 默认的组织别名 (slug)。 |
| `CRA_EVIDENCE_PRODUCT` | 用于上传命令的默认产品别名。 |
| `CRA_EVIDENCE_VERSION` | 用于上传命令的默认产品版本。 |
| `CRA_EVIDENCE_COMPONENT` | 用于组件感知上传的默认组件别名。 |
| `CRA_EVIDENCE_COMPONENT_VERSION` | 默认的组件发布版本。 |
| `CRA_EVIDENCE_TIMEOUT` | 账号命令的 HTTP 请求超时时间(秒)。默认为 `60`。 |
| `CRA_NO_WARN` | 设置为任意值以屏蔽 API URL 配置警告。 |
凭据也可以存储在 `~/.cra-evidence/config.yaml` 中。请将该文件
保密,例如使用 `chmod 600 ~/.cra-evidence/config.yaml`。
## 退出码
| 代码 | 含义 |
|---|---|
| 0 | 成功。对于本地门禁,在此本地快照中未出现已配置的阻塞性发现。 |
| 1 | 一般错误。 |
| 2 | 身份验证错误。 |
| 3 | API 错误。 |
| 4 | 验证错误。 |
| 5 | 文件未找到。 |
| 6 | 配置错误。 |
| 7 | security.txt 验证失败。 |
| 10 | 发现严重漏洞。 |
| 11 | 发现高危漏洞。 |
| 12 | 发现中危漏洞。 |
| 13 | 发现低危漏洞。 |
| 14 | SBOM 质量得分低于配置的阈值。 |
| 15 | 本地扫描引擎不可用。 |
| 16 | 超出许可证策略阈值。 |
| 17 | 发现已知被利用的漏洞。 |
| 18 | 发现疑似密钥。 |
| 19 | 发现不安全默认配置问题。 |
| 20 | 启用状态门禁时,CRA 状态未就绪。 |
| 21 | 需要结构化证据映射,但未填充。 |
| 22 | 需要 SBOM 签名信任,但验证不受信任。 |
| 23 | SBOM 签名失败或没有可用的 Sigstore OIDC 身份。 |
| 24 | 满足 CRA 合规底线,但不符合配置的发布策略。 |
| 25 | 未处理强制性的 Annex I 要求。 |
| 26 | Annex I Part I(2) 要求在无正当理由的情况下被标记为不适用。 |
退出码为 0 != 合规。本地输出是用于审查和 CI 策略的快照,而不是
法律结论。
## 数据源
| 来源 | 用途 |
|---|---|
| FIRST EPSS | 漏洞利用概率富化。 |
| CISA KEV | 已知被利用漏洞的富化。 |
| OSV.dev | 使用 OSV 路径时的开源漏洞数据。 |
| Anchore Grype | 安装后的本地漏洞匹配。 |
| Anchore Syft | 安装或包含在 Docker 镜像中时,从目录和镜像生成 SBOM。 |
| endoflife.date | 用于 `eol-check` 的生命周期结束和支持周期数据。 |
## 支持
- 网站:https://craevidence.com
- 电子邮件:support@craevidence.com
## 许可证
MIT 许可证。有关详细信息,请参阅包许可证文件。
标签:Python, SBOM, 合规与审计, 无后门, 硬件无关, 请求拦截, 软件供应链安全, 远程方法调用, 逆向工具