AACWorkflow Docs

运行时沙箱策略

实现沙箱以限制文件系统访问、命令执行和网络活动,以便在你的运行时中运行的智能体。

沙箱策略让你控制智能体在守护进程上运行时可以访问和做什么。你可以限制文件系统路径、阻止危险命令、限制网络连接,并可选择在隔离的容器中运行智能体。

为什么沙箱很重要

智能体很强大——它们可以读取文件、执行命令和发出网络请求。没有沙箱:

  • 数据泄漏 - 智能体可能读取 SSH 密钥、AWS 凭证或其他敏感文件
  • 系统损害 - 智能体可能删除重要文件或执行危险命令
  • 供应链攻击 - 被破坏的技能可能会泄漏数据或转向其他系统
  • 合规性违规 - 某些合规框架需要工作负载隔离

沙箱策略通过执行边界来防止这些风险。

沙箱策略组件

沙箱策略控制四个方面:

文件系统访问

允许列表 - 智能体可以读取和写入的路径(和子路径):

/home/user/workspace
/tmp
/var/tmp

拒绝列表 - 始终被阻止的路径,即使在允许列表中:

~/.ssh
~/.aws
~/.gnupg
/etc

默认情况下,AACWorkflow 拒绝访问凭证目录和系统配置。你可以添加更多拒绝,但你不能删除内置的拒绝列表。

命令执行

允许列表 - 如果设置,只有这些命令可以运行。空 = 无限制。

git
grep
python

拒绝列表 - 始终被阻止的命令/模式:

rm -rf /
chmod 777
curl | sh

被拒绝的命令立即失败并记录审计条目。

网络访问

允许列表 - 智能体可以连接到的主机名和 CIDR 块:

github.com
api.openai.com
10.0.0.0/8

拒绝列表 - 始终被阻止的主机和模式:

169.254.169.254  (AWS 元数据)
127.0.0.1:22  (本地 SSH)

默认行为取决于你运行时的网络策略。

执行器类型

  • Local - 智能体直接在守护进程操作系统上运行(默认、轻量级)
  • Container - 智能体在隔离的无根容器中运行(更安全、需要 Docker/Podman)

创建沙箱策略

沙箱策略在工作区级别配置,而不是按智能体。

  1. 转到 设置 → 安全 → 沙箱策略
  2. 查看默认策略(已设置,显示凭证目录的拒绝)
  3. 添加文件系统允许列表 - 你的智能体应该访问的路径
  4. 添加文件系统拒绝 - 明确阻止的路径(超出默认值)
  5. 添加命令限制(可选)- 允许列表或拒绝列表
  6. 添加网络限制(可选)- 允许列表或拒绝列表
  7. 选择执行器类型 - 本地或容器
  8. 点击保存

拒绝覆盖允许: 如果路径在允许和拒绝列表中,拒绝获胜。这确保你不能意外地暴露凭证目录,即使有广泛的允许列表。

文件系统权限详细

允许列表(智能体可以访问什么)

智能体可以读取和写入与允许列表条目匹配的路径:

FilesystemAllow:
  - /home/user/workspace    # 智能体可以访问此目录和子目录
  - /tmp                     # 智能体可以使用 /tmp
  - /var/data               # 智能体可以访问 /var/data

每个任务的工作目录始终被允许,无论策略如何。

拒绝列表(智能体不能访问什么)

拒绝条目始终阻止,即使更广泛的允许条目包括它们:

FilesystemDeny:
  - ~/.ssh                  # 拒绝 SSH 密钥
  - ~/.aws                  # 拒绝 AWS 凭证
  - ~/.gnupg               # 拒绝 GPG 私钥
  - /etc                    # 拒绝系统配置(内置默认值)

内置拒绝(无法移除):

  • ~/.ssh - SSH 密钥
  • ~/.aws - AWS 凭证
  • ~/.gnupg - GPG 私钥
  • ~/.config/gh - GitHub CLI 配置
  • /etc - 系统配置
  • AACWorkflow 守护进程配置目录

你可以向此列表添加更多,但你不能删除内置条目。

命令限制详细

允许列表(命令白名单)

如果你设置允许列表,只有列表中的命令可以运行:

CommandAllow:
  - git          # 智能体可以运行 'git'
  - grep         # 智能体可以运行 'grep'
  - python       # 智能体可以运行 'python'
  - python3      # 智能体可以运行 'python3'

任何其他命令都会失败并出错。

如果允许列表为空,所有命令都被允许(除非被拒绝列表阻止)。

拒绝列表(命令黑名单)

拒绝列表中的命令永不运行:

CommandDeny:
  - rm -rf /         # 阻止破坏性删除
  - chmod 777        # 阻止权限更改
  - curl | sh        # 阻止下载并执行
  - sudo             # 阻止权限提升
  - :(){ :|:& };:    # 阻止 fork 炸弹

当尝试被拒绝的命令时:

  • 执行失败并出现清晰的错误
  • 审计条目被记录
  • 智能体被通知并可以尝试不同的方法

内置拒绝模式

AACWorkflow 包括已知危险命令的内置拒绝模式:

  • 文件删除: rm -rfdd if=/dev/zero
  • 权限更改: chmod 777chownsudo
  • Git 历史篡改: git push --force 到 main/master
  • Shell 炸弹: :(){ :|:& };:
  • 远程代码执行: curl | shwget -qO- | sh
  • Reverse shells: Netcat、reverse-shell 签名

你可以在不删除内置的情况下添加更多模式。

网络限制详细

允许列表(批准的目的地)

智能体可以连接到允许列表中的主机名和网络:

NetworkAllow:
  - github.com              # 智能体可以连接到 GitHub
  - api.openai.com          # 智能体可以调用 OpenAI
  - 10.0.0.0/8              # 智能体可以到达 10.x.x.x
  - "*.internal.example.com" # 智能体可以到达 *.internal

拒绝列表(被阻止的目的地)

智能体不能连接到这些主机名/网络:

NetworkDeny:
  - 169.254.169.254  # AWS EC2 元数据服务
  - 127.0.0.1:22     # 本地 SSH
  - 0.0.0.0/0        # 阻止全部(如果与允许列表结合)

被拒绝的连接在套接字级别被阻止并被审计。

容器执行器(高级)

为了最大隔离,你可以在无根容器内运行智能体:

  1. 转到 设置 → 安全 → 沙箱策略
  2. 执行器 下,选择 容器
  3. 可选配置特定于容器的设置:
    • 内存限制(例如 2 GB)
    • CPU 限制(例如 2 核心)
    • 网络模式(默认隔离)
  4. 点击保存

前置条件:

  • Docker 或 Podman 必须安装在守护进程上
  • 守护进程进程必须有权创建容器
  • 建议使用无根模式(比以 root 运行更安全)

发生什么:

  • 智能体任务在容器内运行
  • 每个任务的工作目录被挂载绑定
  • 沙箱策略中的文件权限被应用
  • 网络按 NetworkAllow 隔离
  • 任务完成后每个容器都被删除

权衡:

  • 优点: 真正隔离、删除了 Linux 能力、只读根文件系统
  • 缺点: 轻微的性能开销、需要容器运行时、更复杂的调试

查看有效策略

在设置页面上,你可以看到:

  • 内置默认值 - AACWorkflow 默认执行的内容
  • 你的覆盖 - 你添加或自定义的内容
  • 有效策略 - 合并结果

示例:

Built-in deny:  ~/.ssh, ~/.aws, /etc
Your additions: /root/.kube, ~/confidential
Effective deny: ~/.ssh, ~/.aws, /etc, /root/.kube, ~/confidential

审计沙箱违规

所有沙箱策略违规都被记录:

  • 路径访问拒绝
  • 命令执行失败
  • 网络连接块

设置 → 审计日志 中查看审计日志,按"沙箱"或"安全"过滤以查看:

  • 何时以及哪个智能体尝试访问被拒绝的路径
  • 哪些命令被阻止以及原因
  • 哪些网络连接被拒绝

使用这些日志:

  • 调整策略(如果智能体合理需要访问)
  • 调查可疑行为
  • 遵守审计要求

最佳实践

  • 开始限制 - 默认拒绝,允许需要的内容
  • 使用容器执行器 - 用于不受信任或高风险任务
  • 定期审查拒绝 - 如果智能体触及拒绝规则,调查
  • 与威胁检测配对 - 沙箱策略 + 威胁检测一起
  • 记录你的允许列表 - 与你的团队分享为什么需要某些路径/命令
  • 在生产前测试 - 首先在测试运行时启用策略

限制

  • 本地模式是尽力 - 主机操作系统上的沙箱依赖于操作系统级保护,有时可能被绕过
  • 无法删除内置拒绝 - 凭证目录始终受保护
  • 容器模式需要运行时 - 你需要安装 Docker 或 Podman
  • 网络允许列表精确 - 通配符模式支持有限;对广泛目标使用 IP 范围

下一步