跳轉到主要內容
你寫了一條防火牆規則——對 shell.exec 的一個 deny、一個 egress 允許清單、一個只在 rm -rf 上觸發的引數子句——而現在你想知道它在 改變任何一次生產工具呼叫之前恰好做你認為的事。防火牆給你三種 非破壞性的方式來測試防火牆規則,每一個都回答一個不同的問題:

乾跑一次呼叫

Test 沙盒把一次合成的工具呼叫餵過真實引擎並傳回裁決——不派發、 不記錄任何東西。Developer+。

重放一個姿態

Simulate 對照你近期的流量重放一個自主等級,並計算它封鎖 多少次呼叫。Member 可讀。

對照即時流量執行

影子模式在真實呼叫上評估一整個政策,但把每個強制執行的裁決 降級為 audit。零波及範圍。
三者都透過主控台設定(或 /api/workspace/firewall/* 管理路由, 後者以你的工作階段/存取權杖驗證——而非一個中繼 sk-orca-… 金鑰)。你測試時,你代理的 /v1/* 中繼呼叫絕不改變。

1. 以乾跑 Test 沙盒測試防火牆規則

Test 沙盒是最緊的迴圈:交給它一次合成的工具呼叫,它就執行真實 評估引擎——完整的政策解析、按優先順序走訪規則、第一個匹配者 勝出——然後傳回裁決、產生它的規則,以及人類可讀的原因。該呼叫是 一個乾跑:沒有東西被派發到任何工具,也沒有東西被寫入事件動態或 Discovered-tools 庫存。 它精確地回答一個問題:給定這個確切的工具名稱與這些引數,我的政策 決定什麼——以及哪條規則決定它?
Test 沙盒是 Developer+。它能依 id 對照一個未儲存的草稿政策預覽, 而回應會浮現匹配到的政策名稱與規則標籤,所以它更接近一個寫入介面的 預覽而非一個單純的讀取——不像 Simulate 與其他讀取檢視,那些對每個 成員開放。

一次具體的乾跑

假設你已加入一條應該在指令包含 rm -rf 時拒絕 shell.exec 的 規則。你想一坐下就確認兩件事:危險的指令被拒絕,而一個無害的仍會 通過。
1

測試危險的呼叫

Security → Firewall 中,開啟 Test 分頁、挑選 response 介面、輸入工具名稱 shell.exec 與引數 {"command": "rm -rf /data"}, 並執行。回應指名裁決與匹配到的規則:
{
  "verdict": "deny",
  "policy_name": "prod-agents",
  "rule_label": "block destructive shell",
  "reason": "destructive shell command",
  "gap": false,
  "shadow_mode": false
}
2

測試無害的呼叫

{"command": "ls -la"} 再執行一次。引數子句不再匹配,所以規則 落到政策預設值——你應該看見 allowaudit 與一個空的 rule_label。如果 rm -rf 拒絕而 ls -la 不拒絕,你的 引數子句就限定 正確了。
3

在你綁定一個草稿之前預覽它

傳入一個 policy_id 以對照一個特定的草稿政策評估,而非你的流量 目前解析到的那個——這樣你能在你綁定一個金鑰到它或把它晉升為 工作區預設值之前證明一個新政策是對的。
讀取回應中的 gapgap: true 意味著一個政策解析了但它內部沒有 規則匹配該呼叫(且工作區處於觀察模式)——該工具溜過了每一條規則 並落到預設值。那是一個要在你發布之前關閉的涵蓋漏洞,而不是一個可 信任的裁決。
Test 沙盒使用與即時評估相同的介面——inboundresponsemcpegress(預設 inbound)——所以在每條規則所固定的介面上測試它。在 inbound 上沒有呼叫時引數,所以一條 sanitize 規則會在那裡升級為 一個封鎖,與它在生產環境中完全相同;關於為何介面很重要,參見 介面

2. 在你套用一個自主等級之前模擬它

Test 沙盒檢查一次呼叫。Simulate 回答姿態層級的問題:如果我把 這整個工作區切換到一個更嚴格的 自主等級, 它會封鎖我近期流量的多少? Simulate 對照你的尾隨防火牆事件重放一個候選等級的 deny 規則,並 傳回會發生的影響——只有工具名稱與計數,絕無引數。它是唯讀且 Member 可讀的,所以團隊上的任何人都能在一個 Developer 承諾之前 預覽 tight 的波及範圍。
  • tight——default-deny、拒絕破壞性 shell、拒絕擷取形狀的工具 (SSRF 向量)、強制執行 PII Shield + Secrets Blocker。Simulate 顯示 這個底線會捕捉你真實流量的多少。
  • balanced——預設 audit、拒絕破壞性 shell、PII Shield 僅稽核 (標記 PII)。建議的起始姿態。
  • permissive——僅觀察;不強制執行任何東西。
Simulate 什麼都不改變——它是對過去事件的一次假設。套用一個 自主等級(一項 Developer+ 寫入)會具體化出真實、可編輯的 autonomy_* 政策與防護欄列,並支援從稽核快照一鍵還原。用 Simulate 預覽,然後在計數看起來對的時候套用。

3. 影子模式:對照即時流量測試而零波及範圍

Test 沙盒與 Simulate 是離線預覽。影子模式是即時的那個:一個 每政策的旗標,在真實代理流量上評估該政策、走訪每一條規則、挑選 一個裁決——然後把每個強制執行的裁決(denysanitizepending_approval)降級為 audit,並把原因加上前綴 [shadow] would …。呼叫總是會通過;沒有東西被封鎖、遮罩或保留。 那讓事件動態讀起來就像一次 關閉了強制執行的生產執行。按 [shadow] 篩選,你就有了該政策即將 開始封鎖的每一次呼叫的完整清單——就在它封鎖任何一次之前。
測試方法對照執行它回答的問題
Test 沙盒一次合成呼叫這個確切的呼叫得到什麼裁決,以及哪條規則決定?」
Simulate近期事件「一個更嚴格的自主等級會封鎖多少次呼叫?」
影子模式即時流量「跨真實生產流量,這個政策會封鎖什麼?」
影子模式是三者中最深入的——完整的即時涵蓋而零波及範圍。它有自己的 頁面:以影子模式推出防火牆政策 走過切換開關、[shadow] would … 原因,以及切換為強制執行。

4. 一個實用的測試順序

三個工具組合成一條安全推出路徑——最便宜的檢查在先、最廣的涵蓋 在後:
1

乾跑你剛寫的規則

Test 確認每條新規則在它應該觸發的呼叫上觸發、在它不該的 呼叫上通過——包括負面案例。快速、Developer+、不持久化任何東西。
2

衡量姿態(可選)

如果你去拿一個自主等級而非手寫的規則,在套用它之前 Simulate 該等級並讀取對照真實流量的會被封鎖計數。
3

對照即時流量影子化

開啟影子模式並讓一個有代表性的真實呼叫窗口流動。讀取 [shadow] would … 事件;收緊任何浮現一個誤報的規則——仍在影子中、 零波及範圍。
4

強制執行

當動態在你預期的事物上觸發、在你不預期的事物上不觸發時,關閉 影子。下一次呼叫就真正強制執行。
測試預覽的是政策,而非受治理的技能。一個處於 blockquarantine 模式的技能,即使在一個 被影子化的政策下仍會強制執行——技能的審查處置勝出。影子化一個政策 從來不是解除隔離一個技能的請求。

5. API 參考

這些管理路由使用你的工作階段/存取權杖且是工作區範圍的:
方法與路徑角色用途
POST /api/workspace/firewall/testDeveloper+對照解析後的(或一個草稿 policy_id)政策乾跑一次合成工具呼叫。傳回 verdict、policy_namerule_labelreasongapshadow_mode。不派發、不記錄任何東西。
GET /api/workspace/firewall/simulate?level=Member對照近期事件重放一個自主等級;傳回會被封鎖的計數。
GET /api/workspace/firewall/policies/:idMember讀取一個政策目前的 shadow_mode 旗標。
PUT /api/workspace/firewall/policiesDeveloper+切換政策上的 shadow_mode
Test 主體接受 surface(預設 inbound)、一個必填的 tool_name、 可選的 args_json,以及一個用來覆寫解析的可選 policy_id

接下來去哪裡

影子模式

即時流量推出:[shadow] would …、事件篩選,以及切換為強制執行。

驗證引數

把一條規則限定到哪些引數——Test 沙盒讓你對照 rm -rf vs ls -la 驗證的子句。

裁決

當一次測試不再是測試時,allow / audit / deny / sanitize / pending_approval / cap_cost 各做什麼。

事件記錄

被影子化的裁決落入的地方——篩選、鑽入執行與匹配到的規則。
關於這些測試演練的規則匹配文法,參見完整的 防火牆規則參考;關於測試如何契合 更廣的模型,參見強制執行模式