安全性
Deno Sandbox 是為不受信任或 AI 產生的工作負載而設計。每個 VM 都是短暫(ephemeral)的、在 hypervisor 層級隔離,並受嚴格的對外連線政策控管。這讓您能執行任意程式碼,同時維持組織資料與基礎設施的安全。
Secret 遮罩與替換
Secret 不會進入沙箱的環境變數。相反地,Deno Deploy 只會在沙箱對已核准主機發出對外請求時,才進行 secret 替換。您可以在建立沙箱時設定 secrets:
await using sandbox = await Sandbox.create({
secrets: {
OPENAI_API_KEY: {
hosts: ["api.openai.com"],
value: process.env.OPENAI_API_KEY,
},
ANTHROPIC_API_KEY: {
hosts: ["api.anthropic.com"],
value: process.env.ANTHROPIC_API_KEY,
},
},
});
import os
from deno_sandbox import DenoDeploy
sdk = DenoDeploy()
with sdk.sandbox.create(
secrets={
"OPENAI_API_KEY": {
"hosts": ["api.openai.com"],
"value": os.environ.get("OPENAI_API_KEY"),
},
"ANTHROPIC_API_KEY": {
"hosts": ["api.anthropic.com"],
"value": os.environ.get("ANTHROPIC_API_KEY"),
},
}
) as sandbox:
print(f"Sandbox {sandbox.id} is ready.")
import os
from deno_sandbox import AsyncDenoDeploy
sdk = AsyncDenoDeploy()
async with sdk.sandbox.create(
secrets={
"OPENAI_API_KEY": {
"hosts": ["api.openai.com"],
"value": os.environ.get("OPENAI_API_KEY"),
},
"ANTHROPIC_API_KEY": {
"hosts": ["api.anthropic.com"],
"value": os.environ.get("ANTHROPIC_API_KEY"),
},
}
) as sandbox:
print(f"Sandbox {sandbox.id} is ready.")
在沙箱內部,環境變數只會看到一個佔位符:
echo $ANTHROPIC_API_KEY
# <placeholder>
這表示使用者程式碼無法讀取真正的 secret。這可阻擋常見的 AI 攻擊路徑(prompt injection 後接 secret 外洩),同時仍允許您的自動化流程安全呼叫第三方 API。
出站網路控制
預設情況下,Deno Sandbox 的對外網路存取不受限制。您可使用網路允許清單(allowlist)選項,將流量限制在特定主機:
await using sandbox = await Sandbox.create({
allowNet: ["api.openai.com", "*.anthropic.com"],
});
sdk = DenoDeploy()
with sdk.sandbox.create(
allow_net=["api.openai.com", "*.anthropic.com"]
) as sandbox:
print(f"Sandbox {sandbox.id} is ready.")
sdk = AsyncDenoDeploy()
async with sdk.sandbox.create(
allow_net=["api.openai.com", "*.anthropic.com"]
) as sandbox:
print(f"Sandbox {sandbox.id} is ready.")
支援的模式包括:
| Pattern | Matches |
|---|---|
example.com |
精確主機名稱,任意連接埠 |
example.com:443 |
僅限連接埠 443 的精確主機名稱 |
*.example.com |
example.com 的任意子網域 |
192.0.2.1 |
精確 IPv4 位址 |
[2001:db8::1] |
精確 IPv6 位址 |
當提供 allowNet 時,任何對不在允許清單中的主機所發出的對外請求都會被阻擋。若省略 allowNet,則允許所有對外請求。請搭配secrets 選項使用,以確保即使程式碼被誘導去呼叫非預期端點,也不會送出憑證。
檔案系統隔離與清理
- MicroVM 會從乾淨的磁碟映像開機。您上傳的任何檔案都只會在沙箱生命週期內存在,除非您明確掛載磁碟區。
- 當對某個沙箱的最後一個參照被釋放(或呼叫
sandbox.kill())時,VM 會被銷毀且磁碟會被抹除,避免殘留狀態。 - 磁碟區提供共享儲存空間,但每個沙箱的存取都必須明確指定,且必要時可用唯讀方式掛載。
稽核與可觀測性
- 每個命令、HTTP 請求與 SSH 工作階段都可以在 Deno Deploy 儀表板中追蹤,提供 agent 行為的稽核紀錄。
- 建立沙箱時附加中繼資料(例如
metadata: { owner: "agent" }),讓日誌與追蹤資料清楚顯示活動由誰發起。