运行时沙箱策略
实现沙箱以限制文件系统访问、命令执行和网络活动,以便在你的运行时中运行的智能体。
沙箱策略让你控制智能体在守护进程上运行时可以访问和做什么。你可以限制文件系统路径、阻止危险命令、限制网络连接,并可选择在隔离的容器中运行智能体。
为什么沙箱很重要
智能体很强大——它们可以读取文件、执行命令和发出网络请求。没有沙箱:
- 数据泄漏 - 智能体可能读取 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)
创建沙箱策略
沙箱策略在工作区级别配置,而不是按智能体。
- 转到 设置 → 安全 → 沙箱策略
- 查看默认策略(已设置,显示凭证目录的拒绝)
- 添加文件系统允许列表 - 你的智能体应该访问的路径
- 添加文件系统拒绝 - 明确阻止的路径(超出默认值)
- 添加命令限制(可选)- 允许列表或拒绝列表
- 添加网络限制(可选)- 允许列表或拒绝列表
- 选择执行器类型 - 本地或容器
- 点击保存
拒绝覆盖允许: 如果路径在允许和拒绝列表中,拒绝获胜。这确保你不能意外地暴露凭证目录,即使有广泛的允许列表。
文件系统权限详细
允许列表(智能体可以访问什么)
智能体可以读取和写入与允许列表条目匹配的路径:
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 -rf、dd if=/dev/zero - 权限更改:
chmod 777、chown、sudo - Git 历史篡改:
git push --force到 main/master - Shell 炸弹:
:(){ :|:& };: - 远程代码执行:
curl | sh、wget -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 # 阻止全部(如果与允许列表结合)被拒绝的连接在套接字级别被阻止并被审计。
容器执行器(高级)
为了最大隔离,你可以在无根容器内运行智能体:
- 转到 设置 → 安全 → 沙箱策略
- 在 执行器 下,选择 容器
- 可选配置特定于容器的设置:
- 内存限制(例如 2 GB)
- CPU 限制(例如 2 核心)
- 网络模式(默认隔离)
- 点击保存
前置条件:
- 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 范围
下一步
- Threat detection checks - 主动扫描可疑行为
- Secrets isolation (Enterprise) - 安全地管理凭证
- Approval policies - 需要审查敏感更改