Agent Governance Toolkit 实战:在 kubernetes-sigs/agent-sandbox 命令进入 Pod 之前完成策略拦截
Agent Governance Toolkit 实战在 kubernetes-sigs/agent-sandbox 命令进入 Pod 之前完成策略拦截【免费下载链接】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本文以仓库中的 k8s-agent-sandbox-governed 示例 为蓝本讲解如何用 Agent Governance Toolkit下称 AGT的govern()包装器对 Agent 向kubernetes-sigs/agent-sandbox沙箱 Pod 下发的每条命令做发送前策略检查。读完本文你将掌握一条可复用的治理模式自由文本命令如何被预分类为离散动作类型、policy.yaml如何以 fail-closed 语义裁决、被拒命令为何在申领任何沙箱 Pod 之前就被拦下以及这套方案的已知边界与扩展方向。背景agent-sandbox 提供了隔离但不提供语义策略kubernetes-sigs/agent-sandbox是 CNCF SIG 主导的 Kubernetes 原生执行隔离方案为 Agent 工作负载提供 Pod 级沙箱与按模板生成的NetworkPolicy。它的 CRD、控制器与 sandbox-router 均来自上游项目自身的发布版本本示例不做任何改动只在其 Python SDK 之上加了一层客户端侧治理包装。关键缺口在于agent-sandbox 的隔离能力集中在 L3/L4 网络层与进程/Pod 隔离它本身不裁决Agent 要求沙箱执行的内容是否安全。正如示例驱动脚本 run_agent.py 的 docstring 所写网络策略只覆盖 L3/L4不覆盖命令内容。rm -rf /这类命令一旦进入 Pod隔离层只能在事后兜底——把它关在容器里却无法阻止它发生。AGT 的govern()正好填补这一层它在驱动脚本自己的进程内、命令发往沙箱 Pod 执行 API之前完成评估被拒命令根本不会到达 Pod而不是到达后再被隔离手段拦截。这构成纵深防御defense-in-depth治理是隔离之前的检查不是隔离的替代品隔离仍是最后一道防线。整体架构一次调用的完整路径Agent driving script (run_agent.py) | v _classify_command() -- 预分类把命令 本地脚本正文归类为离散 action.type | 策略 DSL 只做字段比较不做自由文本匹配 v govern(...) -- 用 {type: ..., command: ...} 上下文评估 policy.yaml |-- allow -- create_sandbox() - files.write() - sandbox.commands.run(...) -- deny -- 抛出 GovernanceDenied任何沙箱 Pod 都未被申领两个关键设计点被拒命令永远不会甚至不会申领一个沙箱 Pod——决策发生在create_sandbox()之前避免了为治理本来就会拒绝的请求白白消耗 warm-pool 中的 Pod 名额。职责分离policy.yaml拥有 allow/deny 规则与审计线索run_agent.py负责把自由文本命令/脚本预分类成策略条件能够匹配的离散action.type值。快速开始五分钟跑通 allow 与 deny 两条路径1. 准备一个 agent-sandbox 集群按 agent-sandbox 上游的 quickstart 指南在任意集群默认 kind的agent-sandbox-demo命名空间里跑起一个python-warmpool。2. 安装依赖cd examples/k8s-agent-sandbox-governed pip install -r requirements.txtrequirements.txt 只有两个依赖agent-governance-toolkit[full]5.0.0—— 本仓库提供govern()/GovernanceDeniedk8s-agent-sandbox0.1.0—— 上游 Python SDK用于与 agent-sandbox 的 sandbox-router 通信。不需要任何其他第三方包。3. 运行良性脚本——放行python run_agent.py hello_world.py --warmpool python-warmpool --namespace agent-sandbox-demohello_world.py 只是一行print(Hello from a governed sandbox pod)被分类为shell_exec命中唯一一条 allow 规则输出Hello from a governed sandbox pod4. 运行破坏性脚本——下发前即被拒绝python run_agent.py destructive.sh --interpreter bash \ --warmpool python-warmpool --namespace agent-sandbox-demodestructive.sh 是一个刻意构造的夹具正文只有一行rm -rf /nonexistent-governance-test-path路径指向不存在的目录绝不会真正造成破坏注释中明确说明这是为了在不真正执行磁盘擦除命令的前提下演示 deny 路径。输出Command blocked by governance policy: Action denied by policy rule block-destructive-commands: Commands classified as destructive (rm -rf, mkfs, dd, disk wipes, fork bombs, pipe-to-shell installers) are blocked before dispatch.进程退出码为1rm -rf从未在 Pod 内执行——对比一下靠 Pod 自身隔离去事后兜住它的方案。深入 run_agent.py自由文本 → 离散 action.type 的预分类AGT 的策略条件 DSL 面向的是结构化字段比较而不是自由文本正则。因此所有模式匹配都被前置到_classify_command()见 run_agent.py它把命令与脚本正文归入三类destructive、credential_exfil、shell_exec。值得注意的实现细节命令与脚本正文分开匹配不拼接成一个字符串避免curl 出现在命令末尾、| sh出现在脚本开头这类跨边界伪命中。argv 层与原始文本层双层检测基于shlex的 token 级解析_line_segments/_is_destructive_segment解决引号/转义/flag 重排绕过例如r\m -rf /、rm -rf /、rm -r -f /、dd of/dev/sda if/dev/zero_strip_wrapper剥掉sudo/env/xargs包装含sudo -u root rm -rf /这类带参 flag让包装后的命令与裸rm -rf /归一到同一 argv原始文本层_DESTRUCTIVE_SYNTAX_PATTERNS兜住 argv 解析看不穿的形态fork bomb、管道安装器curl ... | sh、bash -c ...、子 shell$(...)、重定向前缀、以及脚本正文里os.system(rm -rf /)这类嵌入其他语言字符串的情况。无法解析的引号一律 fail-safe 视为破坏性_line_segments返回 None 时直接归类为 destructive。命令行参数解析上main() 自行以字面--切分脚本参数避免argparse.REMAINDER吞掉自家 flag。policy.yaml 详解fail-closed 的策略骨架policy.yaml 是治理的核心声明完整内容如下apiVersion: governance.toolkit/v1 name: agent-sandbox-command-policy description: Governs commands dispatched from an agents driving script to a kubernetes-sigs/agent-sandbox pods execution API. Evaluated in the agents own process, before the command ever reaches the pod — this complements (does not replace) the sandboxs NetworkPolicy/pod isolation, which is the last line of defense if a command does get through. # Fail closed: any action.type not explicitly allowed below is denied, # including types _classify_command() doesnt yet know how to detect. default_action: deny rules: - name: block-destructive-commands condition: action.type destructive action: deny description: Commands classified as destructive (rm -rf, mkfs, dd, disk wipes, fork bombs, pipe-to-shell installers) are blocked before dispatch. - name: block-credential-exfil condition: action.type credential_exfil action: deny description: Commands that read AWS/K8s credential material and forward it externally (curl/wget/nc combined with env var expansion of AWS_* or KUBECONFIG) are blocked before dispatch. - name: allow-shell-exec condition: action.type shell_exec action: allow description: Commands that didnt match any higher-risk classification are explicitly allowed. This is the only allow rule — anything else falls through to default_action: deny.三个规则之外最值得注意的是default_action: deny任何未显式放行的action.type都会被拒绝包括_classify_command()未来新增的分类、甚至它现在还没能力识别的类型。这符合底层 policy.py 中Policy.default_action的默认值语义缺省即deny。从源码层面看条件 DSL 由 PolicyRule._eval_expression 实现除之外还支持!、in [...]成员判断、contains、startswith、endswith、数值比较 、布尔属性真值以及and/or复合条件表达式超长2000 字符、嵌套过深20 层或语法无法识别时非 allow 规则按命中处理fail-closedallow 规则按未命中处理防止恶意输入通过触发异常绕过规则见 policy.py 的 fail-closed 注释。策略文档还支持apiVersion: governance.toolkit/v1的版本校验与extends父策略继承子策略不能削弱父级 deny 规则。govern() 集成模式包装 dispatch申领沙箱发生在治理之后示例的核心集成代码见 README.md 的 Integration pattern及 run_agent.py 的完整实现from agentmesh.governance import govern, GovernanceDenied def _dispatch(action): # Sandbox is claimed here, inside the governed call, so a denied # action never costs a pod claim. sandbox client.create_sandbox(warmpool..., namespace...) sandbox.files.write(remote_name, script_bytes) return sandbox.commands.run(action[command], timeout60) governed_run govern( _dispatch, policypolicy.yaml, agent_idrun_agent:agent-sandbox-demo, ) try: result governed_run(action{type: action_type, command: command}) except GovernanceDenied as e: print(fblocked: {e})底层原理见 govern.pygovern()工厂govern.py把任意可调用对象包装成GovernedCallable返回的包装对象与原函数 API 兼容functools.update_wrapper。GovernedCallable.__call__govern.py的执行顺序用 kwargs 构建评估上下文action键直接作为{type: ..., command: ...}字典传给策略→ 策略引擎evaluate默认冲突策略deny_overrides任何 deny 优先→ 审计policy_evaluation事件含命中的规则名、原因、评估耗时→ 若不允许则调用on_deny回调或抛GovernanceDenied→ 只有允许才真正执行被包装的_dispatch。GovernanceDeniedgovern.py的异常消息就是 README 里展示的那句Action denied by policy rule : 其中 rule 与 reason 来自PolicyDecision。govern()还支持audit_fileHash 链 HMAC 签名的 JSONL 审计落盘密钥需显式传入或设置AGT_AUDIT_SECRET_KEY环境变量、on_deny回调、ring执行环、require_approval审批流、rego_path/rego_content并行加载 OPA 策略等扩展能力详见 GovernanceConfig。三个容易被忽略的安全细节单次读取脚本内容run_agent.py分类与上传共用同一次read_bytes()避免 TOCTOU——文件在两次读取之间被替换以安全版本通过审查、以恶意版本执行。shlex.join()组装命令run_agent.pyk8s-agent-sandbox的commands.run()只接受单个 shell 命令字符串而非 argv 列表因此脚本参数用shlex.join()逐个加引号防止;、|、$()、反引号等元字符被沙箱 Pod 的 shell 当作额外语法解释。finally块保证sandbox.terminate()run_agent.py每次运行后单个沙箱都会被终止不留残留。测试验证test_run_agent.py 里的反绕过样本test_run_agent.py 通过参数化测试固化了分类器的行为值得借鉴的是它把绕过形态分成了三类链式与包装绕过echo ok rm -rf /、$(rm -rf /)、sudo -u root rm -rf /、env FOObar rm -rf /、echo hi | xargs rm -rf引号/转义/flag 重排绕过rm -r -f /、r\m -rf /、mkfs.ext4 /dev/sda1、dd of/dev/sda if/dev/zero仅原始文本层能抓到的形态nohup/timeout/exec/eval/busybox/doas/su -c/bash -c/子 shell/函数体/find -exec/重定向前缀/!前缀以及脚本内嵌os.system(rm -rf /)。同时用一组良性命令如transform -rf foo、rm file.txt、cat file.txt | grep foo防止误杀回归无法解析的引号echo unterminated必须 fail-safe 归类为 destructive。清理run_agent.py已在每次调用后用finally终止其创建的单体沙箱无需按次清理。共享资源按需拆除kubectl delete sandboxwarmpool python-warmpool -n agent-sandbox-demo kubectl delete sandboxtemplate python-sandbox-template -n agent-sandbox-demo若为示例专门创建了集群再按 agent-sandbox quickstart 的 Cleanup 步骤如kind delete cluster ...整体删除。已知局限与扩展建议原文明确声明了三条边界部署前必须知晓_classify_command()是演示级过滤器不是生产级检测器。匹配大小写不敏感、flag 顺序容忍但模式集本身很窄、可以被绕过例如把凭据管道给curl/wget/nc之外的命令、或使用模式集中未覆盖的破坏/外传手法。不要把这份 policy 原样当作生产风险模型——它是起点不是终点。分类只发生一次且只针对本地上传的脚本副本。它不覆盖沙箱运行时下载或动态生成的代码。commands.run()只接受单条 shell 命令字符串shlex.join()只保证参数不被 shell 二次解释不改变脚本运行后的行为——恶意脚本正文仍只受_classify_command()的模式匹配约束。扩展方向按你自己的风险模型扩展_classify_command()与策略的rules列表default_action: deny保证新增但未识别的分类默认被拒远程集群场景需把SandboxLocalTunnelConnectionConfig面向kubectl port-forward或本机 kind/minikube替换为 SDK 提供的直连/集群内连接配置。本示例的 README、policy 与驱动脚本虽标注由 Claude Code 起草但已经作者在真实集群上人工复核验证见 README.md 的 Disclaimer 说明。参考资料示例入口与完整说明examples/k8s-agent-sandbox-governed/README.md驱动脚本分类器 govern 包装examples/k8s-agent-sandbox-governed/run_agent.py策略文件examples/k8s-agent-sandbox-governed/policy.yaml反绕过测试样本examples/k8s-agent-sandbox-governed/test_run_agent.pygovern()底层实现agent-governance-python/agent-mesh/src/agentmesh/governance/govern.py策略引擎与条件 DSLagent-governance-python/agent-mesh/src/agentmesh/governance/policy.py【免费下载链接】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),仅供参考

相关新闻

Swagger UI在线验证实战指南:快速掌握Schema校验与错误标记

Swagger UI在线验证实战指南:快速掌握Schema校验与错误标记

Swagger UI在线验证实战指南:快速掌握Schema校验与错误标记 【免费下载链接】swagger-ui Swagger UI is a collection of HTML, JavaScript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API. 项目地址: https:/…

2026/9/20 2:16:44 阅读更多 →
OWASP Top 10 2025深度解读:与2021版对比及落地防护指南

OWASP Top 10 2025深度解读:与2021版对比及落地防护指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 2:15:44 阅读更多 →
安卓阅读3.0:本地化+结构化+智能化的纯净阅读范式

安卓阅读3.0:本地化+结构化+智能化的纯净阅读范式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 2:15:44 阅读更多 →

最新新闻

郑州seo顾问热狗hotdoger拆解3个实战案例教你搞定网站UI

郑州seo顾问热狗hotdoger拆解3个实战案例教你搞定网站UI

郑州seo顾问热狗hotdoger拆解3个实战案例教你搞定网站UI 不会写代码却想做个像样的官网?这种焦虑我懂。 很多老板或运营负责人,手里攥着预算,脑子里有画面,但对着设计师提的需求,心里直打鼓:这到底合不合理?怎么验收?怎么让网站既能留住人,又能被搜索引擎抓到?…

2026/9/21 6:44:12 阅读更多 →
2026最新wordpress调用字段避坑指南

2026最新wordpress调用字段避坑指南

2026最新wordpress调用字段避坑指南 找建站公司怕被坑高价?这是很多老板和运营新人的心头大患。很多公司报价动辄几万,说得天花乱坠,其实底层技术也就那样。2026最新的数据显示,超过60%的中小企业网站其实可以用更透明的开源方案搞定,比如WordPress。今天咱们不聊虚的,直接拆解Word…

2026/9/21 6:29:22 阅读更多 →
实战案例揭秘:wordpress删除rss的3个关键坑

实战案例揭秘:wordpress删除rss的3个关键坑

实战案例揭秘:wordpress删除rss的3个关键坑 域名解析改错,服务器配置没跟上,导致后台能改前台打不开?这种“域名服务器搞不懂”的噩梦,我在给客户做运维时见过太多次。上个月刚处理的一个 实战案例…

2026/9/21 6:15:47 阅读更多 →
3个实战案例拆解i网站建设报价,拒绝被坑

3个实战案例拆解i网站建设报价,拒绝被坑

3个实战案例拆解i网站建设报价,拒绝被坑 网站做好了没人访问?这不仅是流量焦虑,更是建站前的预算盲区。很多老板拿着“i网站建设”这个模糊的概念去询价,结果被报出从几千到几十万不等的天价,心里直打鼓。…

2026/9/21 6:03:14 阅读更多 →
网站建设的探讨与研究速查手册

网站建设的探讨与研究速查手册

网站建设探讨与研究:5大费用陷阱与选型注意事项 网站做好了没人访问,这是无数甲方老板和运营负责人深夜里最真实的焦虑。钱花出去了,服务器租了,域名买了,甚至SEO优化都上了,结果后台流量曲线平得像心电图停搏。很多人以为技术决定成败,但在我看来, 注意事项 往往比技术本身更决定生死。…

2026/9/21 5:46:06 阅读更多 →
Simulink与FlightGear联合仿真:飞行器控制算法三维可视化验证平台搭建

Simulink与FlightGear联合仿真:飞行器控制算法三维可视化验证平台搭建

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 5:38:52 阅读更多 →

日新闻

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and …

2026/9/21 0:00:01 阅读更多 →
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,…

2026/9/21 0:00:01 阅读更多 →
Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

桌面应用AI 应用插件系统 【免费下载链接】Wox A cross-platform launcher that simply works 项目地址: https://gitcode.com/gh_mirrors/wo/Wox 点击查看 免费下载 全功能插件(Full-featured Plugin)是 Wox 三类插件实现方式中能力最完整的…

2026/9/21 0:00:01 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →