如何为Atlas脱敏生成Vendor规则?gen_vendor_rules.py脚本全解析

发布时间:2026/9/18 2:58:39
如何为Atlas脱敏生成Vendor规则?gen_vendor_rules.py脚本全解析 如何为Atlas脱敏生成Vendor规则gen_vendor_rules.py脚本全解析【免费下载链接】atlasSource control for agents. Use multiple coding agents, track their changes and query them in one place项目地址: https://gitcode.com/GitHub_Trending/atlas115/atlasAtlas 是一款面向 AI 编码 Agent 的源代码管理工具你可以并行运行 Claude Code、Codex 等多个 Agent追踪它们对代码库的改动并在统一界面里查询会话与决策。由于 Agent 会话会被完整记录到本地磁盘读到的 API Key、数据库密码等敏感信息必须先过脱敏管线。本文完整解析 Atlas 脱敏引擎atlas-redact中的核心脚本 gen_vendor_rules.py看它如何把 betterleaks 的密钥识别规则表一键转换为 Rust 静态数据以及这 4 类故意排除背后的设计决策。为什么 Atlas 需要秘密脱敏 想象一个典型场景Agent 读取了.env文件密钥原文被逐字写进了会话记录一条 shell 命令打印出 token它又落进了工具结果。Atlas 的记录机制天然会让敏感信息进入转录。因此atlas-redact的设计原则是脱敏发生在持久化之前而不是上传之前。本地存储从来不是秘密的栖息地同步、导出、分享、支持包等所有下游功能自动继承这一保证整条链路上只有一条可能被遗忘的代码路径。脱敏管线共6 层任意一层命中即替换为[REDACTED]层级职责① 香农熵层长高熵 token唯一能抓住没人写过规则的密钥格式②Vendor 规则层本文主角约 325 条厂商密钥格式规则③ 提供商前缀sk-、ghp_等确定性前缀④ 凭证 URIscheme://user:passhost⑤ 连接串JDBC、DSN 等⑥ 凭证值DB_PASSWORD…的值部分第 ② 层存在的理由有些密钥前缀太短、字母表太窄熵值算不出秘密味只能靠精确格式规则捕获——这正是 betterleaks 规则表的价值。gen_vendor_rules.py 一键生成 Vendor 规则表脚本 gen_vendor_rules.py 的角色一句话概括读取 betterleaks 的默认配置约 325 条规则、MIT 协议生成 vendor_rules.rs 纯数据文件。为什么是vendor 进代码而不是直接依赖 betterleaks因为atlas-redact必须保持纯函数库无 I/O、无 async、无网络规则要直接编译进桌面二进制。所以规则表在构建期烘焙进去而不是运行时加载。三步完成生成完整步骤获取 betterleaks v1.5.0 的默认配置betterleaks.toml来自 betterleaks 发行版中的config/目录运行生成命令python3 scripts/gen_vendor_rules.py path-to-betterleaks.toml运行cargo test——vendor_rules_all_compile测试是最终裁判证明每条输出正则对 Rust 的regexcrate 有效Go 的 RE2 语法与 Rust regex 相近但不完全相同。当前状态312 条规则入库13 条跳过。跳过清单不写在生成文件里而留在生成器中——原因要能经受重新生成。生成文件头部也标注了GENERATED, do not edit。脚本的 4 类故意排除决策这是全文最值得细读的部分每一条排除都不是偷懒而是有记录的工程决策。skipReport规则——betterleaks 检测它们只为关联而非报告泄露如阿里云 AccessKeyID、Supabase 项目URL。它们是标识符不是秘密包含进来会脱敏掉普通配置。但注意KEEP_SKIP_REPORT反例清单8 条带此标记的规则实际上是真凭证AWS Secret Access Key、OVH Consumer Key 等全部保留入库——它们的正则都要求凭证形状的 key 紧邻出现误报成本可控。generic-api-key兜底规则——规则表中最大的误报来源而熵层已经在调好的阈值上覆盖了同一块地盘二者重复只会互相拆台。无内容正则的纯路径规则如pkcs12-file——atlas-redact只看字符串永远看不到文件路径。INCOMPATIBLE清单——Go 正则无法在 Rust 下编译的规则。清单刻意保持显式、可评审被丢弃的规则是被记录的决策而不是静默的缺口。当前该清单为空说明整个语料库移植得很干净。宽区间重写绕开 Rust 正则编译上限 ⚙️WIDE_RANGE_REWRITES处理了语料库中仅有的两条特殊规则pypi-upload-token[\w-]{50,1000}→[\w-]{50,}vault-batch-token[\w-]{138,300}→[\w-]{138,}为什么必须改Rust regex 会预先构建 DFA宽而有界的重复区间编译成本是兆字节级这两条都直接撞破 10 MiB 上限。为什么改是安全的在脱敏场景下匹配结果变成替换而非报告匹配了多少——同一字符类上的贪婪尾巴只会覆盖更多秘密绝不会更少也绝不会越界。而且脚本对每条规则都先校验旧模式仍存在于上游正则中一旦上游变更会直接报错要求人工复核后再生成防止盲改。Vendor 规则引擎312 条规则如何跑得飞快生成出数据只是第一步vendor.rs 中的引擎负责高效执行它两个关键设计让它远离热路径关键词预过滤每条规则声明了必须出现在输入中的小写关键词一次廉价的子串扫描即可在一次调用中淘汰规则表的绝大部分懒编译每条正则通过OnceLock在首次使用时才编译。一个典型回合只触碰几条规则其余 300 多条永远不会被编译。此外betterleaks 上游的熵过滤entropy(...) 3.8这类写法被原样保留为min_entropy与entropy_inclusive字段逐规则精确保留低于此熵丢弃的语义。3 道测试安全网规则表不会静默腐化vendor.rs内置了 3 个测试分别挡住三类失败模式 ✅every_vendored_rule_compiles_under_the_rust_regex_crate——任何一条规则编译失败都直接暴露错误信息还会明确指示把它连同原因加入INCOMPATIBLE然后重新生成the_corpus_is_substantial——规则数必须大于 200。否则一次指向错误路径的重新生成会静默产出空表而所有 Vendor 层测试因匹配不到任何东西照常通过every_rule_declares_keywords...——无关键词的规则不得超过 1 条保证预过滤机制始终有效。运行时同样兜底某条规则编译失败会被跳过而非 panic——vendored 数据中的坏模式绝不能拖垮脱敏链路。关键文件路径速查 文件说明gen_vendor_rules.py本文主角规则生成脚本vendor_rules.rs生成的 312 条规则数据表vendor.rsVendor 层引擎预过滤 懒编译lib.rs6 层脱敏总入口redact()entropy.rs香农熵层阈值 4.5parity_memory_delta.rs与旧脱敏器的对等性测试Cargo.tomlatlas-redact包定义小结gen_vendor_rules.py看似只是一个格式转换器实则承载了完整的安全工程决策链——哪些规则排除、为什么排除、RE2 与 Rust regex 的差异如何安全消解、以及生成物如何被测试网持续看护。理解了它也就理解了 Atlas 如何在漏脱敏是事故过脱敏同样是事故的天平上保持平衡。【免费下载链接】atlasSource control for agents. Use multiple coding agents, track their changes and query them in one place项目地址: https://gitcode.com/GitHub_Trending/atlas115/atlas创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考