abc小站

2026-10-11

agent 想动手干活?先进笼子:AWS 开源的 Strands Box 到底管住了什么

AWS 开源 Strands Box:给想动手的 agent 加笼子,从进程外管住文件、网络与凭证。开头程序员是虚构示例,文中已标明。

01

我被吓到了。

不是被 AI 吓到的,是被一种越来越常见的用法吓到的。

假设有个资深程序员(下面这位是虚构的,但这种用法不虚构),最近让 coding agent 帮他干活。

为了省事,他把权限全开了。

就是大家常说的那个“YOLO mode”。

agent 想读什么文件就读,想跑什么命令就跑,想往哪发请求就往哪发。

他大概会说,真香,一下午干完一周的活。

我问他:你那台电脑上,有没有客户数据?有没有生产环境的密钥?

他沉默了。

然后说了一句:应该……没事吧?

做过风控的人,最怕听到的就是这三个字。

“应该没事”,翻译过来就是“出事了也不知道是怎么出的”。

所以这周看到 AWS 开源了一个叫 Strands Box 的东西,我是真的坐直了。

AWS 官方博客称,这是一个给 AI agent 用的沙箱,目前是 developer preview,协议是 Apache 2.0,代码已经放在 GitHub 上。

一句话概括它想干的事:

agent 可以干活,但得在笼子里干。

02

先说一个很多人没想明白的问题。

agent 现在不是已经有权限弹窗了吗?

跑个 shell 命令,它会问你一句“允许吗”。

这还不够?

不够,而且差得挺远。

AWS 官方博客把这个区别讲得很清楚。

agent 的 harness(就是驱动 agent 跑起来的那层壳)自带的权限,看到的是“跑这句 shell”。

Strands Box 是从进程外面看,看这句命令实际碰到了哪些文件、连了哪些主机。

这两者差在哪?

差在“它说它要干什么”和“它实际干了什么”。

一句 shell 命令,表面上叫“跑个测试脚本”。

脚本里面读了什么、连了谁,弹窗是不知道的。

你点“允许”的那一刻,其实是在给一个黑箱签字。

这就像银行审贷款,只看申请表上写的“用途:装修”,不看钱最后流到了哪个账户。

干过风控的都知道,申请表上的字,是最不值钱的东西。

真正要盯的,是资金流向。

Strands Box 盯的,就是 agent 的“资金流向”。

03

那它具体怎么盯?

AWS 官方博客称,Strands Box 分两层。

第一层叫 containment,隔离。

官方举的例子是 macOS 的 Seatbelt,也就是操作系统级别的隔离。

意思很简单:先把 agent 关进一个由操作系统兜底的围栏里,越界的动作,系统层面就不让过。

第二层叫 policy,策略。

管的东西包括网络出口、Python 和 Shell 解释器,还有 MCP broker。

这一层用的是 Dogwood 策略语言,配一个 Dogwood Local Engine 来执行。

它会对 agent 的每个请求,以及这个 agent 之前干过的事,做 allow 或者 deny 的判断。

注意,“之前干过的事”,这几个字是全文最值钱的地方。

后面单独说。

这里还有一个设计我挺喜欢。

不管 agent 是读文件、发 HTTP 请求,还是走 MCP 调工具,Box 都把它们翻译成统一的事件,比如 fs:read、http:request。

为什么统一事件这么重要?

因为坏事从来不是在一个工具里干完的。

读数据用的是文件系统,往外送用的是网络。

如果文件归文件管、网络归网络管,各管一摊,那每一摊看着都合规。

合起来,就是一次完美的数据外泄。

统一成事件之后,规则才能跨工具写。

04

现在说时序,也就是顺序。

这是我觉得 Strands Box 最像风控系统的地方。

AWS 官方博客举了一个例子:

读过客户数据目录之后,禁止发出站 HTTP 请求。

你品一下这条规则。

读客户数据,本身没问题,agent 可能就是要分析一下。

发 HTTP 请求,本身也没问题,agent 可能要查个文档、调个接口。

单拎出来,两件事都清清白白。

但是先读客户数据,再往外发请求——

这个顺序一出现,味道就全变了。

这就是为什么顺序很重要。

风险不在单个动作里,在动作的排列组合里。

做过反欺诈的人对这个太熟了。

一张卡在北京刷了一笔,正常。

同一张卡十分钟后在另一个国家又刷了一笔,单看也正常。

连起来看,就是盗刷。

只看单笔交易的风控,是拦不住这种事的。

必须记住“这张卡刚才干了什么”。

Dogwood 对 agent 做的,按我的理解,就是同一件事:判断现在这一步之前,先翻一翻它的历史。

AWS 官方博客还举了第二个时序例子。

Slack 的事故频道,10 分钟内最多成功发帖 3 次。

这条看着像限流,其实是在防一种很真实的灾难。

线上出事故,大家本来就手忙脚乱。

这时候 agent 要是一激动,在事故频道里一分钟刷十条,人的消息全被淹了。

本来是来帮忙的,结果成了最大的噪音源。

那被拦下来之后呢?

AWS 官方博客称,拒绝时会返回 403,带上规则 id 和规则描述。

agent 看到这个,就知道自己是被哪条规矩拦了,可以选择等一等,而不是对着墙一遍遍狂重试。

这个细节很小,但很懂行。

一个只会说“不行”的门卫,只会逼人翻墙。

一个会说“不行,因为第几条,过会儿再来”的门卫,才能让人老老实实排队。

05

再说凭证,这是我最想让大家记住的一条。

agent 干活,要调接口。

调接口,要密钥。

以前的常见做法是什么?

把密钥塞进环境变量,或者写在配置里,agent 自己拿着去调。

这就好比你请人来家里修水管,顺手把银行卡和密码一起递了过去。

他人可能很老实。

但你得保证他身上那个口袋,永远不会被别人摸到。

agent 的口袋是很容易被摸到的。

它读的网页、它看的文档,里面都可能藏着骗它把东西交出来的话。

所以 Strands Box 的思路是:干脆不给。

AWS 官方博客称,出口网关可以注入凭证,支持的方式包括 Bearer、自定义请求头、Basic、query 参数,以及 AWS SigV4。

agent 那边,只看得到一个占位符。

请求从沙箱里出去,走到网关那一步,网关才把真正的凭证填进去。

翻译成人话就是:

agent 知道“这里该放钥匙”,但它手里从头到尾都没有钥匙。

这里是我的推断:这样一来,就算 agent 被骗着把自己看到的东西全吐出来,吐出来的也只是一个占位符。

骗子费了半天劲,偷到一张写着“此处有卡”的便利贴。

这在风控里有个朴素的道理:

你没有的东西,别人就偷不走。

06

当然,这东西也不是神。

AWS 官方博客自己就说了几处取舍,我觉得这部分写得挺坦诚。

第一,解释器放在沙箱外面。

Python 和 Shell 解释器不在笼子里,而是由策略层管着。

官方承认,这样做的代价是信任基座更宽了。

说白了,你要多信任一部分东西。

第二,故意没有另起一套容器或者微 VM。

理由是要融入开发者自己的本机环境。

我的理解是,这是在安全和好用之间,主动往好用那边挪了一步。

为什么这么挪?

因为一个太难用的笼子,最后的结局一般只有一个:被开发者拆掉。

还记得开头那位假想的、开 YOLO mode 的程序员吗?

他不是不知道危险,他是嫌麻烦。

安全方案要是比他的 deadline 还难缠,他一定选 deadline。

所以 Strands Box 想赢,靠的不是“最安全”,而是“够安全,而且懒人也愿意用”。

配置上,按 AWS 官方博客的说法,就是两个文件:box.toml 和 policy.dw。

跑起来一行命令:

box run --config box.toml
    

Dogwood 规则不会写怎么办?

官方还另外给了一个 Policy Authoring 的 agent skill,帮你写 Dogwood 策略。

让 AI 帮你写管 AI 的规矩。

冒昧了,这个闭环有点东西。

07

最后说说它没说的,和它打算说的。

先划清楚一条线。

这东西不是漏洞扫描,不帮你找代码里的 bug,也不帮你修。

它管的是 agent 在运行时,能碰什么、按什么顺序碰、碰多少次。

一个是查房子有没有裂缝,一个是给住进来的人立规矩。

两件事都要做,但别混成一件。

再看路线图,AWS 官方博客列了几条:

支持更多操作系统;CLI 自动探测你用的 harness,生成一份基线策略;把 Box 带到 Bedrock AgentCore、ECS 和 K8s 上;Dogwood 增加 liveness 等能力。

这里是我的推断:前两条是在降门槛,让个人开发者开箱即用;第三条是在往企业生产环境走。

从一台开发者的笔记本,走到云上一整个集群。

至于为什么用 Apache 2.0 开源,官方没多说。

按我的理解,规矩这种东西,只有大家都能看、都能改、都能拿去用,才有可能变成行业默认。

一套只有自己家能用的笼子,管不住别人家的 agent。

说回那位假想的程序员。

要是把这篇的大意讲给他听,他多半会说:那我先给事故频道那个 bot 加条限流。

我会说:先把你那些密钥从环境变量里拿出来吧。

agent 越能干,笼子就越要紧。

它们负责干活,我们负责立规矩。

祝你的 agent 勤快,祝你的密钥平安。

来源:AWS Open Source Blog:Introducing Strands Box(2026-10-07);GitHub:strands-agents/box。产品事实只取自以上来源;开头程序员人物为虚构示例;贷款、盗刷等为通用风控类比;标注「我的推断」「我的理解」处为作者观点。