clay-good/proxilion

GitHub: clay-good/proxilion

Proxilion是一个自托管安全层,通过加密边界确保托管AI代理在调用SaaS API时遵守用户权限。

Stars: 0 | Forks: 0

# Proxilion 托管型AI代理(Anthropic托管的Claude、OpenAI的Workspace Agents、Google的Vertex agents,以及日益增多的开源类Claude代理)代表您的用户执行操作。当这些代理调用您的SaaS API(Google Drive、Gmail、Calendar、Salesforce等)时,OAuth令牌并不携带代理所代表的*具体用户*信息。代理可以超越该用户的权限行事,而现有技术栈中没有任何机制能够阻止。 Proxilion是一个**自托管、MIT许可**的反向代理(兼预先检查顾问和审计数据接收器),它将代理执行的每个操作都绑定到一个基于人类用户的加密`PCA`链上。信任平面拒绝签发用户不具有的权限。每个操作都会被记录在审计日志中,该日志既便于人类阅读,又可通过加密方式验证。 **免费。MIT许可。自托管。无遥测。无付费产品。无SaaS化路径。** ## Proxilion 的实际功能 仅有加密能力链并不足以阻止托管型代理操作错误数据。Proxilion是可部署的执行层,它将数学原理转化为安全团队可安装的实体。属于Proxilion原创工作的部分包括: - **OAuth拦截。** Proxilion位于代理平台与您的SaaS提供商之间的OAuth流程中,替换为Proxilion颁发的Bearer令牌,并保持在后续每个请求的路径中。 - **针对提示注入的读取过滤。** 来自Drive、Gmail和其他上游的响应体会被扫描是否存在已知的注入模式(分隔符混淆、隐藏的Unicode、base64编码指令、“忽略先前指令”等),并在代理读取之前将其剥离或隔离。 - **带人工审批的写入控制。** 外部邮件发送、批量删除、外部文件共享等操作会被阻止,除非有真实人员通过Slack或工单明确批准。可按发件人、域名、操作类型进行配置。 - **实时操作流 + 急停开关。** 代理的每个操作在发生时即刻推送到运营人员仪表板和您的SIEM。一键撤销与该代理或用户相关的所有能力,效力在一个请求周期内生效。 - **YAML策略引擎。** 一个编译型的匹配表达式引擎,用于执行诸如“此代理可以读取工程文档但绝不能访问财务文件”之类的规则,支持热重载。 - **SaaS适配器。** 首发支持Google Drive、Gmail和Calendar,每个适配器都具备上游感知能力,使策略能够推理具体的文件、收件人和事件。模式开放;添加Salesforce、Jira、Notion仅需几百行代码。 - **核心论点。** OAuth集成边界是治理非自有托管型代理的唯一预防性关键控制点,并且在此处通过构造实现预防仍然可行。 ## 致谢:站在PIC的肩膀上 Proxilion用于签名能力链的加密原语是由 **[Nicola Gallo](https://github.com/ngallo)** 设计的 **[PIC协议](https://www.pic-protocol.org/)** (Provenance, Identity, Continuity)。PIC的三个形式不变性——*溯源性*(每个操作可追溯至不可变的源头)、*身份性*(源头身份在传递过程中不可改变)和*连续性*(权限只能缩减,不能扩大)——使得Proxilion能够声明“此具体操作由此具体人员授权”并在数年后予以证明。感谢并尊重Nicola设计并发布该协议。我们将上游的Rust参考实现作为SHA锁定的依赖项引入;我们既不内嵌也不重新实现它。 ## 快速开始 ``` git clone https://github.com/clay-good/proxilion cd proxilion # 1. 为本地 Trust Plane 生成 CAT 签名密钥。 echo "TRUST_PLANE_CAT_KEY_HEX=$(openssl rand -hex 32)" > .env # 2. 启动 postgres + Trust Plane + mock-okta。 docker compose up -d --wait postgres trust-plane mock-okta # 3. 驱动模拟 OAuth 流程并获取可验证的 PCA_0。 bash scripts/smoke-pic.sh ``` 您应该会看到一个包含 `p_0`、授予的操作和base64编码COSE签名的JSON格式的 `PCA_0`。在浏览器中打开 ,将该PCA id粘贴到链检查器中。 ## 三种部署模式,统一的PIC基础架构 单一的架构无法覆盖所有托管型代理平台。Proxilion根据**每个平台支持的模式**运行,而PIC语义、审计日志、策略引擎和管理界面在所有三种模式下完全一致。 | 模式 | 架构位置 | 覆盖范围 | 状态 | |---|---|---|---| | **1. 代理内联模式** | 代理的OAuth和API地址指向Proxilion;TLS在您的边界内终止 | Anthropic托管的Claude、OpenAI的Workspace Agents、开源类Claude代理、用于跨厂商流程的Vertex | ✅ 已实现 (M1) | | **2. 预先检查顾问模式** | 平台在每次SaaS操作前调用 `POST /v1/check`;我们从不接触OAuth令牌或请求体 | 任何暴露了预先检查Webhook的平台 | 🟡 计划中 (M3) | | **3. 仅审计接收模式** | 平台在事后转发事件(类似SIEM方式) | 具有操作日志导出但无预先检查钩子的平台(可能包括Lindy、Decagon、Moveworks) | 🟡 计划中 (M3) | Proxilion**不承诺**的是:在SaaS提供商端进行*加密执行*。这需要SaaS端采纳PIC(采用RFC 8693形式的令牌交换来验证链)。这三种模式提供了在无SaaS配合情况下的最强执行力度;我们对此上限直言不讳。 ## 代码库包含内容 ``` proxilion/ ├── crates/ │ ├── proxy/ # axum reverse proxy + OAuth interception + adapters │ ├── cli/ # `proxilion-cli` operator binary │ ├── policy-engine/ # YAML → match expression + ops template grammar │ └── shared-types/ # re-exports of upstream provenance-core ├── site/ # proxilion.com, static, Cloudflare Pages ├── docs/specs/spec.md # the design doc ├── ops/ # Prometheus scrape config + Grafana JSON ├── docker/ # Dockerfiles for proxy and trust-plane ├── migrations/ # postgres SQL for OAuth + PCA + audit tables ├── scripts/ # dev helpers (cert gen, smoke test) └── docker-compose.yml # full dev stack ``` 没有Next.js仪表板。该代理在 `/admin/` 提供一个单一的嵌入式静态管理页面用于链检查;其他所有功能(日志查询、指标、告警)均通过 `proxilion-cli`、Prometheus及您现有的可观测性工具栈实现。 ## 可见性与信任 在**模式1**下,代理在您的边界内终止TLS,并可见明文的请求和响应体。这种可见性使得B层策略(提示注入隔离、外部发送控制)和全保真审计成为可能。这也意味着代理**必须**运行在您的基础设施上。CAT密钥和明文SaaS数据负载应存在于您的边界内,而非他处。为最小化内存中的明文暴露面:**适配器可选择性地暴露body字段**。Drive读取适配器在策略上下文中不声明任何body字段;只有确实需要它们的适配器(如Gmail发送 → `body.to_domain`)才会声明。 在**模式2和3**下,代理从不接触请求体或OAuth令牌。平台发送给我们元数据;我们评估、签发PCA并响应。 ## 信任模型(一言以蔽之) PIC的预防特性依赖于**CAT签名密钥**由客户持有。Proxilion因此采用自托管模式;我们永远无法看到您的密钥、流量或PCA。营销网站 [proxilion.com](https://proxilion.com) 是一个指向此处的静态HTML页面。管理界面中无遥测、无回拨、无追加销售路径。 ## 许可证 MIT许可。基于 [`clay-good/provenance`](https://github.com/clay-good/provenance) (MIT) 构建,这是我们唯一的PIC依赖项,在 [`Cargo.toml`](Cargo.toml) 中SHA锁定。详见 [NOTICE](NOTICE) 和 [docs/specs/spec.md](docs/specs/spec.md) §3 了解归属和详情。 ## 贡献 欢迎提交Issue和PR。无CLA;贡献将根据代码库的MIT许可进行。参见 [CONTRIBUTING.md](CONTRIBUTING.md) 了解开发环境设置、需要通过的CI检查(`cargo fmt --check`、`cargo clippy -- -D warnings`、`cargo test --workspace --locked`、`cargo audit --deny warnings`)、基于规范的贡献模型以及有意设定的非目标。 ## 安全 发现漏洞?**请勿在GitHub上公开提交Issue。** 参见 [SECURITY.md](SECURITY.md) 获取私密报告地址、响应SLA(72小时内确认,根据严重程度分级修补)、范围内/范围外的攻击面,以及我们已防御的能力说明,以便您能侧重报告您突破的环节。 ## 技能过载问题 代理平台现在提供“技能”。您为整个组织训练一个代理,将其附加到Drive、Gmail、Salesforce、Jira、Notion以及一两个内部API,然后分发给每位员工。该单一代理现在拥有其所有用户权限的*并集*。实际上,您部署了一个超级用户。OAuth范围写着租户的 `drive.readonly`;技能写着“总结用户询问的任何内容”;运行时无从知晓另一端的人是实习生、财务主管还是CEO。 这就是**技能过载问题**。技能是在代理层面定义的权限。用户是在人类层面定义的权限。两者之间的差距正是混淆代理人攻击、提示注入数据泄露和内部人员洗钱滋生的场所。 Proxilion是技术栈中唯一能强制将具备技能的代理限制回“人类用户”框中的组件。代理的每个调用都绑定到一个以当时所代表的特定人类为根的PCA链。实习生请求“总结第三季度财务”的方式会失败,就像实习生直接访问Drive时一样。CEO的请求则会成功。技能保持不变;但*权限*不再属于技能,而是属于用户。通过构造实现预防,即使技能本身权限过大。
标签:AI安全, API安全, Chat Copilot, JSONLines, JSON输出, OAuth拦截, SaaS访问控制, 人类在环, 代理治理, 加密安全, 反向代理, 可视化界面, 审计日志, 提示注入防护, 测试用例, 网络安全, 自托管, 请求拦截, 身份管理, 通知系统, 隐私保护, 零信任