shell.exec 與一個外部網路範圍的技能,正是那種應該在它
執行之前被審查、而非在一次事故中才被發現的東西。
防火牆的技能治理就是那個審查。每一個可安裝的
能力都被註冊為一筆工作區層級的記錄、由一個確定性的風險引擎掃描、
被指派一個風險等級與一個強制執行模式,並且——在執行期——
該模式會疊加在防火牆的規則裁決之上。
1. 這裡的「技能」是什麼
一筆技能記錄是一項可安裝的代理能力。單一模型 通則化了三種種類,因此一個掃描、評分與審批平面就能 治理一個代理自行安裝的一切:| 種類 | 它是什麼 |
|---|---|
skill | 一個封裝好的能力——一份資訊清單加上一組工具與一段系統提示詞片段。 |
mcp_server | 一個被註冊為受治理製品的自帶 MCP 伺服器。 |
plugin | 一個外掛式的擴充。 |
builtin、registry、private、
byo_mcp 或 auto_detected——它會饋入信任評估。
2. 掃描器
在註冊時(以及隨需),掃描器會對資訊清單與所宣告的範圍 執行一組確定性、無依賴的遍歷。每一次 遍歷會發出帶有info、warn 或 error 嚴重性的發現:
| 遍歷 | 標記 | 嚴重性 |
|---|---|---|
| prompt_injection | 試圖覆寫指令的資訊清單文字(ignore previous instructions、you are now、一個開頭的 system:……)。 | warn |
| tool_creep | 資訊清單使用但未在 allowed_tools 中宣告的工具名稱。 | error |
| network_egress | 資訊清單中未在該技能網路範圍裡核准的 HTTP(S) 主機。 | warn |
| fs_write_unsafe | 一個位於 /tmp 之外路徑上的寫入模式檔案系統範圍(防止路徑穿越)。 | error |
| data_scope | 敏感資料範圍(pii、financial、customer)。 | info |
| unsigned | 一個沒有簽章的 registry 技能。 | warn |
error → blocked;
否則任何 warn → flagged;否則 clean。
3. 風險分數與等級
相同的發現會饋入一個確定性的風險分數(0–100,可累加 並帶有每類別上限)。最重的貢獻者是危險的 能力:| 能力 | 權重 |
|---|---|
| Shell 執行 | +30 |
| 任意程式碼 eval | +30 |
在 /tmp 之外的檔案系統寫入 | +25 |
| 密鑰讀取 | +25 |
| 外部網路 egress | +20 |
| 等級 | 分數 |
|---|---|
low | 0–25 |
medium | 26–50 |
high | 51–75 |
critical | 76–100 |
4. 強制執行模式
等級與裁決一起衍生出一個強制執行模式——當一個由此 技能擁有的工具被呼叫時,防火牆實際會做什麼:| 模式 | 執行期的效果 |
|---|---|
allow | 技能本身不施加任何東西;由規則裁決決定。 |
quarantine | 將任何未達 deny 的裁決升級為 pending_approval——技能的工具只在人類批准後才執行。 |
block | 對技能的工具強制一個 deny。 |
blocked 的單一 error 發現,即使數值等級為 low 也會隔離或封鎖
——朝謹慎的方向。一個操作者可以明確地設定模式;在一次
重新掃描時,模式只會更緊地棘輪推進,永不會放鬆你設定的一個
block 或 quarantine。
5. 信任訊號
靜態掃描之外的兩個訊號會影響一個技能如何被對待:- 已簽章的發布者。 一個攜帶來自受信任發布者簽章的 技能會被視為更值得信任(簽署緩解措施會降低 其風險分數);一個未簽章的註冊表技能會被懲罰。你管理 你的工作區信任哪些發布者。
- 資源信譽。 一個技能的地位可以隨時間由其即時 行為調整——拒絕與異常會提高其風險,乾淨的連續紀錄則 降低它——所以一個在生產環境中行為不良的製品,即使其 資訊清單掃描乾淨,也會朝隔離漂移。
6. 自動偵測的能力
掃描器不只在你手動註冊某物時才執行。當一個 代理自行安裝一個能力且其工具首次穿越閘道時, 防火牆會自動偵測它(在熱路徑之外,非同步地)、從它觀察到的 內容合成一份資訊清單,並執行相同的掃描、評分與模式 衍生——以source = auto_detected。
自動偵測的能力在被審查之前會被隔離。 任何
自動偵測的、否則會解析為
allow 的東西,都會被壓到
quarantine(而 critical 仍為 block)直到有人類審查它。一個
無人批准的能力,不會只因為它掃描起來無害就得到通行證
——它只在你看過它之後才執行。7. 執行期強制執行
當一次工具呼叫抵達防火牆引擎時,它會 被歸因於一個擁有者技能,然後該技能的模式會疊加在 規則裁決之上:- 歸因。 該呼叫會先由其宣告的
allowed_tools匹配到一個技能, 然後由mcp_server命名空間前綴,再由一個 工作區範圍的最嚴格強制執行回退來匹配。 - 規則裁決。 政策的規則照常執行——而一條規則的
skill_name_glob讓你能 把一條規則限定到特定的技能。 - 模式覆寫。 一個
block技能會強制一個 deny;一個quarantine技能會 將任何未達 deny 的裁決升級為pending_approval;allow則讓 裁決保持不變。
技能歸因失敗關閉。 如果一個工具無法被歸因(一個沒有快取的
DB 錯誤,或一個受策展來源下未宣告的工具),該
呼叫會被保留以供審查,而不是被允許。而技能模式
獨立於影子模式——即使一個政策處於影子上線中,一個被隔離或
被封鎖的技能仍會被強制執行。
8. 生命週期
- 註冊——
POST /skills會同步地驗證並掃描, 傳回該技能連同其發現與裁決。模式會被衍生 (或你明確的模式會被採納)。 - 更新——重新掃描新的資訊清單;在掃描惡化時模式會更緊地棘輪 推進,但永不會放鬆你已儲存的 block/quarantine。
- 重新掃描——
POST /skills/:id/rescan會重新執行掃描;如果裁決 新近退化為 flagged 或 blocked,它會發出一個防火牆事件,使該 漂移顯示在你的動態中。 - 刪除——軟刪除並釋放 name 槽以供重新註冊。
API 參考
工作區層級;列表讀取對任何成員開放(並會隱去 帶有密鑰的欄位),其他一切都需要 Developer+。| 方法與路徑 | 角色 | 用途 |
|---|---|---|
GET /api/workspace/firewall/skills | Member | 列出技能(已隱去;以 ?kind= 與 ?source= 篩選)。 |
GET /api/workspace/firewall/skills/:id | Developer+ | 完整的技能記錄。 |
POST /api/workspace/firewall/skills | Developer+ | 註冊 + 掃描(name 重複時回傳 409)。 |
PUT /api/workspace/firewall/skills/:id | Developer+ | 更新 + 重新掃描。 |
POST /api/workspace/firewall/skills/:id/rescan | Developer+ | 重新掃描;在退化時發出一個事件。 |
DELETE /api/workspace/firewall/skills/:id | Developer+ | 軟刪除。 |
Name 在每個工作區內跨種類唯一——一個名為
github 的 skill
與一個名為 github 的 mcp_server 在同一個工作區中會衝突。請為每個
製品挑選不同的名稱。FAQ
這與規則 DSL 有什麼不同?
這與規則 DSL 有什麼不同?
規則依名稱與引數把關工具呼叫。
技能則在一個代理的任何工具執行之前,把關它載入的
能力——套件、它的資訊清單,以及它所請求的權限。
技能的模式接著會疊加在規則所決定的任何事物之上,
所以兩者組合:一條規則可以普遍地
allow http.fetch,而一個
擁有它的被隔離技能仍會被保留。是什麼阻止一個惡意技能宣告一份乾淨的資訊清單?
是什麼阻止一個惡意技能宣告一份乾淨的資訊清單?
有好幾件事。Tool-creep 偵測會標記使用了但未
宣告的工具;自動偵測會從實際穿越閘道的內容重新掃描,
而不只是所聲稱的資訊清單;模式在重新掃描時會更緊(而非
更鬆)地棘輪推進;資源信譽會隨時間把一個行為不良的製品
朝隔離漂移;而當一個工具無法被綁定到一個已宣告的技能時,
歸因會失敗關閉。
我必須手動註冊每一個技能嗎?
我必須手動註冊每一個技能嗎?
不必。註冊那些你想要預先批准的;其餘的會在首次使用時被
自動偵測並隔離,直到你審查它們。開啟
觀察模式以在不封鎖的情況下浮現一個代理安裝的一切,
然後從真實資料收緊。
延伸閱讀
想更深入了解代理安全?**保護你的代理(零信任)**指南會將此功能放入零信任工作流程中。安全代理基準
透過一個開關,將零信任姿態套用到每項代理能力。
代理防護欄
為自主、會使用工具的代理打造的防護欄。
