免费试用日志保留 7 天
返回企业总览
生产访问

放智能体进生产环境。 在它改动之前先批准。

排查一次线上事故,或执行一次迁移,意味着要给智能体真实的生产访问权——而真实的生产访问权恰恰是你不能交给一个自主循环的东西。Bromure 让智能体自由读取,然后在每一个改动性动作的门口停下,先问你一声。

问题

读访问没问题。要命的是写操作。

一个能查询生产环境的智能体是一项调试超能力。一个能 `DROP TABLE`、`terraform apply`、删除存储桶或推一个热修复的智能体,则离一次自信满满的幻觉只差一步,就能造成一次宕机。那个为了找 bug 而读日志的循环,会不待提示就对线上系统「修」上一手。

于是团队选择保险做法,把智能体彻底挡在生产环境之外——也就此失去了智能体最有用的那一处:线上事故、与数据形态相关的 bug、只在真实数据上才会失败的迁移。摆在面前的选择,是你无法信任的自主性,或你不肯授予的访问权。

Bromure 的答案

读照常流过。写则停下,等待人来。

Bromure 把智能体跑在一台 VM 里,它只能通过一个凭证代理触达生产环境——而这个代理分得清读和写。查询、获取、描述类操作直接放行。任何会改动状态的操作——写、删、一条 DDL 语句、一次部署、一次破坏性 API 调用——都会暂停,并弹出一个权限提示,显示确切的操作,交由工程师在它执行之前批准或拒绝。

智能体在一切安全的操作上保持势头,只在要紧之处被卡住。你能精确看到它即将做什么——那条 SQL、那次 API 调用、那个资源——在你点头之前,没有任何东西触及生产。拒绝它,智能体便收到这次拒绝并随之调整,与任何其他工具错误无异。

工作原理

读直通,写卡门

代理对每一个操作分类。只读调用毫无摩擦地通过;改动性调用停下,等待显式的人工批准。安全之处给智能体速度,不安全之处给它一道硬停。

确切看到它将要做什么

每一个提示都在执行前显示字面操作——那条 SQL 语句、那个 API 方法和目标、正在被改动的资源。没有盲目的「全部允许」。

凭证从不到达智能体

生产访问由代理在网络层注入。智能体在不持有任何可被泄露或滥用的凭证的前提下,对生产环境进行操作。

每一个决定都被记录

批准、拒绝,以及背后的操作,都按会话和工程师记录——一份完整的记录,载明智能体对生产环境做了什么、又是谁批准的。

实战演练

线上事故中的智能体,却不再冷汗直流

凌晨两点,某服务在一部分行上抛出错误。一位工程师通过 Bromure 把智能体指向生产只读副本。智能体查询线上数据,将其与近期的部署关联,把 bug 缩小到三小时前一次迁移写入的一个格式异常的列——全程只读,全程毫不中断地流过。

智能体提出修复方案:对受影响行执行一条 `UPDATE`。由于这会改动生产环境,Bromure 暂停。一个权限提示向工程师显示确切的语句——表、谓词、预估受影响行数——然后等待。工程师读过,收紧 `WHERE` 子句,批准。直到此刻,写操作才到达数据库。

事故在二十分钟内收尾,而不是两小时。会话记录显示智能体执行的每一次查询、它提出的那唯一一次改动、工程师的修改,以及那次批准——于是事后复盘自己写好了,谁也不必去琢磨智能体是不是悄悄做了别的什么。

策略即配置

在一个策略块里定义什么需要卡门

代理的读 / 写分类是声明式的。按配置文件传入一份策略,智能体在每一次会话中继承它。以下是团队最常卡门的几种后端的配置样子。

MongoDB / ClickHouse

读——find、聚合、SELECT——放行;insert、update、delete 以及 DDL 默认卡门。也可划出一个临时数据库,让智能体在其中自由改动。

[proxy.mongodb]
mode = "read-through"
# find / aggregate / count pass without prompting
gate = ["insert", "update", "delete", "drop"]

[proxy.clickhouse]
mode = "read-through"
# SELECT passes; writes and DDL gate
gate = ["INSERT", "ALTER", "DROP", "TRUNCATE"]
# allow unprompted writes only here
allow_write_databases = ["scratch"]

AWS、Kubernetes 与云 API

Describe / list / get 调用放行;任何会创建、更改或删除资源的操作——无论是云资源还是 Kubernetes 对象——都会弹出审批提示并展示完整请求。

[proxy.aws]
mode = "read-through"
allow_verbs  = ["Describe*", "List*", "Get*"]
gate_verbs   = ["Create*", "Update*", "Put*", "Delete*", "Terminate*"]
show_request = true

[proxy.kubernetes]
mode = "read-through"
# get / list / watch pass
gate_verbs = ["create", "apply", "patch", "delete", "scale", "exec"]

HTTP 与内部服务

GET 和 HEAD 流过;对生产主机的 POST、PUT、PATCH 和 DELETE 卡门。按主机划分范围,让预发环境保持无摩擦。

[proxy.http]
read_methods = ["GET", "HEAD"]
gate_methods = ["POST", "PUT", "PATCH", "DELETE"]

[[proxy.http.hosts]]
match = "*.prod.internal"
gate  = true

[[proxy.http.hosts]]
match = "*.staging.internal"
gate  = false
架构与集成

它究竟是如何构建的

营销到此为止。下面是每一次 Bromure 部署所依赖的技术基础设施——无论你是在保护 BYOD 员工队伍,还是在一家受监管机构内部隔离涉密等级,底层都是同一套。

虚拟化层强制的隔离

每一个配置文件运行在一台基于 Apple Virtualization.framework 的轻量 Linux 虚拟机中——拥有独立于宿主机的内核、文件系统和网络栈。基础镜像是一套经过签名、可复现的 Alpine 构建,在会话启动时通过 APFS 写时复制克隆出来(磁盘开销几乎为零)。宿主机无法读取 VM 内存;除非配置文件策略明确允许,VM 也无法读取宿主机的剪贴板、文件系统或网络适配器。

身份:用户走 SSO,设备走 mTLS

注册和会话启动由你组织已在运行的两个因素把关。通过 OIDC / SAML 对接 Google Workspace、Okta、Microsoft Entra 或 Authentik 识别用户身份。由你的 PKI 签发、与本次安装绑定的单机 mTLS 客户端证书识别机器身份。吊销其中任意一个,下一次会话便无法启动——没有代理可被篡改,也没有本地策略可被绕过。

配置即代码

工作配置文件——允许的 SaaS 列表、下载 / 剪贴板 / 截屏策略、VPN 配置、键盘布局、根 CA、网络出站规则——是一份签名的声明式产物。用 Git 版本化管理。通过你的 MDM 或 Bromure 配置端点下发。被篡改的配置文件将通不过签名校验,会话拒绝启动。用户机器上运行的,与你编写的完全比特一致。

按配置文件划分的网络平面

每个配置文件自带虚拟网卡。可选择经宿主机 NAT、桥接到物理接口,或通过 WireGuard、IKEv2 / IPsec 或 Cloudflare WARP 建立隧道——所有这些隧道都在 VM 内终结,对宿主机不可见。在此之上叠加 DNS 覆盖、出站端口白名单、LAN 隔离和 HTTP 代理。分段由虚拟化层强制,而不是靠防火墙上的一张贴纸。

审计流水线

每一次请求——时间戳、方法、URL、状态码、用户、配置文件、设备——都在 VM 外部捕获,以防篡改的 JSON Lines 流送达你既有的日志接收端(SIEM、数据湖、留存归档)。可选对可疑流量启用仅请求头或完整请求体的会话录制。稳定的 Schema、有文档的字段、格式上不被厂商锁定。

默认临时,可选持久

关闭窗口,VM 即销毁。令牌、Cookie、缓存、下载以及会话期间落地的任何恶意软件都会随之消失。需要保留状态的配置文件——一套书签、一段已保存会话、一次已登录的 SaaS——可选择加入一块由 macOS Keychain 管理密钥的 LUKS 加密持久盘。密钥永不离开用户设备。

常见问题

Bromure 怎么知道一次调用是改动操作?

+

凭证代理理解它所代理的协议——SQL、云 API、HTTP 方法、Git。它按效果对操作分类:SELECT 和 GET 放行;INSERT/UPDATE/DELETE/DDL、写类 API 以及破坏性调用被卡门。按配置文件调校策略——全部卡门,或允许对临时 schema 的写入而卡住其余。

这个提示会拖慢每一个动作吗?

+

只有改动操作才会弹出提示。智能体在调试时对生产环境所做的绝大多数操作都是只读的,那部分以全速流过。人只在状态发生改变的那一处、且只在那一处介入。

我拒绝时,智能体看到什么?

+

一次普通的工具拒绝。智能体把它当作任何一次失败调用——它可以解释、提出替代方案或请求指引——而那次改动从未发生。

我能一次批准一批操作吗?

+

可以。批准可以按操作授予,也可以按范围授予——为本次会话余下时间批准某一类操作,或预先授权一次特定的迁移——每一次授予都被记录。默认是收紧的;松绑由你刻意为之。

这不就是花哨版的 `--dry-run` 吗?

+

不是。dry-run 显示会发生什么,之后仍需一次盲目的真实重跑。Bromure 卡住的是真实调用本身:智能体正在执行途中,你看到确切操作,而你的批准正是放它继续的开关——或不放。没有任何东西跑两遍,也没有任何东西未经批准就跑。

把生产环境交给智能体。 把手放在开关上。

读直通、写卡门的访问,让智能体在线上系统上工作,却永远不会背着你改动它们。