SurrealDB 引入新依赖后如何通过 cargo-vet 信任、豁免并 prune 审计清单
【免费下载链接】surrealdbA scalable, distributed, collaborative, document-graph database, for the realtime web项目地址: https://gitcode.com/GitHub_Trending/su/surrealdb
当你在 SurrealDB 仓库的 PR 中引入一个新的第三方 crate 后,CI 的依赖检查可能因cargo-vet失败:该新依赖还没有被信任(trust)、审计(audit)或豁免(exempt)。SurrealDB 使用 cargo-vet 基础配置 做供应链安全检查,该工具在 CI 流程中执行(见 SECURITY.md),配置文件归@surrealdb/security组所有。本文按仓库文档给出的流程,说明如何为这样的新依赖走信任或豁免路径,并 prune 审计清单,让依赖检查重新通过。
准备:本地安装依赖检查工具
在本地操作cargo-vet前,需要安装文档要求的两个工具:
cargo install --locked cargo-deny cargo install --locked cargo-vet这两条命令会下载并编译对应的 cargo 子命令、安装到本地 cargo 的 bin 目录,前提是环境中已有可用的 Rust 工具链(cargo)。cargo-deny服务于漏洞检查路径,cargo-vet是本文信任、豁免、prune 操作所用的工具。
cargo-vet的配置文件是 supply-chain/config.toml,其中声明version = "0.10",并 import 了多个第三方组织的审计清单;已有的豁免条目就写在该文件的[[exemptions.*]]段中,审计与信任记录位于 supply-chain/audits.toml 的[[audits.*]]和[[trusted.*]]段。
判断新依赖走哪条路径
文档对cargo-vet检查失败的定义是:该依赖“has not yet been trusted, audited nor exempted”。处理的第一步是判断这个依赖是否真的需要引入 SurrealDB;若不需要,就不要引入。
确需引入时,按发布者身份二选一:
- 该依赖由 SurrealDB 员工发布,且所有发布者都是 SurrealDB 员工——可以信任为
safe-to-deploy; - 否则——当前阶段的做法是从 vetting 流程中豁免。
信任由 SurrealDB 员工发布的依赖
执行前必须确认该依赖的全部发布者都是 SurrealDB 员工,这是文档给出的前置条件。确认后用以下命令信任(<PACKAGE>替换为新依赖的 crate 名,例如my-new-crate):
cargo vet trust <PACKAGE>信任后依赖会以safe-to-deploy标准记入supply-chain/audits.toml的[[trusted.*]]条目,格式可对照仓库现有条目(含criteria、user-id、start/end字段,如[[trusted.anyhow]])。
豁免其他新依赖
对不由 SurrealDB 员工发布的依赖,文档给出的处理是暂时豁免:
cargo vet add-exemption <PACKAGE>豁免条目写入 supply-chain/config.toml,格式为version加criteria。仓库现有条目的实际形态如下(文档示例,取自该文件):
[[exemptions.ahash]] version = "0.8.12" criteria = "safe-to-deploy"现有条目中出现的 criteria 值有safe-to-deploy和safe-to-run两种。
用 prune 清理过期的审计条目
完成信任或豁免后,文档要求执行:
cargo vet prune其用途是 prune 审计清单,移除过期的条目,使 supply-chain/audits.toml 与当前依赖树保持一致。
提交变更与审批
文档明确了合入路径:上述对supply-chain/配置文件的变更由@surrealdb/security组审批。本地执行完trust/add-exemption/prune后,把改动提交到 PR 等待该组批准;cargo-vet作为 CI 动作随流程重新执行,PR 上的依赖检查通过即流程完成。文档没有给出本地命令的固定成功日志,不要把特定输出文本当作成功判据。
边界与限制
cargo-vet在当前实现中只是 informational 工具,SurrealDB 不会对第三方依赖做实质性安全评审(见 supply-chain/README.md)。- 当前阶段的默认妥协:由 SurrealDB 员工发布且是唯一发布者的依赖默认被信任;被信任组织直接(而非传递)审计过的依赖默认被信任;尚未审计的依赖被豁免。
- 工作区 crate(
surrealdb、surrealdb-core、surrealdb-server、surrealism、surrealml-core等)均设置了audit-as-crates-io = false,按第一方可信代码处理,版本 bump 时无需维护逐版本豁免;下游消费者使用各自的cargo-vet配置。 - 若 CI 是
cargo-deny因已知漏洞而失败,走的是另一条路径:在独立分支执行cargo update <PACKAGE>更新依赖;若无法更新,则在 deny.toml 中添加带理由和移除条件的例外。不要把它与本文的cargo-vet信任/豁免流程混用。
【免费下载链接】surrealdbA scalable, distributed, collaborative, document-graph database, for the realtime web项目地址: https://gitcode.com/GitHub_Trending/su/surrealdb
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考