多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Agent Governance Toolkit 策略引擎实战:在 ACS 清单中声明 Rego 与 Cedar 策略并绑定干预点

Agent Governance Toolkit 策略引擎实战:在 ACS 清单中声明 Rego 与 Cedar 策略并绑定干预点 Agent Governance Toolkit 策略引擎实战在 ACS 清单中声明 Rego 与 Cedar 策略并绑定干预点【免费下载链接】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-toolkitAgent Governance ToolkitAGT的策略引擎以 Agent Control SpecificationACS为运行时契约通过清单manifest统一声明 OPA/Rego 与 Cedar 两类策略并在干预点intervention point上完成绑定与判定。本文以官方教程 08-opa-rego-cedar-policies.md 为骨架结合仓库中的 manifest.schema.json、SPECIFICATION.md、bank_agent 示例 与 Cedar 策略库 展开读完你将掌握如何在 ACS 清单中声明 Regobundle query与 Cedar内联 policy_set 或 policy_path策略理解policies、intervention_points、tools、annotators等清单字段的约束并通过绑定、verdict 规范化与 transform 机制编写可投入运行的治理策略。一、核心机制ACS 清单中声明 Rego 与 Cedar 策略ACS 清单manifest是策略引擎的单一配置入口采用 YAML 或 JSON 格式顶层必须携带agent_control_specification_version。策略全部集中在顶层policies映射下由命名策略定义组成。教程指出两种引擎的声明方式差异Rego 策略引用一个bundle策略包目录与一个query查询路径Cedar 策略使用原生内联策略集policy_set或文件字段policy_path——二者只能二选一随后把策略标识符policy.id绑定到一个或多个干预点上。从清单模式的$defs.policymanifest.schema.json看引擎一共定义了四种策略类型rego、cedar、test与custom其中rego与cedar是仅有的两种内置执行路径bundled runtime execution path的策略类型test仅用于测试替身custom通过必填的adapter字段接入宿主自定义后端SPECIFICATION.md。策略类型关键字段执行方式regoquery必填可用、bundle可选由内置opadispatcher 执行或由宿主自定义 dispatcher 执行cedarpolicy_set与policy_path二选一entities_path、schema_path、query可选由内置cedardispatcher 执行或由宿主自定义 dispatcher 执行test—返回固定 verdict 的测试双customadapter必填宿主通过适配器接入任意策略后端二、Rego 策略bundle 与 query 的声明与绑定Rego 策略面向 Open Policy Agent。清单中一个典型的 Rego 策略定义如下取自仓库实测示例 bank_agent/manifest.yamlagent_control_specification_version: 0.4.0-alpha.1 policies: bank_agent_rego: type: rego bundle: ./policy query: data.agent_control_specification.bank_agent_rego.verdictbundle指向 Rego 策略包目录OPA bundle运行时据此加载策略文件query是 OPA 查询路径即 Rego 包中需要求值的verdict规则。2.1 干预点绑定一个策略、八个干预点intervention_points是清单中与policies并列的顶层映射键名必须取自闭集agent_startup、input、pre_model_call、post_model_call、pre_tool_call、post_tool_call、output、agent_shutdownSPECIFICATION.md。每个干预点通过policy.id绑定一个策略还可以通过policy.query覆盖定义级查询实现“同一个 Rego bundle、每个干预点跑不同查询”的复用模式。bank_agent 示例正是如此8 个干预点全部绑定bank_agent_rego各自指定形如data.agent_control_specification.bank_agent_rego.input_verdict的查询对应 Rego 文件 bank_agent_rego.rego 中为每个干预点定义独立的*_verdict规则并通过统一的verdict规则按input.intervention_point分发package agent_control_specification.bank_agent_rego import rego.v1 default verdict : {decision: allow} default input_verdict : {decision: allow} # ... 其余干预点同理 verdict : input_verdict if { input.intervention_point input } input_verdict : { decision: deny, reason: input_classifier_high_risk, message: The request is too risky for this demo bank agent. } if { input.intervention_point input input.annotations.prompt_classifier.risk_score 0.95 }这里可以看到策略输入policy input的规范结构input.intervention_point、input.annotations.name、input.policy_target.value、input.tool等。规范的政策输入对象恰好包含五个成员intervention_point、policy_target、snapshot、annotations、tool且不得包含request、resource或tools成员SPECIFICATION.md。2.2 干预点配置与完整清单示例一个配置了policy_target、policy_target_kind、tool_name_from、annotations与policy绑定的完整干预点如下合并自 bank_agent/manifest.yamlpre_tool_call: policy_target: $.tool_call.args policy_target_kind: tool_args tool_name_from: $.tool_call.name annotations: tool_args_classifier: from: $target policy: id: bank_agent_rego query: data.agent_control_specification.bank_agent_rego.pre_tool_call_verdictpolicy_target从快照中选取被评估的值必须使用快照根$snap、$、$.namepolicy_target_kind可选的描述性标签会记录到 policy target 上tool_name_from仅pre_tool_call/post_tool_call两个工具干预点可用用于从快照投影工具名annotations把命名 annotator 输出注入策略输入policy.idpolicy.query完成策略绑定。tools目录为工具投影提供清单数据如clearance、security_labelsannotators则声明classifier/llm/endpoint三类注解器。完整示例见 bank_agent/manifest.yaml 的tools与annotators段落。三、Cedar 策略内联策略集与文件字段Cedar 策略面向 AWS 开源的 Cedar 策略语言。其定义字段manifest.schema.json 与 SPECIFICATION.md如下字段必填类型含义type是string必须为cedarpolicy_setpolicy_set与policy_path恰好二选一string内联 Cedar 策略文本policy_path同上string指向.cedar策略文件或目录的文件系统路径entities_path否stringCedar entities JSON 文件路径用于加载阈值、白名单等参数schema_path否stringCedar schema JSON 文件路径query否objectCedar 请求模板可覆盖默认映射Cedar 运行时要求构造Request{principal, action, resource, context}当绑定处未显式给出访问器时默认映射为SPECIFICATION.mdCedar 字段策略输入来源类型principal$pi.snapshot.envelope.agent.id映射为Agent::idAgent实体action干预点名称映射为Action::ipAction实体resource工具干预点投影Tool::name否则PolicyTarget::kind实体context$pi.snapshot不含envelope加每个$pi.annotations条目键为annotations.namerecord清单绑定示例取自 policy/cedar-lib/README.mdpolicies: default: type: cedar policy_path: ./policy/cedar-lib/agt_default.cedar entities_path: ./policy/data/resources.json hooks: pre_tool_call: policy: default注意entities_path加载的资源实体 UID 必须与 dispatcher 从 ACS 快照构造的 UID 一致Tool::name或PolicyTarget::kind否则策略找不到参数化数据。3.1 Cedar 授权结果到 AGT verdict 的映射Cedar 的Allow映射为allowverdictDeny映射为denyverdictreason取第一个贡献的forbid策略 id。Cedar 策略作者可通过advice注解携带 JSON 形状的 advice产生warn、escalate或transformSPECIFICATION.md{ verdict: warn | escalate | transform, reason: optional reason string, message: optional human message, transform: {path: $target..., value: any} }advice 会按 cedar_advice.schema.json 校验不匹配则 fail closed 为runtime_error:policy_output_invalidtransformadvice 缺少transform体则 fail closed 为runtime_error:transform_invalid路径超出$target则报runtime_error:transform_target_forbidden。3.2 开箱即用的 AGT 内置 Cedar 策略库仓库在 policy/cedar-lib/ 提供与 Rego 库一一对应的 Cedar 镜像策略库READMECedar 文件对应 Rego 文件判定形状budgets.cedarbudgets.rego工具调用数 / token 数超阈值时forbidpatterns.cedarpatterns.regoPII 子串签名邮箱、SSN、信用卡forbidcontent_hash.cedarcontent_hash.rego工具内容哈希不匹配forbidegress.cedaregress.rego目标主机不在白名单时forbiddrift.cedardrift.rego漂移分数超阈值时permitwarnadviceconfidence.cedarconfidence.rego置信度低于阈值时forbidredact.cedarredact.regopermittransformadvice 整体替换$target.valueapproval.cedarapproval.regopermitescalateadvice 触发人工审批ifc.cedaragt_ifc.regosink 权限不清除源标签时forbidagt_default.cedaragt_default.rego组合上述所有 gate 并给出基线 permit其中 agt_default.cedar 是组合策略Cedar 显式 deny 优先于 permit任何forbid命中都会否决策略 id 就是最终 verdict 上的 deny reason。以其中的预算与红action gate 为例id(budget_tool_calls_exceeded) forbid ( principal, action, resource ) when { context has envelope context.envelope has budgets context.envelope.budgets has tool_call_count resource has max_tool_calls context.envelope.budgets.tool_call_count resource.max_tool_calls }; advice({\verdict\:\transform\,\reason\:\redaction_applied\,\transform\:{\path\:\$target.value\,\value\:\[REDACTED]\}}) id(agt.redact.pii) permit ( principal, action, resource ) when { context has annotations context.annotations has pii_detected context.annotations.pii_detected true };每个策略文件都带_test.json测试可通过 Cedar CLI 运行READMEcargo install cedar-policy-cli --version ^4 ./run_tests.sh3.3 Cedar 与 Rego 的选型边界从源码结构与文档看Cedar 是比 Rego 更小的语言存在几个已知限制README作者应按需选型无正则Cedar 仅支持like通配符patterns.cedar只能识别邮箱、SSN、信用卡等结构签名Rego 库data.agt.patterns使用完整 RE2 模式无 URL 解析器egress.cedar只能比较宿主已投影到context.tool_call.args.host等字段的裸主机/域名Rego 库data.agt.egress可解析 URL 并应用 glob 主机模式无多段 transformredact.cedar只能整体把$target.value替换为字面量[REDACTED]Rego 库data.agt.redact可用regex.replace原位替换匹配片段仅整数评分置信度/漂移分数需先缩放为整数如 0..100再进入快照无评估期格lattice计算ifc.cedar需要宿主预计算clearance_dominated_labelsRego 库data.agt.ifc可调用时传入 lattice 文档。四、绑定与判定策略输入、verdict 规范化与 transform4.1 单次评估的调用链一次 ACS 评估只处理“一个 agent 的一个干预点”运行时按固定顺序执行SPECIFICATION.md查找命名干预点的配置按policy_target从快照解析策略目标值工具干预点解析tool_name_from并投影工具构建带空annotations的初步策略输入收集注解按注解名升序字典序调用 annotator构建最终策略输入解析绑定策略、准备类型化调用并交给策略 dispatcher把 dispatcher 输出规范化为 verdict校验 transformtransform决策且为enforce模式时应用之。运行时的核心特性是无状态、确定性、fail closed任何评估错误都必须产出denyverdict且 reason 取自保留标识符集合如runtime_error:manifest_invalid、runtime_error:policy_invocation_failed、runtime_error:path_missing等完整清单见 SPECIFICATION.md。从 policy-engine/core/src/lib.rs 的源码注释看策略决策运行时已重构到agent-control-speccrate固定 0.4.0-alpha.3本仓的corecrate 是兼容垫片通过agent_control_spec::policy、policy_output、cedar等模块再导出全部策略面。4.2 verdict 五种决策与两种模式dispatcher 返回的 JSON 对象经规范化得到allow、deny、transform三种 verdict外加warn、escalate两个意图SPECIFICATION.md决策规范化结果语义allowallow放行不改策略目标transformtransform{path, value}放行并把策略目标替换为value路径必须根于$targetdenydeny拒绝动作warnallowwarnings[]条目放行并记录警告escalatedenyapproval块转人工审批的“可提升 deny”模式由宿主层承载enforce模式应用 transform 并执行宿主义务evaluate_only模式只校验 transform 不应用用于影子运行观察策略决策。此外每次成功评估会派生两个动作身份input_identity与enforced_identity规范策略输入的 SHA-256审批路径绑定enforced_identity防止“批准动作 A 却执行动作 B”。4.3 transform 与多段改写实践transform是 verdict 请求值改写的唯一形式替换只作用于策略目标。bank_agent 示例展示了三种典型用法# pre_model_call向模型请求追加系统提示 transform: { path: $target.messages, value: array.concat(input.policy_target.value.messages, [{ role: system, content: Do not execute high-value transfers without explicit approval. }]) } # post_tool_call脱敏工具结果字段 transform: { path: $target.account_id, value: ACCOUNT-REDACTED } # output正则原位替换最终输出 transform: { path: $target.text, value: regex.replace(input.policy_target.value.text, CHK-[0-9], ACCOUNT-REDACTED) }若需在一个干预点做多步改写规范建议链式使用干预点例如pre_model_call的 annotator 把清洗文本写入annotations.name绑定策略再从该注解读取SPECIFICATION.md。同样escalate意图在 bank_agent 中用于大额转账人工审批pre_tool_call_verdict : { decision: escalate, reason: large_wire_transfer_requires_review, message: Wire transfers of 10000 or more require a human approval route. } if { input.intervention_point pre_tool_call input.tool.name wire_transfer input.policy_target.value.amount 10000 }五、安全与合规要点Fail closed 设计任何评估错误都产出deny策略输出含runtime_error:前缀 reason 会被拒绝宿主层另有host_error:*命名空间如host_error:approval_identity_mismatch、host_error:approval_unresolved策略不得使用任一保留命名空间。远程extends的信任门URL 型extends仅允许 HTTPS、不带环境凭据、有超时与体积上限并拒绝 loopback、私网、链接本地、云元数据端点等地址未 pin 的 URL 因宿主选择而被信任带integritysha256-base64或sha25664 位十六进制时校验失败必须 fail closed。已被移除的字段bundle_url、system_prompt_file、system_prompt_url在 retarget 到agent-control-spec后不再有实现清单声明它们会被拒绝runtime_error:manifest_invalid详见 docs/acs-retarget.md恢复远程 bundle 是上游提案而非宿主扩展。URL 源清单的额外限制通过 URL 加载的清单不得声明文件系统路径字段bundle、policy_path、entities_path、schema_path、data_paths等不得声明读取宿主环境密钥的 annotator 字段api_key_env、aws_*_env策略与提示必须内联提供。六、动手验证跑通一个完整示例仓库提供了可直接运行的端到端示例bank_agentRego 全干预点示例见 policy-engine/examples/bank_agent/清单 manifest.yaml 绑定 8 个干预点策略 bank_agent_rego.rego 覆盖输入风险拦截、模型响应审批绕过检测、大额转账升级审批、工具结果与输出脱敏等场景demo/run_demo.py可驱动演示Cedar 策略库自测进入 policy/cedar-lib/安装 Cedar CLI 后执行./run_tests.sh对每对.cedar与_test.json运行cedar check-parse与cedar run-tests规范与模式文档机器可读契约见 spec/schema/manifest.schema.json运行时语义、评估顺序、verdict 规范化与保留 reason 全量见 spec/SPECIFICATION.md清单结构说明见 spec/agt/AGT-MANIFEST-1.0.md。七、小结在 ACS 清单中治理 Agent 的策略声明路径非常清晰policies定义命名策略Rego 走bundlequeryCedar 走policy_set/policy_pathintervention_points通过policy.id完成绑定tools与annotators提供投影与注解上下文。运行时以无状态、确定性、fail closed 的方式把 dispatcher 输出规范化为allow/deny/transformverdictwarn与escalate作为意图被规范化transform被限制在$target内并可由宿主在enforce模式下应用。仓库既提供了覆盖八大干预点的 Rego 示例也提供了与 Rego 库语义镜像的 Cedar 内置策略库以及用于回归验证的 CLI 测试脚本可在选型与落地时直接复用。【免费下载链接】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),仅供参考
返回列表