高级 📋 6 个步骤 第 274 / 470 篇

AWS Dogwood 上手:给 Agent 的「多步工具调用」装上一套红绿灯策略

AWS 8-12 开源策略语言 Dogwood(Apache 2.0):在 Cedar 基础上增加时序条件能力,可对智能体多步工具调用序列做整体治理——时间窗计数防并发绕限额、顺序约束防先斩后奏、配额条件控资源消耗。本教程从语言基础、第一条策略、防绕行、顺序约束、Bedrock AgentCore Policy 集成讲到测试与上线。

2026.08.13· 15 分钟阅读· 约 1890 字· 🛡️ AWS Dogwood

2026 年 8 月 12 日,AWS 开源策略语言 Dogwood(Apache 2.0)——在自有授权语言 Cedar 的基础上增加时序条件(temporal condition)能力,目标是治理 AI 智能体的多步工具调用序列:不只判断「这一次调用允不允许」,还能判断「这一串调用整体合不合规」。典型场景包括防止 Agent 用并发请求绕过限额、约束调用顺序与资源配额。目前已集成到 Bedrock AgentCore Policy。本教程从语言基础、第一条策略、防并发绕行、顺序约束讲到集成与测试。

🛡️ 本教程适合:平台/安全团队,以及所有要把 Agent 放进生产环境的开发者。想从方法论层面体检 Agent 风险可先看本站《CISO 四问法》;执行隔离见《Agent 沙箱 E2B·Modal》。

先搞懂:为什么「单请求授权」管不住智能体?

传统权限模型是「一次请求,一次判定」。但智能体会自主地连续调用一串工具:读文件 → 查数据库 → 调支付 → 发通知。单看每一次调用都合法,串起来却可能违规——比如 100 个并发请求绕过「每分钟 60 次」的限额,或先付款后审批这种顺序颠倒。Dogwood 的思路是把策略从「点」升级到「序列」:

维度Cedar(单请求)Dogwood(序列治理)
判定对象单次动作多步工具调用序列
时序感知无支持时间窗、先后顺序、计数约束
典型问题单次是否越权并发绕限额 / 顺序颠倒 / 配额超支
集成AWS 服务授权Bedrock AgentCore Policy 等 Agent 场景
💡 一句话记住:单请求授权是「查酒驾」,Dogwood 是「查车队」——不只看每一辆车,还看车队整体怎么跑、跑了多少趟、先后顺序对不对。

Step 1:语言基础:Cedar 子集 + 时序条件

1 语言基础:Cedar 子集 + 时序条件

Dogwood 以 Cedar 为底座,学过 Cedar 的同学可以直接上手;核心新增是时序条件:

策略结构(概念):
permit (principal, action, resource)
when { 条件表达式 }              ← 静态条件
when { 时序条件 }                ← 新增:时间/顺序/计数

时序条件示例:
· 时间窗:仅在 09:00-18:00 允许
  when { time_in_range(now(), "09:00", "18:00") }
· 顺序:必须先「审批」再「付款」
  when { occurred_before(action.pay, action.approve) }
· 计数:同一 Agent 每分钟工具调用 ≤ 60 次
  when { call_count(agent, window=60s) <= 60 }
💡 先小步验证:把策略当「可测试的代码」来写,每加一条规则就配套一个正/反向测试用例——Dogwood 的设计初衷就是让治理策略可审计、可回归。

Step 2:第一条策略:从「允许谁调什么」开始

2 第一条策略:从「允许谁调什么」开始

先写最基础的动作级策略,再叠加时序:

示例:允许客服 Agent 读工单、拒绝删工单
permit (
  principal in Agent::"cs_agent",
  action in [Action::"ticket.read"],
  resource in Ticket::*
);
deny (
  principal in Agent::"cs_agent",
  action in [Action::"ticket.delete"],
  resource in Ticket::*
);

测试习惯:
· 正向:cs_agent 读工单 → 允许
· 反向:cs_agent 删工单 → 拒绝
· 边界:其他 Agent 读工单 → 拒绝
💡 从「拒绝优先」开始写:先 deny 高风险动作(删除、外发、支付),再 permit 必要动作——比反向维护 deny 清单更安全。

Step 3:防并发绕行:用计数条件堵住「拆单」漏洞

3 防并发绕行:用计数条件堵住「拆单」漏洞

Agent 最经典的越限手法是并发拆单:单次不超限,100 个并发就绕过了限额。Dogwood 用时间窗计数治理:

防并发绕限策略(概念):
permit (principal, action, resource)
when {
  call_count(principal, action.category,
             time_window=1min) <= 60
};

效果:
· 同一 Agent 60 秒内同类调用超过 60 次 → 拒绝
· 并发请求在策略层被统一计数,而非各算各的
· 配额按 Agent / 按类别 / 按时间窗自由组合

监控:
· 拒绝次数与拒绝原因要进日志
· 高频触发阈值说明任务设计有问题,
  应回到任务拆分而非一味放宽配额

别把阈值拍脑袋:先用两周真实调用数据画出分布,再定配额;定完要配套告警——「策略拒绝率突增」和「业务真实增长」要能区分开。

Step 4:顺序与依赖约束:管住「先斩后奏」

4 顺序与依赖约束:管住「先斩后奏」

很多业务规则本质是顺序约束:先审批后付款、先备份后删除、先测试后发布。Dogwood 的时序条件直接表达:

顺序约束示例:
· 付款必须在审批之后
  deny (principal, action, resource)
  when { !occurred_before(action.pay, action.approve) };

· 删除前必须已有备份
  deny (principal, action in [Action::"data.delete"],
        resource)
  when { !occurred_before(action.backup, action.delete) };

· 发布前必须通过测试
  deny (principal, action in [Action::"app.deploy"],
        resource)
  when { !occurred_before(action.test_pass, action.deploy) };
💡 顺序约束是「最后一道保险」,不是流程管理的替代品:它防的是 Agent 自主执行时的偶发错序,正常流程仍靠编排层保证。

Step 5:集成 Bedrock AgentCore Policy:把策略挂到 Agent 执行链上

5 集成 Bedrock AgentCore Policy:把策略挂到 Agent 执行链上

Dogwood 已集成到 Bedrock AgentCore Policy——AWS 托管 Agent 运行时可以直接引用策略:

集成路径(概念):
① 在 AgentCore 中定义 Agent 与工具集
② 编写 Dogwood 策略(时序条件规则)
③ 挂载到 Agent 的 Policy 配置
④ Agent 每次工具调用前,运行时执行策略判定
   · 单次动作 → 动作级判定
   · 序列动作 → 时序/计数/顺序判定
⑤ 拒绝事件写入审计日志,可回放

适用场景:
· Bedrock 生态的多步骤工作流
· 需要「策略即代码」可版本化的企业治理

开源 ≠ 免集成:Dogwood 语言本身开源,但「谁执行策略、日志去哪、告警怎么接」取决于你的运行时。Bedrock 场景走 AgentCore;自建场景要自己接策略引擎与审计管道。

Step 6:测试与上线:策略也要有 CI

6 测试与上线:策略也要有 CI

治理策略上线前,按软件工程的规格对待:

测试矩阵(每个策略至少 4 个用例):
· 正向:符合条件 → 允许
· 反向:违反条件 → 拒绝
· 边界:刚好等于阈值 → 按设计判定
· 时序:乱序/并发/超窗 → 拒绝

上线步骤:
① 模拟环境灰度:用回放流量跑一遍策略
   (把真实调用日志喂给策略引擎,看误杀率)
② 小流量观察:策略拒绝率 vs 业务基线
③ 全量上线:拒绝原因可查、可申诉、可回滚
④ 周期性回归:Agent 新增工具时重跑测试矩阵
🎉 小结:Dogwood 把 Agent 治理从「单请求授权」推进到「序列级治理」——时间窗计数堵并发绕行、顺序约束管先斩后奏、配额条件控资源消耗,且策略可测试、可审计、可回滚。方法论层面的 Agent 安全体检清单可回看《CISO 四问法》;执行隔离与沙箱见《Agent 沙箱 E2B·Modal》。

常见问题速查

你的疑问参考答案
Dogwood 是什么?AWS 8-12 开源(Apache 2.0)的策略语言,在 Cedar 基础上增加时序条件,治理智能体多步工具调用序列
和 Cedar 什么关系?Dogwood 以 Cedar 为底座扩展;学过 Cedar 可直接上手,核心新增是时间/顺序/计数类条件
能解决什么问题?并发请求绕限额、调用顺序颠倒、资源配额超支等「序列级」违规——单请求授权管不了的问题
必须用 AWS 吗?语言与实现开源;已集成 Bedrock AgentCore Policy,自建环境需自行接入策略引擎
策略能测试吗?可以,把策略当代码:配套正向/反向/边界/时序用例,支持 CI 回归
和沙箱(E2B/Modal)什么关系?沙箱管「代码在哪跑」,Dogwood 管「跑的动作合不合规」,两者是执行隔离与策略治理的互补层
← 返回教程中心