codethor0/llm-agent-control-plane

GitHub: codethor0/llm-agent-control-plane

这是一个用于保护工具连接LLM智能体的防御性参考实现,解决了如何在模型外部实施安全控制的问题。

Stars: 0 | Forks: 0

# llm-agent-control-plane [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/816117701c064825.svg)](https://github.com/codethor0/llm-agent-control-plane/actions/workflows/ci.yml) [![Release](https://img.shields.io/github/v/release/codethor0/llm-agent-control-plane)](https://github.com/codethor0/llm-agent-control-plane/releases) [![Python 3.12](https://img.shields.io/badge/python-3.12-blue)](https://www.python.org/downloads/release/python-3120/) [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE) [![Tests](https://img.shields.io/badge/tests-248%20passing-brightgreen)](https://github.com/codethor0/llm-agent-control-plane/actions) [![Security](https://img.shields.io/badge/security-deny--by--default-critical)](SECURITY-CONTROLS.md) [![Docker](https://img.shields.io/badge/docker-verified-blue)](Dockerfile) 用于通过**外部控制平面**来保护工具连接 LLM 智能体的生产导向型防御参考实现。 **核心理念:** 模型可以提问,代理负责决策。 此仓库是一个**本地、模拟**的演示。它展示了如何将授权、策略、来源检查、人工审批、输出过滤和审计日志**置于**模型外部。面向学习控制平面模式的安全工程师、防御者和构建者。 **边界说明:** 此项目尚未成为可直接部署的生产服务。生产部署仍需身份认证、持久化、密钥管理、企业级数据防泄漏、可观测性、部署加固和运营审查。 ## 发布状态 | 项目 | 状态 | |------|------| | 仓库 | https://github.com/codethor0/llm-agent-control-plane | | CI | `main` 分支上的 GitHub Actions(上方徽标);供应链工作流:CodeQL、Gitleaks、Trivy、SBOM | | 最新版本 | [v0.2.5](https://github.com/codethor0/llm-agent-control-plane/releases/tag/v0.2.5) (安全的 LLM 适配器接口);[v0.2.4](https://github.com/codethor0/llm-agent-control-plane/releases/tag/v0.2.4);[v0.2.3](https://github.com/codethor0/llm-agent-control-plane/releases/tag/v0.2.3) | ## 一键快速启动 需要 **Python 3.12**(参见 [Python 版本](#python-version))。 ``` make setup && make demo ``` 完整验证(当守护进程运行时包含 Docker): ``` make setup && make validate ``` ## Python 版本 | 环境 | Python | |------|--------| | 项目目标版本 | **3.12.x** (`requires-python = >=3.12,<3.13`) | | Docker / GitHub Actions | 3.12 | | 本地主机 3.14+ | **不匹配** — 请使用 `pyenv install 3.12`、`asdf` 或 Docker | 验证您的虚拟环境: ``` .venv/bin/python scripts/check_python_version.py ``` ## Docker 快速启动 ``` docker compose build docker compose run --rm app python -m pytest make demo ``` ### Docker 故障排除 | 症状 | 措施 | |------|------| | `Cannot connect to the Docker daemon` | 启动 Docker Desktop 或系统 Docker 服务,然后重试 `docker compose build`。 | | 构建在 `pip install` 阶段失败 | 确保网络访问;使用 `docker compose build --no-cache` 重新构建。 | | 测试结果与主机不同 | Docker 运行的是代码的镜像副本(非挂载卷)。更改后请重新构建。 | 除非 `docker compose build` 和 `docker compose run --rm app python -m pytest` 在您的机器上成功,否则**不声称** Docker 验证通过。 ## 此仓库的功能 - 展示围绕模拟 LLM 智能体的确定性**外部控制平面** - 强制执行**默认拒绝**策略、**工具代理**授权、**来源**规则、**人工审批**和**输出过滤** - 写入结构化的、**经过脱敏处理的 JSONL** 审计事件 - 提供本地 **FastAPI** API 和 **CLI 演示** - 将[安全不变性](docs/defensive-controls.md)映射到 **248** 个自动化测试 - 暴露一个安全的 [LLM 适配器接口](docs/llm-adapter.md)(默认为模拟;不进行实时 API 调用) - 通过 `scripts/validate_repo.py` 阻止来自仓库的提示词工件 ## 此仓库不做的事情 - 默认调用生产 LLM API - 执行真实的 shell 命令、发送真实电子邮件或扫描网络 - 存储或泄露真实凭据 - 提供漏洞利用链、越狱库或攻击性工具 - 测试或攻击第三方系统 - 保证生产部署的安全性 ## 架构 **模型可以提问,代理负责决策。** 模型输出不受信任,直到确定性控制批准一个模拟的工具调用。 详细图表:[docs/architecture.md](docs/architecture.md)。威胁建模:[docs/threat-model.md](docs/threat-model.md)。可选导出资源:[SVG](docs/assets/llm-agent-control-plane.svg),[PNG](docs/assets/llm-agent-control-plane.png)。 ### 端到端控制平面(受保护路径) ``` flowchart TD ui[Untrusted inputs] pa[Prompt assembly] ac[Simulated agent core] of[Output filter] sv[Schema validator] tb[Tool broker] pe[Policy engine] pr[Provenance checks] ag[Approval gate] st[Simulated tools] al[Audit logger JSONL] ui --> pa pa --> ac ac -->|"untrusted output"| of of --> sv sv --> tb tb --> pe tb --> pr tb --> ag pe --> tb pr --> tb ag --> tb tb -->|"allow only"| st st --> al of -.->|"block leaks"| al tb -.->|"allow or deny"| al ``` ### 安全区域 ``` flowchart LR subgraph untrusted["Untrusted zone"] u1[User input] u2[Retrieved documents] u3[Tool output] u4[Model output] end subgraph boundary["Deterministic control boundary"] b1[Schema validation] b2[Tool broker] b3[Policy engine] b4[Provenance checks] b5[Approval gate] b6[Output filter] end subgraph execution["Execution and evidence zone"] e1[Simulated tools] e2[JSONL audit logs] e3[Demo and API results] end untrusted --> boundary boundary --> execution ``` ### 威胁到控制的映射 ``` flowchart LR t1[Prompt injection] --> c1[Prompt segmentation and broker] t2[RAG poisoning] --> c2[Provenance checks] t3[Tool misuse] --> c3[Policy engine and approval gate] t4[Secret leakage] --> c4[Output filter] t5[Cross-tenant exposure] --> c5[Tenant validation] t6[Unsafe execution] --> c6[disabled run_shell and simulated tools] t7[Audit gaps] --> c7[JSONL audit logger] t8[Prompt artifact leakage] --> c8[Repo hygiene scanner] ``` ### 验证流水线 ``` flowchart TD ch[Developer change] rh[Repo hygiene scanner] rf[Ruff] my[Mypy] py[Pytest 210 tests] bd[Bandit] pa[pip-audit] dk[Docker build] dt[Docker pytest] ga[GitHub Actions] rel[Release tag] ch --> rh --> rf --> my --> py --> bd --> pa --> dk --> dt --> ga --> rel ``` 漏洞路径 (`path=vulnerable`):跳过控制边界,仅用于标记为不安全的模拟(不进行真实执行)。参见 [docs/architecture.md](docs/architecture.md#paths)。 ## 演示场景 | 场景 | 受保护路径 | |------|------------| | `safe_read` | 允许(模拟读取) | | `internal_reviewed_read` | 允许(内部审查的来源) | | `shell_attempt` | 阻止(`run_shell` 已禁用) | | `injection_send_email` | 阻止(检索到的来源) | | `send_email_approved` + `human_approval=true` | 允许 | | `output_secret_leak` | 阻止(输出过滤器) | | `export_no_approval` | 阻止(审批门控) | | `export_approved` + `role=admin` + `human_approval=true` | 允许 | | `cross_tenant_read` | 阻止(租户隔离) | 漏洞路径(`/run` 上的 `path=vulnerable`):模拟**没有**代理强制执行的不安全决策(仍不进行真实执行)。 ``` make demo ``` ## 验证矩阵 | 检查项 | 命令 | 备注 | |--------|------|------| | 所有检查 | `make validate` | lint、类型检查、248 项测试、仓库卫生、策略完整性、bandit、pip-audit、Docker | | 测试 | `python -m pytest` | 248 项安全相关测试(包括 LLM 适配器、基于属性的测试和 API 加固) | | 仓库卫生 | `python scripts/validate_repo.py` | 阻止提示词工件 | | 策略完整性 | `python scripts/validate_policy.py` | Schema、不变性、SHA-256 与 `policies/default.sha256` 的对比 | | 演示 | `make demo` | 七个 CLI 场景 | | 供应链(CI) | CodeQL、Gitleaks、Trivy、SBOM 工作流 | 参见 [docs/supply-chain.md](docs/supply-chain.md);不保证安全 | ## API 示例 ``` source .venv/bin/activate uvicorn agent_control_plane.api:app --reload --port 8080 ``` ``` curl -s -X POST http://127.0.0.1:8080/run \ -H 'Content-Type: application/json' \ -d '{ "request_id": "demo-1", "user_id": "user-1", "session_id": "sess-1", "tenant_id": "tenant-a", "role": "user", "user_message": "Read my records", "scenario": "safe_read", "path": "protected" }' ``` ## 安全教义(摘要) 1. 默认拒绝;最小权限。 2. 不信任任何模型输出。 3. Schema 验证不等于授权。 4. 工具代理是权威边界。 5. 不受信任的检索内容和用户/网络/电子邮件上下文无法授权工具。 6. 外部和破坏性操作需要人工审批。 7. 输出过滤和审计日志在模型外部进行。 8. 在此实验环境中,所有工具执行均为模拟。 完整教义:[PROJECT_DOCTRINE.md](PROJECT_DOCTRINE.md)。 安全控制矩阵(威胁、实现、测试):[SECURITY-CONTROLS.md](SECURITY-CONTROLS.md)。详细不变性:[docs/defensive-controls.md](docs/defensive-controls.md)。 ## 安全使用 仅在**已授权的本地实验**环境中使用。切勿将此项目指向生产系统、真实客户数据或第三方目标。按照 [SECURITY.md](SECURITY.md) 报告问题。 有关部署防护措施(API 认证、CORS、请求限制、容器配置),请参见 [docs/production-hardening.md](docs/production-hardening.md) 和 [docs/deployment-threat-model.md](docs/deployment-threat-model.md)。生产模式可以改善安全态势,但**不会**使其成为经过认证的生产服务。 ## 配置 将 `.env.example` 复制到 `.env`(可选)。策略文件:`policies/default.yaml`。 ## 智能体指导 - [AGENTS.md](AGENTS.md) - [.cursor/rules/](.cursor/rules/)(仅教义规则;非工作提示词) ## 许可证 MIT — [LICENSE](LICENSE)。
标签:Docker容器, Google Gemini, Linux系统监控, Python语言, 人工智能安全, 人类批准, 代理安全, 合规性, 安全参考实现, 安全工程, 审计日志, 工具连接代理, 授权控制, 控制平面, 攻击面发现, 来源检查, 模型安全, 请求拦截, 输出过滤, 逆向工具, 防御性安全