Skip to main content

E2B 网络访问控制

E2B 创建和网络更新 API 可以限制出站目标,并按域名设置或删除请求头。规则会随 Sandbox 保存,因此池化 Sandbox 每次交付时都会使用本次领取所指定的规则。

创建时配置网络规则

network 对象同时支持四层可达性列表和按域名生效的七层请求转换:

{
"templateID": "code-interpreter",
"network": {
"allowOut": ["api.example.com"],
"denyOut": ["10.0.0.0/8"],
"rules": {
"api.example.com": [
{"transform": {"headers": {"X-Tenant": "demo"}}}
]
}
}
}

allowOut 支持 IP、CIDR 和具体 FQDN,不支持通配域名;denyOut 只支持 IP 和 CIDR。rules 仅转换匹配的 HTTP 流量,不会自行放通网络,因此当平台没有管理员级策略时,还需要单独允许目标地址。

network.rules 中的请求头名称会被规范为小写。设置请求头时,会替换名称相同且大小写不敏感的已有请求头。

创建时删除请求头

如需删除请求头或声明有序规则链,可通过保留的 e2b.agents.kruise.io/security-rules metadata 字段传入 JSON 数组:

[
{
"name": "sanitize-example",
"match": [{"domains": ["api.example.com"]}],
"actions": {
"headerManipulation": {
"set": [{"name": "x-tenant", "value": "demo"}],
"remove": ["x-debug-token"]
}
}
}
]

请求头值会按原文保存,不要用该机制传递凭据。规则名称必须唯一;显式规则中的请求头名称必须已是小写,同一名称 不能同时出现在 setremove 中。

更新运行中的 Sandbox

通过 E2B 管理 API 请求 PUT /sandboxes/{sandboxID}/network,请求体可以替换 allowOutdenyOutrules

{
"allowOut": ["api.example.com", "storage.example.com"],
"denyOut": ["10.0.0.0/8"],
"rules": {
"api.example.com": [
{"transform": {"headers": {"X-Tenant": "production"}}}
]
}
}

更新时,省略 rules 会保留已有七层规则,传入 {} 会清空规则,非空对象则完整替换规则。所有校验都会在修改 Sandbox 前完成。不支持的上游字段 egressProxymaskRequestHost 会被明确拒绝,不会被静默忽略。