AGT Agent Governance Toolkit v5.0.0 · microsoft/agent-governance-toolkit Policy · Identity · Sandbox · Audit — fail-closed by design PEP ID

Agent Governance Toolkit v5.0.0

微软开源 · 给自主 AI Agent 上"操作系统中断层"的治理内核
github.com/microsoft/agent-governance-toolkit MIT · Public Preview OWASP Agentic Top10 — 10/10 Covered 5.6k★ stars

1一句话:它是什么

AGT 是微软 2025-2026 力推的开源 Agent 治理运行时(Agent Governance Runtime)。 本质是给 AI Agent 的每一次 工具调用 / 消息发送 / Agent 间委托 加一道 确定性代码拦截层——在 LLM 的意图真正"上线路"之前, 由确定性代码(不是 prompt、不是模型自我约束)判 allow / deny。

一句话给技术人: 它不是"AI 安全护栏"(那种写 prompt 让模型别干坏事), 而是把操作系统的强制访问控制(MAC)思想搬到了 Agent 运行时上—— 类似 SELinux/AppArmor 之于进程,AGT 之于 Agent。被 deny 的动作不是"不太可能发生", 而是结构上不可能发生

定位坐标

不是什么

不是 SAST/DAST、不是模型层护栏、不是 prompt 注入检测器、不是 fuzzing 工具。

是什么

Agent 行为的策略执行点(PEP) + 身份 + 审计 + 沙箱,四件套一体的运行时。

类比

= Linux Kernel LSM + sudoers + auditd + seccomp,但运行在 Agent 的 tool-call 边界上。

2它要解决的真实痛点

README 开篇直接点出企业上线 Agent 时回答不了的三个问题:

① 这个动作允许吗?

一个 Agent 同时有 send_emailquery_database 权限, OAuth scope / IAM role 只管"能不能连到这个服务",管不了"连上之后干什么"—— 它不该能 drop_table

② 是哪个 Agent 干的?

多 Agent 系统里 5 个 Agent 共用一个 API key,出事时"是某个 Agent 干的"根本没法做应急响应。

③ 能证明发生了什么吗?

审计/合规要防篡改的决策记录:当时哪条策略生效、Agent 申请了什么、为什么 allow/deny。

为什么 prompt 护栏不够: AGT 援引 Andriushchenko (ICLR 2025) 等研究—— 对 GPT-4o / Claude 3 / Llama-3 的自适应越狱攻击成功率 100%。 结论:prompt 级防护是"对随机系统的礼貌请求",不是控制面。 AGT 的打法是不在 prompt 里赢这场仗,而在模型意图到线路之间用确定性代码截断。

3核心机制:截在"上线路"之前

Agent (LLM) 输出 tool_call 意图 AGT Kernel(确定性代码,非 LLM) ① Policy Engine 按 YAML / OPA / Cedar 策略求值 ② Identity SPIFFE / DID / mTLS 验明正身 allow deny Tool 真正执行 动作上线路 GovernanceDenied 动作根本到不了 tool Audit Log 防篡改决策记录 → Decision Record

关键点:拦截发生在应用代码里,在模型意图到达 wire 之前。被 deny 的不是"概率低", 是 structurally impossible。这是它和所有 prompt-level 防护的根本分野。

最小用法 — 两行包住任意 tool

from agentmesh.governance import govern

safe_tool = govern(my_tool, policy="policy.yaml")   # 每次调用都过策略

safe_tool(action="drop", table="users")
# → GovernanceDenied: Action denied by policy rule 'block-destructive'

策略是声明式 YAML,不写代码:

# policy.yaml
apiVersion: governance.toolkit/v1
name: production-policy
default_action: allow
rules:
  - name: block-destructive
    condition: "action.type in ['drop', 'delete', 'truncate']"
    action: deny
  - name: require-approval-for-send
    condition: "action.type == 'send_email'"
    action: require_approval
    approvers: ["security-team"]

4四大能力层(每一层可选)

README 明说:"每一层都是可选的,先用 govern(),风险增长了再加层。多数团队只跑策略执行 + 审计。"

4 Audit / SRE 防篡改 Decision Record · agt verify --strict · 满足合规"能证明发生了什么" 3 Sandboxing NonoSandboxProvider · Landlock(Linux)/Seatbelt(macOS) 内核级 · RingEnforcer 命令黑名单 2 Identity SPIFFE SVID / DID · mTLS · 联邦到 Entra / TEE · 解决"5 个 Agent 共用一个 key" 1 Policy Engine(核心层) YAML / OPA / Cedar · Rust ACS 核心经 FFI 跨语言 · allow / deny / require_approval
  1. 策略引擎 (Policy Engine)核心层
    支持 YAML / OPA/Rego / Cedar 三种策略语言, 对每个 action 求 allow / deny / require_approval。 底层核心是 Rust 写的 ACS 引擎(policy-engine/core), 通过 FFI 暴露给 Python / Node / .NET / Go,跨语言语义一致。
  2. 身份 (Identity)SPIFFE/DID/mTLS
    每个 Agent 有可验证身份(SPIFFE SVID / 去中心化 DID),Agent 间通信走 mTLS。 解决"5 个 Agent 共用一个 key,出事分不清"的问题。可联邦到 Entra / TEE(可信执行环境)。
  3. 沙箱 (Sandboxing)Landlock/Seatbelt
    v5 新增 NonoSandboxProvider:Linux 走 Landlock、macOS 走 Seatbelt 的内核级沙箱, 过滤出站、AST 预扫。RingEnforcer 还带命令黑名单(;&| 元字符剥离防注入绕过)。 给 Agent 跑 subprocess / 文件操作时兜底。
  4. 审计 (Audit / SRE)防篡改
    每次决策落 Decision Record(防篡改),agt verify --evidence ... --strict 可在 CI 里按证据强度 fail。agent-sre 模块提供运行时 SRE。 这一层满足审计/合规的"能证明发生了什么"。

5多语言 SDK + IDE/框架集成

AGT 是个巨型企业 monorepo,5 大语言一等公民,所有包在 v5 对齐到 5.0.0。 4.0 时还把 45 个 Python 包合并成 5 个分发(core / runtime / sre / cli / full)。

语言集成形态
Pythonagent-governance-toolkit[full] (PyPI)govern() 装饰器、AgentControl 运行时、CLI agt
TypeScript/Node@microsoft/agent-governance-sdk (npm)PolicyEngine
.NETMicrosoft.AgentGovernance (NuGet)GovernanceKernel + MCP WithGovernance() 扩展
Rustagentmesh crateAgentMeshClient::execute_with_governance()
Gogithub.com/microsoft/agent-governance-toolkit/agent-governance-golangclient.ExecuteWithGovernance()

Claude Code

官方插件市场:/plugin install agt-governance@agent-governance-toolkit

OpenCode / Antigravity / Copilot CLI

各有独立子仓集成(agent-governance-opencode 等)

MCP

.NET 有 WithGovernance();另有 agentmesh-mcp Rust 包

CLI 工具(任何框架都可用):

agt doctor                          # 检查安装
agt verify --evidence ./e.json --strict  # CI 里按证据强度 fail
agt red-team scan ./prompts/ --min-grade B # prompt 注入审计
agt lint-policy policies/            # 校验策略文件

6对齐的合规框架

OWASP Agentic Top10

10/10 Covered
Agent 专用风险 Top10 全覆盖(README 徽章)。

AARM Extended

R1–R9
Agent Attack & Risk Model 扩展要求。

ATF

All 5 Elements
Agentic Trust Framework 全 5 要素。

注意(技术视角): "10/10 Covered" 是 README 徽章声称,实际文档里 docs/compliance/owasp-agentic-top10-architecture.md 是逐条映射。是"架构覆盖"而非"每条都 100% 解决"——比如 prompt 注入只能限制后果(截断动作), 无法从根上消除注入本身(这点 README 自己也承认)。读文档时区分"覆盖"和"根治"。

7设计哲学:fail-closed(默认拒绝)

fail-open(很多 runtime 的默认)

策略引擎连不上 / 超时 / 策略解析失败 → 放行,怕影响业务可用性。
后果:故障/攻击时治理层恰好失效,Agent 在"无约束"窗口期干坏事。

AGT = fail-closed

求值失败、无定价、策略不匹配 → 拒绝并抛错
代价:治理层故障 = Agent 不可用;但这是安全系统该有的取舍—— "宁可全停,不可裸奔"。

典型体现:CI 里 agt verify --strict,证据不达标直接 fail 构建; 你的扩展层(如 enterprise 配置)设了预算但模型无定价 → 抛错而非静默放行。

8对比与边界(给你做技术决策用)

vs. prompt 级 / 模型层护栏

prompt 护栏 / 模型对齐AGT
拦截位置模型内部(概率)tool-call 边界(确定性代码)
被拒动作概率低,仍可能发生结构上不可能(到不了 tool)
可审计弱(模型黑盒)强(防篡改决策记录)
对抗自适应攻击已知 ASR 接近 100%攻击者改不了应用层代码

解决什么(边界)

和你的 ARG 项目的关系: AGT 是中心化、平台化、fail-closed的企业重型方案(策略引擎→Rust ACS、 身份→Entra/TEE、库→运维平台);你的 ARG 是Local-First / Fail-Open / 零依赖 / Tracing-First 的轻量侧。 两者哲学相反,但在纵深防御里互补:ARG 做本地快速 tracing 与软拦截,AGT 做中心化强执行。

95 分钟上手

# 1. 装(Python 3.10+)
pip install "agent-governance-toolkit[full]"

# 2. 写策略 policy.yaml(见第③节)

# 3. 包住你的 tool
from agentmesh.governance import govern
safe_tool = govern(my_tool, policy="policy.yaml")

# 4. 自检 / CI
agt doctor
agt verify --evidence ./agt-evidence.json --strict

进阶用 AgentControl(完整 manifest,可编排多 Agent 身份 + 沙箱 + 审计):

from agent_control_specification import AgentControl

runtime = AgentControl.from_path("manifest.yaml")
result = runtime.evaluate("input", {
    "envelope": {"agent_id": "example-agent"},
    "input": {"body": {"action": "web_search", "params": {}}},
})
print(result.verdict)
runtime.close()
本地克隆 vs GitHub: 你当前目录下的本地克隆是 v5.0.0(HEAD/unreleased,比 GitHub Latest Release v4.0.0 还新)。 含了 v5 的 ACS(策略层)、NonoSandboxProvider、RingEnforcer 命令黑名单等 4.x 没有的东西。 研读以本地为准,但要 aware 在线用户装的稳定版可能还是 4.x。