安全隔离

更新时间:
复制 MD 格式

云沙箱为代码执行、Agent 工具调用、自动化测试和临时任务提供隔离运行环境。开发者应把 Sandbox 视为短生命周期、可释放、受控的执行单元,而不是把它当成无限可信的业务运行时。

安全隔离的目标是降低不可信代码对业务服务、其它任务和平台基础设施的影响。隔离不是单点能力,必须与身份权限、网络边界、文件边界、资源限制和日志治理一起使用。

隔离边界

云沙箱主要提供以下边界:

  • 运行边界:任务在 Sandbox 内执行,避免直接污染业务服务进程。

  • 生命周期边界:Sandbox 可以被设置超时、暂停、恢复和终止,任务完成后应释放资源。

  • 文件边界:Sandbox 本地文件系统用于当前 Sandbox 生命周期内的输入、临时文件和输出结果。

  • 网络边界:通过 Endpoint、访问地址和公网端口能力控制 Sandbox 的接入与服务暴露路径。

  • 控制面边界:通过 API Key、Endpoint、账号和地域限制 Sandbox 的创建、连接和管理。

这些边界不能替代业务自身的安全控制。运行在 Sandbox 内的代码仍可能读取环境变量、访问允许访问的网络、生成恶意输出、消耗资源或外传其可访问的数据。

需要用户自行控制的边界

用户至少需要自行控制以下事项:

  • 谁可以创建、连接、终止 Sandbox。

  • Sandbox 中运行什么代码、来自谁、是否经过校验。

  • Sandbox 能读取哪些文件、挂载哪些外部存储、访问哪些云资源。

  • Sandbox 是否可以访问公网、内网、数据库、企业 API 或第三方服务。

  • Sandbox 暴露的端口是否需要鉴权、过期和访问范围限制。

  • 执行结果、日志、错误堆栈和下载文件是否经过敏感信息过滤。

如果业务需要处理多租户数据,应为每个租户、每个任务或每个会话设置明确的数据边界。不要让多个不可信任务共享同一个可写目录、同一组长期凭证或同一个无鉴权服务端口。

网络与端口安全

Sandbox 可以运行临时 Web 服务、预览服务或工具服务。对外暴露端口时,应把它视为一个公开访问入口,而不是内部调试能力。

建议:

  • 只暴露业务必需端口,不暴露调试端口、管理端口、数据库端口或 shell 服务。

  • 预览链接、上传下载地址和公网访问地址应设置鉴权、有效期和最小访问范围。

  • 不可信代码不应默认访问内网管理地址、数据库、元数据服务或高敏业务 API。

  • 需要访问企业内网或云上数据源时,应通过受控代理、VPC、安全组、权限策略和审计链路设计。

如果当前兼容能力没有提供细粒度出站访问控制,不要在文档或业务设计中假设 Sandbox 已经天然阻断所有外联风险。应在业务侧、网络侧和数据源侧增加访问控制。

文件与存储安全

Sandbox 本地文件系统适合存放当前任务的临时输入、代码、依赖缓存和输出结果。Sandbox 被终止后,本地文件不应作为长期可用数据依赖。

建议:

  • 为每个任务创建独立工作目录,例如 /tmp/tasks/<task-id>

  • 只允许任务读写该工作目录及必要的只读输入目录。

  • 对用户上传文件限制大小、类型、后缀、解压层数和目标路径。

  • 不把未经校验的路径直接传给文件 API 或 shell 命令。

  • 跨 Sandbox 保留或共享的数据,应写入 NAS、OSS 等外部存储,并按租户、项目和任务设置权限边界。

共享存储是高风险边界。多租户场景下,不应把所有会话挂载到同一个可写根目录,也不应让任务通过相对路径、软链接或路径穿越访问其它租户数据。

模板与依赖安全

模板决定 Sandbox 启动时的基础环境。模板越复杂,供应链风险越高。

建议:

  • 使用可信基础镜像和固定版本依赖。

  • 不在镜像、模板文件、构建日志中写入密钥。

  • 定期更新系统包、语言运行时、浏览器、CLI 工具和业务 SDK。

  • 对生产模板使用版本或别名管理,完成冒烟验证后再切换流量。

  • 不把调试工具、无关服务、默认弱口令或长期后台进程放入生产模板。

最小验证

上线前建议至少验证:

  • 任务完成、异常和超时时都会释放 Sandbox。

  • 不可信代码不能读取生产密钥和其它租户文件。

  • 用户输入不能触发命令注入、路径穿越或任意文件删除。

  • 公网端口没有暴露未鉴权管理接口。

  • 日志和返回结果不会包含 API Key、AccessKey、数据库密码、用户隐私或下载链接。

更多责任边界参见责任共担,不可信代码治理参见不可信代码