
Agent Governance Toolkit 实战用 atr-import 将 Agent Threat Rules 按类别编译为原生 ACS 策略【免费下载链接】agent-governance-toolkitAI Agent Governance Toolkit — Policy enforcement, zero-trust identity, execution sandboxing, and reliability engineering for autonomous AI agents. Covers 10/10 OWASP Agentic Top 10.项目地址: https://gitcode.com/GitHub_Trending/ag/agent-governance-toolkit本文介绍 Agent Governance Toolkit 仓库中的社区示例examples/atr-import它把社区维护的 Agent Threat RulesATR规则集按威胁类别分别编译为一套原生 ACSAgent Control Specificationmanifest 与配套 Rego bundle并支持类别、严重级别、规则 ID 前缀过滤和文件变更自动重编译。读完本文你将掌握 atr-import 的命令行用法、过滤参数语义、产物结构、底层编译流水线与安全校验机制并能把它接入自己的策略分发与 CI 流程。背景为什么需要把 ATR 规则编译成 ACS 策略Agent Threat RulesATR是描述 Agent 威胁检测模式的外部社区项目规则以 YAML 形式组织每条规则通过detection.conditions中的正则表达式描述威胁特征如提示注入、工具投毒等。Agent Governance Toolkit 本身不对 ATR 产生运行时依赖而是通过两个示例项目把 ATR 规则「搬」进自己的策略生态examples/atr-community-rules 把所有生产级 ATR 规则编译为一个原生 ACS manifest 和 Rego bundleexamples/atr-import本文主角进一步按类别拆分每个类别生成一个ACS manifest 及其同级 bundle 目录便于按类别独立分发、独立加载、独立审计。两者共享同一套底层编译器 sync_atr_rules.pyatr-import 在其之上增加了类别分组、过滤与监控重编译能力从源码结构看它可视为「按类别切分的批处理版」ATR 同步器。快速上手一条命令生成全套类别策略确保已安装pyyaml编译器依赖见 requirements.txt然后在仓库根目录执行python examples/atr-import/import_atr.py rules/ \ --out build/atr-policies \ --manifest build/atr-summary.json参数说明atr_dir位置参数ATR 规则目录脚本会递归扫描其中的*.yaml--out输出目录默认./atr-policies每个类别产出一个 YAML 文件--manifest可选把编译结果汇总写为一个 JSON 清单便于 CI 记录与人工审阅。运行成功后build/atr-policies/下每个类别对应一个category.yaml文件如prompt-injection.yaml该文件是一个标准的 ACS manifest它的同级目录category-bundle/如prompt-injection-bundle/内含policy.rego即该类别的 Rego 实现。汇总信息写入build/atr-summary.json。过滤参数只编译你关心的规则atr-import 提供四类可选过滤器均可与--out、--manifest组合使用实际语义对应 import_atr.py 中的 CLI 定义--category可重复指定只保留指定类别的规则可传多次实现多类别选择python examples/atr-import/import_atr.py rules/ \ --category prompt-injection \ --category tool-poisoning \ --out build/atr-policies在源码中categories被转换为一个setimport_atr.py与每条规则解析出的category做精确匹配不匹配的直接跳过。--min-severity按严重级别下限过滤可选值及对应数值定义在源码的SEVERITY_RANK中import_atr.py取值等级数值critical4high3medium2low1informational0例如--min-severity high会丢弃medium、low、informational级别的规则只保留high与critical。源码通过SEVERITY_RANK.get(pattern.severity, 0) threshold判定import_atr.py注意规则中未识别到的严重级别会按 0 处理。--id-prefix按规则 ID 前缀过滤例如只导入ATR-1开头的规则python examples/atr-import/import_atr.py rules/ \ --id-prefix ATR-1源码用pattern.atr_id.startswith(id_prefix)做前缀匹配import_atr.py。--strict-regex严格正则模式当某条规则的正则不合法语法错误、携带反引号或超长时直接抛出InvalidRegexError终止编译默认模式则是打印WARNING后跳过该条规则继续执行。该行为与底层编译器的校验逻辑一致sync_atr_rules.py适用于无人值守的 CI 场景——宁可失败也不产出带病策略。组合示例只编译高风险的提示注入规则python examples/atr-import/import_atr.py rules/ \ --category prompt-injection \ --min-severity high \ --id-prefix ATR- \ --strict-regex \ --out build/atr-policies \ --manifest build/atr-summary.json--watch模式源文件变化自动重编译传入--watch后脚本进入轮询循环默认每 2 秒扫描一次规则目录可用--watch-interval调整秒数当目录内任一*.yaml的修改时间mtime发生变化时立即按当前过滤条件重新编译全部类别import_atr.pypython examples/atr-import/import_atr.py rules/ \ --out build/atr-policies \ --manifest build/atr-summary.json \ --watch \ --watch-interval 1.0实现要点_tree_signature收集目录下所有*.yaml的路径与 mtime 构成签名每次轮询比对签名是否变化CtrlCKeyboardInterrupt可干净退出并返回退出码 0import_atr.py。该模式适合本地开发时边改 ATR 规则边观察策略产物也适合作为守候进程配合策略分发。产物结构一个类别 一个 ACS manifest 一个 Rego bundleatr-import 的产物组织遵循「每个类别一个独立策略单元」的设计build/atr-policies/ ├── prompt-injection.yaml # ACS manifestYAML ├── prompt-injection-bundle/ │ └── policy.rego # 该类别全部规则编译成的 Rego ├── tool-poisoning.yaml ├── tool-poisoning-bundle/ │ └── policy.rego └── ...写入逻辑见 sync_atr_rules.pywrite_compiled先创建与 manifest 同级的{bundle}目录写入policy.rego再写入 YAML manifest且 manifest 头部保留版权注释。生成的 ACS manifest 结构由 compile_patterns 构造包含agent_control_specification_version当前为0.4.0-alpha.1metadata策略名atr-category与版本extends继承列表默认为空policies以atr_category连字符转下划线为策略 ID声明type: rego、bundle名称与 Rego 查询data.agt.examples.atr.safe.resultintervention_points声明输入/输出两个干预点输入侧policy_target指向$.input.body输出侧指向$.output.content两者复用同一个策略 ID。生成的 Rego 采用rego.v1语法核心逻辑为对每条规则生成一条matches contains {...} if { target : sprintf(%v, [object.get(body, field, )]); regex.match(pattern, target) }规则随后按名称排序取winner命中任一规则时返回{decision: deny, reason: ..., message: ...}无命中返回{decision: allow, reason: no_atr_match}sync_atr_rules.py。源码原理类别的编译流水线atr-import 的核心函数是compile_per_categoryimport_atr.py执行流程如下加载编译器模块_import_sync_module优先读取环境变量AGT_ATR_SYNC_PATH指定的路径否则向上回溯目录树寻找examples/atr-community-rules/sync_atr_rules.py并动态加载import_atr.py。这允许你在不改动仓库的情况下通过环境变量覆盖为任意版本的编译器枚举规则调用module.iter_atr_patterns(atr_dir, strict_regexstrict_regex)递归扫描*.yaml底层会跳过status: draft与maturity: test的规则sync_atr_rules.py应用过滤器依次执行类别、严重级别、ID 前缀过滤顺序见第 2 节按类别分组grouped.setdefault(pattern.category, []).append(pattern)逐类别编译类别名经re.sub(r[^a-z0-9_], _, category.lower())转成安全的 Rego 包名后缀然后调用module.compile_patterns生成 manifest 与 Rego并调用module.write_compiled落盘汇总结果返回含atr_source、out_dir、categories每项含category、path、pattern_count与total_compiled_rules的字典供--manifest写为 JSON。类别到检测字段的映射由 CATEGORY_TO_FIELD 决定目前覆盖 9 个类别例如prompt-injection → user_input、context-exfiltration → tool_response、tool-poisoning → tool_description未映射的类别默认落到user_input。安全设计编译链路中的防注入校验由于 ATR 是第三方社区数据源、且同步可能无人值守执行编译器在发射 Rego 前对每条正则做了三道校验sync_atr_rules.py反引号检查拒绝携带反引号的模式——反引号在 Rego 原始字符串字面量中没有转义机制曾存在通过反引号提前闭合字符串字面量、注入策略源码的供应链攻击面。当前实现改为 JSON 引号字符串发射反引号被中和test_atr_policy.py 有专门的对抗用例验证整条恶意模式能原样往返为一个字符串、无法逃逸长度检查UTF-8 编码后超过 8192 字节的模式被拒绝语法检查用re.compile验证正则是否可编译。严格模式下任一检查失败即抛错终止非严格模式打印WARNING后跳过该条规则。汇总清单--manifest的 JSON 结构--manifest输出的 JSON 与compile_per_category的返回值一一对应形如{ atr_source: rules, out_dir: build/atr-policies, categories: [ { category: prompt-injection, path: build/atr-policies/prompt-injection.yaml, pattern_count: 42 } ], total_compiled_rules: 42 }pattern_count取自compiled.pattern_count该类别实际进入 Rego 的规则条数已排除 draft/test 与被校验丢弃的模式total_compiled_rules为各类别之和。这一清单非常适合写入 CI 产物或在策略分发前做 diff 对比。验证与测试确保产物是合法的 ACS manifestatr-import 自带测试 test_import_atr.py运行方式pytest examples/atr-import/test_import_atr.py -v测试覆盖两个关键行为test_compiles_one_manifest_per_category构造prompt-injection与tool-poisoning两条不同类别规则断言输出恰为 2 条、total_compiled_rules 2并逐个用agent_control_specification.validate_manifest校验每个 YAML 都是合法 ACS manifesttest_import_atr.pytest_category_and_severity_filters同时施加categories{prompt-injection}与min_severitymedium断言只编译出 1 条high级别的prompt-injection规则test_import_atr.py。把编译产物加载进运行时编译出的 manifest 与 bundle 即为原生 ACS 策略单元可直接用 Python SDK 加载并执行与 examples/atr-community-rules 的加载方式一致from agent_control_specification import AgentControl runtime AgentControl.from_manifest(build/atr-policies/prompt-injection.yaml) result runtime.evaluate(input, snapshot)AgentControl位于 policy-engine/sdk/pythonfrom_manifest解析 ACS manifest、evaluate将快照输入送入干预点对应的 Rego 查询。由于每个类别是独立 manifest你可以按威胁域拆分加载、分别控制启停而不必整包替换。小结atr-import 把「外部威胁情报规则」到「内部可执行策略」的转化做成了可复用、可过滤、可监控的流水线类别维度拆分产物、五个严重级别阈值、ID 前缀与严格正则开关覆盖了大多数分发场景--watch与--manifest让它可以融入本地开发与 CI 交付而底层的反引号/长度/语法三重校验与配套对抗测试则保证了第三方数据源到 Rego 代码的供应链安全。对希望以最小改动把 ATR 社区规则持续同步为 ACS 原生策略的团队这是一个开箱即用的参考实现。【免费下载链接】agent-governance-toolkitAI Agent Governance Toolkit — Policy enforcement, zero-trust identity, execution sandboxing, and reliability engineering for autonomous AI agents. Covers 10/10 OWASP Agentic Top 10.项目地址: https://gitcode.com/GitHub_Trending/ag/agent-governance-toolkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考