凭证安全

更新时间:
复制 MD 格式

API Key、AccessKey、数据库密码、第三方 Token 和临时下载地址都是高敏感信息。云沙箱可以隔离代码执行环境,但不能替用户判断哪些凭证可以暴露给不可信代码。凭证一旦进入 Sandbox,就应假设 Sandbox 内的代码有机会读取、打印、上传或写入文件。

API Key 管理

云沙箱 API Key 用于创建、连接和管理 Sandbox。API Key 在函数计算控制台创建和管理,具体步骤参见创建 API Key。调用 HTTP 数据面接口时,通过 X-API-KEY 请求头传递 API Key;使用 E2B SDK 或 E2B CLI 时,将同一个值设置为 api_key 参数或 E2B_API_KEY 环境变量。

建议:

  • 按应用、环境、团队或租户拆分 API Key,避免多人、多个系统共享同一个长期 Key。

  • 为 API Key 添加描述并设置合适的过期时间。

  • 生产环境不要使用个人本地开发 Key。

  • 不在代码仓库、镜像、模板、日志、截图、工单、文档示例中暴露完整 API Key。

  • 本地开发使用环境变量或 .env 文件,并确保 .env 不进入代码仓库。

  • CI/CD 使用流水线密钥管理能力,不把密钥写入构建产物。

  • 发现泄露后立即禁用或删除旧 Key,重新生成并灰度切换。

推荐配置:

export E2B_API_KEY="<your-api-key>"
export E2B_API_URL="https://api.<region>.e2b.fc.aliyuncs.com"
export E2B_DOMAIN="<region>.e2b.fc.aliyuncs.com"

新版本 E2B CLI 使用 E2B_API_KEY 认证。E2B_ACCESS_TOKEN 是已废弃的旧认证变量,不建议在新接入流程中使用。

不要把高权限凭证注入 Sandbox

环境变量适合传递任务参数、非敏感配置和短期凭证,但不适合直接暴露高权限长期密钥。E2B SDK 中命令级环境变量也只是作用域更小,并不代表在操作系统层面私密。

高风险做法:

  • 把主账号 AccessKey、生产数据库密码、长期 Git Token 注入 Sandbox。

  • 把多个租户共用的云资源凭证注入每个任务。

  • 在 AI 生成代码可读取的环境变量中保存生产密钥。

  • 在异常堆栈、printenv、调试日志或任务输出中打印环境变量。

更安全的做法:

  • 只注入当前任务必须使用的最小配置。

  • 使用任务级、短期、最小权限凭证;能用 STS 临时凭证时,不使用长期 AccessKey。

  • 为不同环境、租户和任务拆分凭证权限。

  • 对输出、日志和下载文件做脱敏。

  • 任务结束后主动释放 Sandbox,避免凭证留存在后台进程或临时文件中。

环境变量与元数据边界

环境变量进入 Sandbox 运行环境,Sandbox 内进程可以读取。元数据用于控制面标记、查询和关联,不应保存敏感正文。

建议:

  • envs 放任务运行所需的非敏感参数或短期凭证。

  • metadata 放任务 ID、租户 ID、应用版本等可索引标识,不放用户隐私、业务数据或密钥。

  • 不把敏感信息写入模板名称、文件名、标签、日志字段、错误消息或可观测指标。

  • 如果同一字段既要被控制面检索、又要被进程读取,应分别评估 metadataenvs 的可见范围。

密钥轮换

生产环境应建立 API Key 和外部资源凭证的轮换机制:

  • 生成新 Key 或新临时凭证。

  • 灰度切换应用配置。

  • 验证创建 Sandbox、执行命令、访问必要资源和释放资源链路。

  • 删除旧 Key,并确认没有旧 Key 继续出现在日志、镜像、模板或流水线变量中。

密钥轮换不能只做“生成新 Key”。如果旧 Key 仍在模板、镜像、CI/CD 缓存或日志中可见,风险仍然存在。