跳转至

审批 AI Agent 的操作

本指南介绍如何让 Agent 扫描在执行有风险的操作之前先征求您的同意,以及如何在扫描页面中回复。

AI Agent 自行决定测试什么,它的部分操作会影响真实的人,或修改真实的数据。通过 Approval of actions,您可以选择 Agent 是否先询问您。请求会在扫描的 Approvals 标签页中等待,您可以批准、拒绝,或用您自己的指示进行回复。

视频先展示扫描表单中的设置,然后回复三个请求。

Approval of actions 是 Agent 扫描配置文件的 Guardrails 步骤中的一项设置,适用于 Deep Agentic Scan、Mobile Shielding Scan 和 Single Vulnerability Assessment。该设置是可选的。默认情况下,Agent 会自行执行有风险的操作。

访问 report.ostorlab.co

1. 选择 Agent 如何处理有风险的操作

点击 New Scan,像平常一样填写扫描信息:资产和 Agent 扫描配置文件。在 Guardrails 步骤的 Approval of actions 下,选择三个选项之一。

Approval of actions

选项 效果
Run without asking Agent 自行执行有风险的操作,不会询问任何人。这是默认选项。
Ask me, block if no answer Agent 会等待您的回复。如果无人回复,则不会执行该操作。
Ask me, run if no answer Agent 会等待您的回复。如果无人回复,则由 Agent 自行判断并继续。

完成其他步骤后点击 Submit。该选项适用于整个扫描,Dig Deeper 会将其带入后续评估。

2. 了解 Agent 何时询问

Agent 自行决定何时询问。该设置不会暂停每一次工具调用。Agent 会在以下情况下询问:

  • 执行会影响真实的人的操作之前,例如发送短信或发布内容,
  • 执行具有破坏性或无法撤销的操作之前,
  • 执行超出扫描范围的操作之前,
  • 遇到阻碍且无法安全地做出选择时,例如无法判断某个目标是否在范围内,或需要只有您才有的凭据或验证码。

请求等待期间,扫描的其他测试会继续运行。只有等待您决定的那项操作会被阻止。

3. 打开 Approvals 标签页

打开扫描。当扫描的审批模式不是 Run without asking 时,结果菜单的 Risks 下方会显示 Approvals 标签页。Agent 等待您时,标签页上会显示橙色圆点和数量。标签页会先列出等待您回复的请求。

Approvals 标签页

请求到达时,Ostorlab 也会通知您。它会向您组织中可以查看该扫描的管理员和用户发送一封带有此标签页链接的电子邮件,并添加一条通知。只读用户不会收到通知。对于同一个扫描,同一个人最多每 10 分钟被通知一次。

4. 阅读请求

Waiting for your answer 中的每张卡片都是 Agent 写的一条消息:它想做什么,以及原因。请在回复之前阅读。较长的消息会被缩短:点击 Show details 可阅读全文。

5. 回复请求

每张卡片有三种回复方式。

  • Approve:Agent 只会继续执行它在消息中描述的内容。之后的请求需要新的批准。
  • Deny:Agent 不会继续,也不会重试或绕过该拒绝。如需说明原因,请先点击 Add a message:Deny 会将您的消息作为原因发送。
  • Add a message,然后点击 Send reply:您的消息会作为回答发送给 Agent。对于问题,它就是回答。对于操作,它是指导而不是批准:Agent 会重新考虑,如果仍想继续,会再次询问。

用消息回复

输入消息时,Approve 会被关闭:批准不能附带消息。

如需一次批准所有等待中的请求,请点击标签页顶部的 Approve all 并确认。Agent 随后会继续执行它请求的所有操作,不会再次询问,且此操作无法撤销。

Approve all

6. 查看历史记录

已回复的请求会连同您的回答移到 History。

历史记录

状态 含义
Approved 您批准了请求。
Denied 您拒绝了请求。如有原因,会显示为 Reason。
Replied 您用消息进行了回答,显示为 Reply。
Timed out 请求已超时并被取消,显示在 History 中。

当扫描结束或 Agent 停止检查回答时,仍处于待处理状态的请求会显示在 No longer waiting 下,并附带消息“The agent is no longer waiting”。您无法再回复,因为回答不会送达 Agent。这与已取消的请求不同;已取消的请求会在 History 中显示为 Timed out。

已停止等待

无人回复时会发生什么

默认情况下,Agent 最多等待一个请求的回复 24 小时。之后由审批模式决定:

  • Ask me, block if no answer:不执行该操作,Agent 继续进行其他测试。
  • Ask me, run if no answer:Agent 按自己的判断继续执行该操作。

关于目标是否在范围内的问题是例外。如果无人回复,无论哪种模式,Agent 都会将该目标视为超出范围,并不去触碰。

无论哪种模式,仅凭拒绝或回复,操作都不会被执行。

谁可以回复

具有 admin 或 user 角色的用户可以回复。只读用户可以打开 Approvals 标签页并阅读请求,但无法回复。

使用 API

GraphQL API 的扫描创建 mutation 接受 approvalMode 参数,扫描会在其 approvalMode 字段中返回该值:

approvalMode: FAIL_CLOSED
  • AUTO_APPROVE:Run without asking。
  • FAIL_CLOSED:Ask me, block if no answer。
  • FAIL_OPEN:Ask me, run if no answer。

请使用已登录的用户列出并回复扫描的请求。API 密钥无法回复这些请求。

query {
  humanInputRequests(scanId: 42, status: PENDING) {
    id
    message
    status
    createdAt
  }
}
mutation {
  answerHumanInputRequest(
    humanInputRequestId: 7
    decision: DENIED
    responseText: "Do not touch /admin. It is out of scope."
  ) {
    humanInputRequest {
      id
      status
      responseText
    }
  }
}
  • status 为 PENDING、APPROVED、DENIED、REPLIED 或 CANCELLED。CANCELLED 在 History 中显示为 Timed out。Agent 已停止等待的 PENDING 请求会显示在 No longer waiting 下。
  • decision 为 APPROVED、DENIED 或 REPLIED。REPLIED 需要 responseText,DENIED 可选择提供 responseText 作为原因,APPROVED 不接受该参数。

后续步骤