AI Engineer Europe 2026 · 演講 · 2026-06-01 · 24 分
把身分放進網路層來管 agent
What if the network was the sandbox? · Remy Guercio,Tailscale
Remy Guercio 主張沙箱的核心是邊界加權限,如果把身分驗證與授權放在網路層,agent 的沙箱裡就不必放金鑰,並用 Tailscale 的 Aperture 示範怎麼做。
概要
- 沙箱的兩個基本元件Remy 把沙箱拆成邊界與權限兩件事。沒有權限或身分,沙箱就像沒有玩具的沙坑,沒什麼好玩。
- 現有做法的問題給 agent 權限通常是 API key 或 OAuth/OIDC,兩種都是在沙箱裡進行,agent 手上就握有取得權限的東西。Remy 還說模型很會拿金鑰做不該做的事,尤其在 loop 裡跑很久的時候。
- 把 AuthN 與 AuthZ 放到網路層Tailscale 建在 WireGuard 上,每條連線都帶著使用者、群組或標籤這類身分資訊,沒有權限的東西連話都說不上。
- Aperture 這個 AI gateway供應商的金鑰只放在 Aperture,沙箱端完全沒有金鑰;Aperture 是 tailnet 上的一個節點,看得到每個連進來的身分。
- 在 LLM 層看得到每個 tool callRemy 說所有請求都得經過 Aperture,所以每個 tool call 都看得到,要停掉也是在網路層直接切斷。
- 可以自己用 tsnet 做一套身分的基礎元件放在開源函式庫 tsnet,Remy 說理論上你自己也能蓋出 Aperture;Q&A 另外談了權限設定、base URL 與不走 tool call 時的情形。
原話
▶ 01:35“it's a sandbox without any toys”
沒有權限就是沒有玩具的沙坑
▶ 07:09“it's just no key whatsoever in in that sandbox”
那個沙箱裡完全沒有金鑰
▶ 10:35“I have sort of a guarantee that I've seen every tool call that this thing has ever, like this thing has ever made through the instance.”
我算是有保證,這東西透過這個實例發出的每個 tool call 我都看過
▶ 23:43“if you can't see everything, then how valuable is it, right”
如果看不到全部,那還有多少價值
延伸
- Remy 現場示範時說,在 Claude Code 裡就算只打一句 hello,第一次請求帶著整包 context 就花了 20 美分。
- Remy 說,談過的不少企業連員工在用哪些工具都不知道,想先看見,再談封鎖;之後也會加更多 guardrail,例如擋下
rm -rf /這類 bash 指令。 - 團隊原本想在 MCP 層做,後來認為 LLM 層更有價值;Remy 也承認,把程式碼混淆後一步一步執行的做法還是繞得過去。
章節
點時碼直接跳到原片的那一段。
- 沙箱由什麼組成Remy 先提問,把沙箱簡化成邊界和一組權限,再問這在網路層會長什麼樣子。
- API key 與 OAuth 的盲點給 agent 權限不是 API key 就是 OAuth/OIDC,兩者都在沙箱裡處理,agent 等於能碰到自己的權限。
- 把身分放進網路用 WireGuard 給網路上每個節點一組金鑰,Tailscale 在上面疊身分;每條連線都帶使用者、群組或標籤。
- Aperture:AI gateway供應商的單一金鑰放在 Aperture,它是 tailnet 上的節點,看得到所有連進來的身分。
- GitHub Actions runner 沒有金鑰以 GitHub Action runner 當沙箱,啟動時用 federated OIDC 加入 tailnet 並取得標籤,由標籤決定能做什麼。
- 現場看用量與請求登入後 Aperture 認得 Remy 本人,列出 token、模型、花費與每筆請求,連 header 與 response body 都能點開看。
- PR review bot 的紀錄公司自己的 PR review bot 有一個 dog food 標籤,過去 30 天做過的每一次請求都查得到。
- 每個 tool call 都經過閘道因為在網路層,Remy 說可以保證看得到 agent 所有 tool call;要停掉也是直接切斷,agent 沒有金鑰可以換地方試。
- 設定只要一個 base URLClaude Code 只需填一個占位的 API key 與 base URL,Codex 與 Gemini CLI 也一樣;現場示範請它講十個字的故事。
- 用日誌回頭查問題流程依賴輸出格式時,可以回到 session 逐筆看每個請求,Remy 說它沒辦法繞過去。
- 預算、配額與 webhook預算可以跨供應商共用,也能設每日額度;每個 tool call 能透過 webhook 轉給第三方。
- tsnet 與自己動手蓋Aperture 在免費方案可用,身分的基礎元件放在開源的 tsnet 函式庫;內部的 MCP server 或 API 也能用同樣方式取得請求者身分。
- Q&A:權限在哪裡設定可以在 grants 設定,也能放進 Tailscale 主要的存取控制檔,連同任意中繼資料一起隨身分傳送。
- Q&A:能不能不填 base URL技術上做得到,但 Remy 說那不是 Tailscale 的路線,他們要的是最簡單的做法,不要藏在表面底下。
- Q&A:權限能細到哪裡目前以模型供應商為單位,之後經過 Aperture 的東西都要能依群組設定;配額也一樣,團隊與個人可以各有預算,再取兩者的聯集。
- Q&A:agent 直接寫程式時有聽眾問不走結構化 tool call 時怎麼管;Remy 說這正是選在 LLM 層的原因,至少看得到實際跑的指令。
名詞
- Aperture
- Tailscale 做的 AI gateway,放在 tailnet 上當節點,集中管金鑰、用量、權限與 tool call 紀錄
- Tailscale
- 建在 WireGuard 上,並在連線上疊加身分的網路服務
- WireGuard
- 讓網路上每個節點各有一組金鑰的連線協定,Tailscale 的底層
- tailnet
- 一個 Tailscale 網路,裡頭的容器、GPU 伺服器、筆電、手機等節點彼此直連
- tsnet
- Tailscale 的開源函式庫,讓程式自己加入 tailnet 並讀取同樣的身分資訊
- federated OIDC
- Remy 舉例用 GitHub 的這項機制讓 runner 啟動時取得 tailnet 存取與標籤
- ACL/grants
- Tailscale 定義誰能存取什麼的政策檔與設定,可再放入 application capability 隨身分傳送








