
用 MCP 治理收据为 Agent 工具调用建立可验证审计链agent-governance-toolkit 的 mcp-receipt-governed 集成实战【免费下载链接】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 仓库中的 mcp-receipt-governed 集成包展开讲解如何让每一次 MCP 工具调用在通过 Cedar 策略评估后自动产生一张加密签名的治理收据signed governance receipt从而把策略决策与工具调用这两个事实绑定为可验证的审计凭证。读完本文你将掌握该包从安装、策略配置、工具调用治理、收据签名验签、哈希链完整性校验到离线审计脚本的完整用法并理解其背后的源码实现原理。为什么 MCP 工具调用需要治理收据在 Agent 系统中MCPModel Context Protocol服务器暴露的工具调用是 Agent 执行实际副作用读写数据、删除文件、访问外部系统的入口。传统的日志只能记录谁在什么时间调用了什么却无法证明这次调用当时是否通过了策略评估allow/deny 结论是什么调用发生时绑定的是哪一版策略policy id记录本身是否被事后篡改或删改。mcp-receipt-governed 的解法是在工具调用路径上插入一个McpReceiptAdapter它先执行 Cedar 策略评估再把工具名、Agent DID、策略 ID、决策结论、参数哈希、时间戳等字段打包成一张 GovernanceReceipt用 Ed25519 私钥签名后存入收据存储。任何一方拿到收据都可以独立验签、验证哈希链从而得到抗抵赖、可审计、可复现的 Agent 操作凭证。快速开始让第一个工具调用产生签名收据README 中的 Quick Start 可以直接运行。核心入口是McpReceiptAdapter构造时传入 Cedar 策略文本、策略 ID 和 Ed25519 签名种子from mcp_receipt_governed import McpReceiptAdapter adapter McpReceiptAdapter( cedar_policy permit(principal, action Action::ReadData, resource); forbid(principal, action Action::DeleteFile, resource); , cedar_policy_idpolicy:mcp-tools:v1, signing_key_hexa * 64, # Replace with real Ed25519 seed ) # Govern a tool call — produces a signed receipt receipt adapter.govern_tool_call( agent_diddid:mesh:agent-1, tool_nameReadData, tool_args{path: /data/report.csv}, ) print(fDecision: {receipt.cedar_decision}) print(fReceipt ID: {receipt.receipt_id}) print(fSigned: {receipt.signature is not None})运行这段代码会得到Decision: allow、一个 UUID 形式的receipt_id以及Signed: True。参数说明参数类型含义与取值cedar_policystrCedar 策略文本支持permit(...)/forbid(...)规则cedar_policy_idstr策略版本标识会写入收据默认defaultsigning_key_hexstr32 字节 Ed25519 私钥种子的十六进制串64 个 hex 字符传None则不签名storeReceiptStore可选的共享收据存储默认新建内存存储session_idstr可选会话 ID用于把同一会话的收据串成链默认自动生成 UUIDsigning_key_hexa * 64只是演示占位符生产环境必须替换为真实的随机种子可通过cryptography的Ed25519PrivateKey.generate()导出。安装与运行环境README 提供了两种安装方式均从仓库根目录执行# From the repository root — 仅标准库收据不签名 pip install -e agent-governance-python/agentmesh-integrations/mcp-receipt-governed # With Ed25519 signing support — 启用密码学签名 pip install -e agent-governance-python/agentmesh-integrations/mcp-receipt-governed[crypto]从 pyproject.toml 可以看出该包的设计取向包名为agentmesh_mcp_receipts当前版本5.0.0要求Python 3.11dependencies []核心功能策略解析、收据生成、内存存储、哈希零第三方依赖只用标准库即可运行[crypto]extra 安装cryptography46.0.7,48.0用于 Ed25519 签名与验签[dev]extra 额外包含pytest7.0用于运行测试。也就是说不装cryptography也能完成策略评估与收据生成但收据不带签名signature is None要获得非抵赖能力必须安装[crypto]。核心架构一次工具调用的完整治理链路README 给出了该适配器的内部架构其数据流如下MCP Tool Call │ ▼ ┌────────────────────┐ │ McpReceiptAdapter │ │ ┌──────────────┐ │ │ │ Cedar Policy │──┼──▶ allow / deny │ │ Evaluator │ │ │ └──────────────┘ │ │ ┌──────────────┐ │ │ │ Receipt │──┼──▶ GovernanceReceipt │ │ Generator │ │ (tool, agent, policy, decision) │ └──────────────┘ │ │ ┌──────────────┐ │ │ │ Ed25519 │──┼──▶ Signed receipt │ │ Signer │ │ │ └──────────────┘ │ │ ┌──────────────┐ │ │ │ ReceiptStore │──┼──▶ Audit trail │ └──────────────┘ │ └────────────────────┘对照 adapter.py 的McpReceiptAdapter.govern_tool_call实现这条链路被拆为四个明确步骤策略评估CedarPolicyEvaluator.evaluate(tool_name, {agent_did: ..., resource: ...})得到 allow/deny收据生成把tool_name、agent_did、cedar_policy_id、cedar_decision、args_hash、session_id、parent_receipt_hash组装成GovernanceReceipt签名若配置了signing_key_hex调用sign_receipt()对规范化载荷做 Ed25519 签名签名失败时抛出ReceiptSigningErrorfail-closed绝不静默放行入链存储store.add(receipt)追加到线程安全的审计存储。源码级解析收据的数据模型与密码学细节GovernanceReceipt收据到底记录了什么GovernanceReceipt 是一个dataclass字段如下字段说明receipt_idUUID v4唯一标识本次收据tool_name被治理的 MCP 工具名agent_did发起调用的 Agent 去中心化标识如did:mesh:agent-1cedar_policy_id决策所用的策略版本 IDcedar_decisionallow或deny默认deny即默认拒绝args_hash工具参数的 SHA-256 哈希timestampUnix 时间戳session_id可选会话 IDparent_receipt_hash前一张收据的载荷哈希构成哈希链signature/signer_public_keyEd25519 签名与签名者公钥error可选的执行错误信息RFC 8785JCS规范化让哈希可复现签名与哈希的前提是同一个收据在任何环境下序列化结果都完全一致。canonical_payload()实现了 RFC 8785 JCSJSON Canonicalization Scheme风格序列化sort_keysTrue按键排序消除键序不确定性separators(,, :)紧凑输出不带多余空白ensure_asciiFalse按 RFC 8785 §3.2.2.2 保留原始 UTF-8 字符而非\uXXXX转义签名相关字段signature、signer_public_key被排除在载荷之外因为它们恰恰是被签名的对象不能自引用。payload_hash()即对规范化载荷取 SHA-256。测试 test_receipt.py 验证了载荷的确定性、键序排序、Unicode 原样保留中文、阿拉伯文、emoji 均不转义等性质。工具参数的哈希由hash_tool_args()完成同样先做 canonical JSONsort_keysTrue再 SHA-256None与{}产生相同哈希键序不影响结果不同参数内容产生不同哈希。Ed25519 签名与验签sign_receipt()从 hex 编码的 32 字节种子恢复Ed25519PrivateKey对canonical_payload()的字节串签名并把签名与派生公钥写回收据verify_receipt()则用收据自带的公钥验签未签名或签名无效时返回False。从测试 test_receipt.py 的TestSignVerify可以看到关键对抗场景均被覆盖篡改cedar_decision后验签失败、伪造签名失败、未签名直接返回False。哈希链检测插入、删除与重放每一张收据都记录parent_receipt_hash前一收据的payload_hash()。verify_receipt_chain()对一个有序收据列表执行完整校验并返回错误列表空列表 全部通过首条收据不允许有parent_receipt_hash每条收据的父哈希必须等于前一条的payload_hash()连续性不允许重复receipt_id防止重放攻击有签名则验签公钥格式畸形或签名无效即报错提供trusted_keys时只接受列表内的可信签名者否则拒绝。测试TestVerifyReceiptChain演示了删除中间收据[r1, r3]会被哈希链断裂捕获插入伪造收据[r1, evil, r2, r3]同样被捕获篡改工具名会使签名校验失败。这意味着审计方无需重放完整会话日志仅凭哈希链即可发现任何增删改。ReceiptStore内存审计仓库ReceiptStore 是线程安全内部threading.Lock的内存存储提供add()追加收据重复receipt_id直接抛ValueError防重放query(agent_did, tool_name, cedar_decision)按 Agent、工具、决策结论组合过滤export()导出为字典列表含payload_hash可直接落盘get_stats()返回total、allowed、denied、unique_agents、unique_tools统计clear()/count清空与计数。多个适配器可共享同一个ReceiptStore测试test_shared_store验证了两个 adapter 写入同一 store 的场景。收据与 SLSA 供应链凭证的衔接GovernanceReceipt.to_slsa_provenance()可以把收据转换为in-toto Statement v1 / SLSA provenance v1谓词subject是工具pkg:agentmesh/tool/namedigest 为args_hashresolvedDependencies指向父收据哈希buildDefinition记录agent_did、cedar_policy_id、cedar_decision。这为把 Agent 操作纳入供应链可追溯体系如 SBOM、凭证归档提供了标准接口。实战模式治理后执行govern_and_execute除先治理、后由外部执行的govern_tool_call外适配器还提供govern_and_execute()把策略检查、收据生成与工具执行封装为一个完整生命周期def read_data(path: str ) - str: return fdata from {path} receipt, result adapter.govern_and_execute( agent_diddid:mesh:agent-1, tool_nameReadData, tool_fnread_data, tool_args{path: /data/report.csv}, ) print(receipt.cedar_decision, result)从 adapter.py 的实现看其语义是决策为allow时才调用tool_fn(**tool_args)工具执行抛异常时工具本身不再执行副作用deny时tool_fn根本不会被调用异常会被捕获并写入receipt.error execution_failed: ...收据仍然留档。测试 test_adapter.py 的TestGovernAndExecute明确验证了三个关键断言允许的工具正常执行并返回结果、被拒的工具call_count 0从未被调用、执行异常被记录到收据。策略评估的两种路径与默认拒绝语义CedarPolicyEvaluator的评估逻辑分两层源码 adapter.py首选 agentmesh 内置评估器若环境中安装了agentmesh.governance.cedar.CedarEvaluator则委托其做完整 Cedar 策略求值回退内联解析ImportError时退化为对策略文本的正则解析按forbid优先于permit的顺序判断动作是否被允许并支持permit(principal, action, resource);全放行规则。需要特别强调的是**默认拒绝default deny**语义测试TestPolicyEvaluation给出了四条明确结论明确permit的动作 →allow明确forbid的动作 →deny策略未列出的动作 →deny空策略cedar_policy→ 一律deny。这意味着策略的疏漏不会导致越权放行符合 fail-closed 的安全基线。离线审计用 verify_receipts.py 验证收据链仓库自带了离线验证脚本 verify_receipts.py它无需网络即可从ReceiptStore.export()导出的 JSON 文件重建收据链并逐条校验# 将 ReceiptStore.export() 的列表保存为 receipts.json 后执行 python agent-governance-python/agentmesh-integrations/mcp-receipt-governed/scripts/verify_receipts.py receipts.json # 结构化输出适合接入 CI/CD python agent-governance-python/agentmesh-integrations/mcp-receipt-governed/scripts/verify_receipts.py receipts.json --json脚本对每条收据依次检查哈希链是否连续parent_receipt_hash是否等于上一条payload_hash、导出时附带的payload_hash是否与重建值一致、Ed25519 签名是否有效。退出码约定0 全部通过、1 链存在完整性错误、2 文件加载失败。未签名的收据会给出⚠️ Unsigned receipt警告而不会误判为通过。这一工具让事后审计成为一条独立、可自动化、可入 CI 的检查线。运行测试验证实现README 给出的测试方式cd agent-governance-python/agentmesh-integrations/mcp-receipt-governed pip install -e .[dev] pytest tests/ -v测试集 test_adapter.py 与 test_receipt.py 覆盖策略评估、收据字段、签名/验签往返、哈希链完整性删除/插入/篡改/重放检测、可信签名者白名单、存储查询统计与 SLSA 输出结构可在不安装任何 MCP SDK 或 AgentMesh 的情况下独立验证适配器逻辑是理解该包行为的活文档。安全要点小结签名失败即失败关闭sign_receipt异常会向上抛ReceiptSigningError不会产生未签名却宣称已治理的收据测试test_signing_failure_raises验证了该路径默认拒绝未列出的动作、空策略一律deny策略覆盖不足不会导致越权哈希链防篡改删除、插入、重放收据均可被verify_receipt_chain检测配合trusted_keys可限定可信签名者规范化保证可复现RFC 8785 JCS 序列化 SHA-256任何环境重建的哈希一致收据不泄露参数原文工具参数只以args_hash形式入库避免敏感参数明文落盘。本文所述实现均可直接查看 mcp_receipt_governed 包源码 与其 测试目录 进行印证。该集成包遵循 MIT 许可参见 agentmesh-integrations/LICENSE并作为 AgentMesh 生态的平台插件之一维护更多生态背景可参阅 agentmesh-integrations 总览。【免费下载链接】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),仅供参考