shell.exec 的 deny、一個 egress 允許清單——而你相信它是對的。但
對照生產代理流量將它切換為開啟是一場信心的跳躍:一條過於寬泛的
規則,你就會封鎖你的代理正當發出的呼叫。
防火牆影子模式是那個安全推出開關。它是一個每政策的旗標,告訴
閘道完全像在生產環境中那樣評估該政策、記錄一切,但封鎖無物。
每個強制執行的裁決都會被降級為 audit,而事件原因會被加上前綴
[shadow] would …,所以你能精確地讀出該政策會做什麼——而它尚未
做任何事。
影子模式是政策上的一個旗標,在主控台中設定(或
/api/workspace/firewall/policies 管理路由,後者使用你的工作階段/
存取權杖——而非中繼 sk-orca-… 金鑰)。切換它是一項
Developer+ 動作。你代理的 /v1/* 中繼呼叫不變。1. 防火牆影子模式做什麼
當一個政策的shadow_mode 旗標開啟時,閘道會執行完整的評估——
解析政策、按優先順序走訪規則、挑選一個裁決——然後,就在該裁決
生效之前,降級任何會改變呼叫的東西:
| 解析後的裁決 | 在影子模式下 |
|---|---|
deny | → audit,原因 [shadow] would deny — … |
sanitize | → audit,原因 [shadow] would sanitize — … |
pending_approval | → audit,原因 [shadow] would pending_approval — … |
allow / audit | 不變(已經是非封鎖的) |
2. 一次具體的推出
假設你有一個政策prod-agents,帶有一條對破壞性 shell 指令的 deny
規則,而你想確認它不會在任何正當的東西上絆倒。
開啟影子模式
在 Security → Firewall → Policies 中開啟
prod-agents,將
Shadow mode 切換為開啟並儲存。政策保留它的綁定與它的規則
——它只是停止強制執行。讀取會發生的拒絕
開啟 Events 並按
[shadow]
原因篩選。每一列都顯示工具、介面、執行,以及匹配到的規則——所以
在一個 shell.exec 呼叫上的 [shadow] would deny — destructive shell command 正是你在生產環境中會看見的,只少了那個 HTTP 400。關閉影子模式
一旦動態顯示政策在你預期的事物上觸發、在你不預期的事物上不
觸發,就將 Shadow mode 切換為關閉。從下一次呼叫起,那些
[shadow] would deny 事件會變成真實的
firewall_blocked 拒絕。deny 規則的正當
呼叫——就在仍處於影子狀態時修正該規則(收緊
glob或加入一個
引數子句),然後再次
觀察動態。你能以零波及範圍對照真實流量反覆迭代。
3. 影子模式不會軟化什麼
影子模式是政策的一個預覽,而不是一個總開關。 幾個值得知道的額外邊界:Allow 與 audit 裁決不受觸動
Allow 與 audit 裁決不受觸動
只有強制執行的裁決(
deny、sanitize、pending_approval)會被
降級。一個 allow 或 audit 已經讓呼叫通過,所以沒有東西可
軟化——那些事件仍會攜帶影子標記,所以你能分辨它們被記錄時政策
處於影子狀態。cap_cost 在降級之前解析
cap_cost 在降級之前解析
一條
cap_cost 規則會根據該
執行的累計花費解析為一個具體的 allow 或 deny,而那個解析後
的裁決才是影子模式接著降級的對象——一個會發生的觸頂拒絕就像
其他任何裁決一樣顯示為 [shadow] would deny。它是每政策的,而非每工作區
它是每政策的,而非每工作區
影子模式獨立地存在於每個政策上。你可以影子化一個全新政策,同時
一個身經百戰的政策繼續強制執行——沒有一個工作區範圍的影子開關
會讓你忘了關掉。
4. 影子模式 vs. 其他推出旋鈕
防火牆給你三個不同的「先別弄壞任何東西」控制項。它們解決不同的 問題:| 控制項 | 範圍 | 它回答的問題 |
|---|---|---|
| 影子模式 | 一個政策 | 「如果我強制執行這個政策,它會封鎖什麼?」 |
audit 預設裁決 | 一個政策 | 「記錄沒有規則指名的一切,封鎖無物。」 |
| 觀察模式 | 工作區 | 「哪些工具正在執行而沒有政策涵蓋它們?」 |
audit 是針對一個政策未匹配的尾端;觀察模式則是關於跨工作區的
涵蓋缺口,而不是某個特定政策的強制執行。
你可以將它們堆疊。一個影子模式下的新 default-deny 政策是可能最
溫和的推出:即使是 default-deny 底線也只記錄
[shadow] would deny
而不封鎖,所以你能在 deny 上線之前看見你的 allow 規則尚未涵蓋的
完整呼叫集合。5. 合規包先落入影子
當你以觀察(非強制執行)模式 安裝一個合規包時,它具體化的 防火牆政策會以影子模式開啟的方式建立——它們會對照你的流量評估 並記錄而不封鎖任何東西。將該包晉升為強制執行會把那些政策切出 影子。同一個機制,為你套用:乾跑控制項、讀取會發生的裁決,然後 強制執行。6. 切換它
在主控台中,影子模式是政策編輯器上的一個切換開關。同一個旗標在 管理 API 上以政策物件上的shadow_mode 公開——這些路由使用你的
工作階段/存取權杖並需要 Developer+:
| 方法與路徑 | 角色 | 備註 |
|---|---|---|
PUT /api/workspace/firewall/policies | Developer+ | 在主體中對政策設定 shadow_mode: true / false。 |
GET /api/workspace/firewall/policies/:id | Member | 讀取一個政策目前的 shadow_mode 狀態。 |
version 整數遞增,所以開啟與關閉影子本身就被追蹤。
接下來去哪裡
建立與綁定政策
影子模式推出的兩步設定——建立政策、綁定一個金鑰。
事件記錄
[shadow] would … 出現的地方——篩選、鑽入執行與規則。裁決
影子模式降級的強制執行裁決,以及每一個在即時下做什麼。
強制執行模式
影子、audit 與 observe 如何契合更廣的強制執行模型。
