以 sandbox 隔離 AI 代理,是將不受信任或模型生成的程式碼放進範圍受限的環境中執行,並明確控制檔案系統、程序、網路、憑證、資源、生命週期、成果及清理。只有容器名稱並不能證明這些屬性存在。
先從程式碼必須存取的內容開始,拒絕其他一切。如果工作只需要具型別的 API 呼叫,就移除程式碼執行能力,而不是為它加入 sandbox。
先撰寫威脅模型
假設生成的程式碼可能會:
- 讀取每個已掛載檔案及環境變數;
- 掃描內部與公開網路;
- 連線到命令伺服器或將輸出外傳;
- fork 程序、填滿磁碟、配置大量記憶體或輸出無限資料;
- 透過修改檔案、套件、快取或排程工作持續存在;
- 檢查雲端中繼資料或本機執行期 socket;
- 存取另一租戶的成果或憑證。
提示詞指示無法降低這些威脅。即使程式碼刻意嘗試逃逸,執行環境仍必須強制執行邊界。
隔離檔案系統與程序樹
為每次執行建立暫時工作區,只掛載必要輸入,並盡量使用唯讀模式。不要掛載主機儲存庫、容器 socket、家目錄、雲端設定、SSH 金鑰或共用套件快取。
以非特權使用者執行、移除 capability、在支援時限制 system call,並限制程序數量。終止最上層指令時也必須終止所有子程序。Wall-clock 逾時後若仍留下背景程序,清理就不完整。
透過範圍狹窄的服務匯出核准成果。驗證路徑及檔案類型、設定大小限制,並在銷毀工作區前複製輸出。
預設拒絕網路存取
許多程式碼工作不需要網路。確實需要時,則透過允許清單或已驗證的 proxy 路由輸出。控制 DNS 與 IP 存取,包括私有範圍、loopback、link-local 位址及雲端中繼資料端點。
允許的網域仍可能重新導向或解析成非預期位址,因此要在連線時驗證。避免讓生成程式碼直接存取內部服務探索。
如果工作需要網頁存取,具備政策與工作階段隔離的瀏覽器工具可能比不受限制的 socket 安全。下載的檔案與頁面指示都應視為不受信任。
注入範圍狹窄的短效憑證
不要繼承應用程式伺服器環境。為確切資源與操作簽發工作專用憑證,執行後讓它到期或撤銷。管理、計費及佈建憑證應留在 sandbox 之外。
假設放進環境的每份憑證都能被程式碼讀取。「隱藏」的環境變數對程序仍然可見。真正的安全問題是:在該憑證的範圍及生命週期內,它是否容許被取得。
代理安全指南涵蓋下游授權及稽核要求。
限制每項資源與輸出管道
限制 CPU、記憶體、磁碟、程序、檔案、網路、stdout、stderr 及 wall-clock 時間。限制套件安裝與相依性來源,並停止或隔離反覆違反政策的工作。
向模型回傳結構化摘要或截斷後的日誌。即使執行環境本身仍維持隔離,無限終端機輸出仍會消耗記憶體、token 及可觀察性儲存空間。
依工作負載選擇隔離深度
可信任的應用程式碼可能適合程序內函式或背景 worker;需要分隔套件的程式碼可以使用受限容器;不受信任的生成程式碼需要強化 sandbox;需要更強 kernel 邊界或特權系統存取的工作,則可能需要專用 VM。
運算升級階梯會依程式碼信任、網路、生命週期、狀態與延遲對應這些層級。Cloudflare 的 Project Think提供類似的分層方式,其產品層級是範例,不是通用邊界。
讓清理可觀察且具冪等性
記錄執行 ID、租戶、映像檔或執行期版本、政策、憑證參照、時間戳記、資源使用量、成果參照、退出類別及清理結果。成功、失敗、逾時、取消及 worker 當機後都要執行清理。
使用 reconciler 找出程序失敗後仍存在的過期環境。撤銷憑證與刪除環境都應能安全重複。
在不危及正式環境下測試邊界
在專用測試環境中,嘗試讀取禁止的掛載、列出環境變數、連線到私有及公開目的地、存取中繼資料、建立過量程序、填滿輸出、在終止後繼續執行,以及取得另一租戶的成果。驗證每次嘗試都會被拒絕並留下記錄,而且不會暴露敏感值。
也要測試允許路徑。若限制過度而導致每項真實工作都失敗,團隊反而會加入廣泛例外。每項例外都應具體、經過審查,並連接到需要它的工作負載。
下方提示詞會在不執行攻擊程式碼的情況下,稽核目前設定的邊界。它會區分供應商保證與儲存庫中的設定,sandbox 審查常在這裡發現缺口。