Merak 零信任網路是怎麼運作的

「零信任」這個詞被行銷講壞了。它聽起來像一種態度,但實際上它是一組很具體的工程決策:連線由誰發起、身分用什麼表示、金鑰放在哪裡、授權在哪一層做、失敗時會發生什麼事。

這篇文章把 Merak 這類零信任網路存取(ZTNA)網路拆成八個機制,每個機制配一張圖。你只要知道 TCP 大概是怎麼建立連線的、憑證大概是什麼東西,就能讀完。看不懂的名詞在文末有對照表,每個都附了原始規格或說明的連結。

先講清楚要解決什麼問題

傳統網路安全是邊界模型:把公司資產放在一道牆裡面,牆上開一個門(VPN 閘道或防火牆),驗證發生在門口。通過驗證的人拿到一個內網 IP,從此他在牆內的可達範圍由網段和防火牆規則決定,而不是由「他是誰」決定。

這個模型的問題不在於門不夠牢,而在於門後面沒有第二道判斷。攻擊者只要偷到一組能過門的憑據,之後在內網移動就幾乎不受阻礙——這在攻擊技術分類裡叫做橫向移動(lateral movement),是絕大多數資料外洩事件中最關鍵的一段。

邊界模型:先進網路,再談權限 / 身分模型:先驗身分,再開通道左側為邊界模型:攻擊者通過閘道後即可在內網橫向移動到每一台主機,動畫依序演示這個擴散過程。右側為身分模型:每條連線各自授權,未授權的服務沒有任何回應。邊界模型:先進網路,再談權限內部網段!被盜的帳號閘道檔案伺服器ERP資料庫監控系統驗證只發生一次,之後由網段決定誰能連到誰一個立足點 = 同網段全部可達身分模型:先驗身分,再開通道使用者 + 裝置憑證identity: alice檔案伺服器ERP(已授權)資料庫監控系統無回應每條連線獨立授權,未授權者連探測都得不到回應帳號被冒用 = 該身分原有的權限,不會擴大
  • 攻擊者可走的路徑
  • 被授權的單一連線
  • 網路邊界
FIG 01 左邊是邊界模型:驗證只發生一次,之後由網段決定可達性。右邊是身分模型:連線與服務是一對一授權的,沒被授權的服務對這個身分而言不存在。
圖說文字版

並列比較兩種信任模型:左側的邊界模型以網路位置決定可達性,右側的身分模型以逐條連線的授權決定可達性。

左側:邊界模型(先進網路,再談權限)

  • 一組被盜的帳號從外部通過閘道,進入內部網段。
  • 網段內有四台主機:檔案伺服器、ERP、資料庫、監控系統。
  • 攻擊者取得立足點後,可沿網段內部逐步橫向移動,最終抵達全部四台主機。
  • 驗證只發生一次,之後由網段決定誰能連到誰。
  • 結論:一個立足點等於同網段全部可達。

右側:身分模型(先驗身分,再開通道)

  • 用戶端持有使用者憑證與裝置憑證,身分為 identity: alice。
  • 對象是同樣四個服務:檔案伺服器、ERP、資料庫、監控系統。
  • 政策只授權 ERP,因此只有一條連線被建立。
  • 其餘三個服務對這個身分沒有任何回應,連探測都得不到結果。
  • 結論:帳號被冒用時,攻擊者只取得該身分原有的權限,範圍不會擴大。

零信任的核心主張只有一句話:網路上的位置不構成信任的理由。要落實這句話,得先把「連得到」和「被授權」這兩件事在架構上徹底分開。

一、把「決定誰能連」和「實際搬運資料」拆開

第一個結構性決策是平面分離——這個詞借自網路設備的控制平面與轉發平面概念。

  • 控制平面負責身分登錄、政策定義、憑證簽發,以及每一條連線的授權決策。它做決定,但完全不經手應用資料
  • 資料平面是一組彼此相連的邊緣節點,組成網狀網路,實際轉送流量。它搬東西,但不做授權決定(它只執行控制平面同步下來的結果)。
控制平面 · Control plane / 資料平面 · Data plane(邊緣節點網狀網路)控制平面負責身分登錄、政策、憑證簽發與授權決策,不轉送應用資料;資料平面由彼此相連的邊緣節點組成,實際搬運流量。三類連線分別是控制連線、鏈路連線與邊緣連線。控制平面 · Control plane身分登錄 · 政策定義 · 憑證簽發 · 逐連線授權決策不經手任何應用層資料資料平面 · Data plane(邊緣節點網狀網路)邊緣節點 A邊緣節點 B邊緣節點 C用戶端應用內 SDK 或本機代理受保護的服務無對外監聽埠三類連線全部是雙向 TLS,每一端都得出示自己的憑證;沒有任何一段是明文或匿名的
  • 控制連線:節點與控制平面
  • 鏈路連線:節點與節點
  • 邊緣連線:應用與節點
FIG 02 控制平面做決定、資料平面搬資料。網路裡的三類連線——控制、鏈路、邊緣——全部是雙向 TLS,每一端都必須出示自己的憑證。
圖說文字版

控制平面與資料平面的職責切分,以及連接兩者的三類連線。

控制平面

  • 負責身分登錄、政策定義、憑證簽發、逐連線授權決策。
  • 不經手任何應用層資料。

資料平面(邊緣節點網狀網路)

  • 由邊緣節點 A、B、C 組成網狀網路,實際搬運流量。
  • 用戶端以應用內 SDK 或本機代理接入。
  • 受保護的服務沒有對外監聽埠。

三類連線

  • 控制連線:端點與控制平面之間,用於登錄、授權與政策下發。
  • 鏈路連線:邊緣節點彼此之間,構成網狀資料路徑。
  • 邊緣連線:端點與邊緣節點之間,是流量真正進出的那一段。
  • 三類連線全部是雙向 TLS,每一端都得出示自己的憑證;沒有任何一段是明文或匿名的。

這個切法有兩個直接後果。第一,廠商不在資料路徑上——控制平面看得到「誰在什麼時候要求連什麼」,但看不到內容。這在跨境資料傳輸與特定產業的合規審查裡,通常比效能數字更關鍵。第二,資料平面沒有一個集中的閘道,也就沒有一個一掛掉全體斷線的單點故障

圖上那三類連線全部走雙向 TLS(mTLS)。一般上網用的 TLS 只有伺服器出示憑證,用戶端是匿名的;雙向 TLS 則要求兩端都出示憑證,所以連線本身就攜帶了雙方的身分。沒有任何一段是明文,也沒有任何一段是匿名的。

二、身分不是一組帳號密碼,是一張憑證

在這種網路裡,每一個主體——人、裝置、服務、工作負載——的身分就是一張 X.509 憑證

如果你沒接觸過 PKI,可以先建立這個心智模型:憑證是一份「公鑰 + 這個公鑰屬於誰」的聲明,由一個受信任的簽發者(CA)用它自己的私鑰簽名。驗證方檢查簽名,就能確認這份聲明沒被竄改。但憑證本身是公開資訊,光有憑證不能證明你是誰——要證明身分,你得證明你握有對應的私鑰

所以整個註冊流程的設計目標只有一個:讓私鑰從產生到使用,全程不離開端點

④ 在本機產生金鑰對註冊流程依序為:一次性 token 帶外交付給端點,端點先驗證控制平面憑證,再於本機產生金鑰對並只送出憑證簽署請求,控制平面驗證後簽發憑證鏈,之後在到期前自動續期。私鑰全程不離開裝置。端點(人/裝置/服務)控制平面① 一次性註冊 token(JWT)以帶外方式交給端點② 依 token 內的位址連線,索取控制平面的憑證③ 回傳憑證;端點驗證對方確實持有對應私鑰⑤ 送出憑證簽署請求(CSR)+ 註冊 token⑥ 驗證通過 → 簽發憑證鏈,身分自此成立④ 在本機產生金鑰對私鑰寫入本機保存區,只把公鑰包成 CSR 送出⑦ 到期前自動重跑 ⑤⑥ 續期,不需人工換發私鑰自始至終沒有離開裝置——即使整段傳輸被錄下來,也複製不出這個身分
  • 走網路的訊息
  • 只在本機發生的步驟
  • 自動續期迴圈
FIG 03 註冊流程。一次性 token 只用來啟動信任,金鑰對在端點本機產生,離開裝置的永遠只有公鑰(包在 CSR 裡)。憑證到期前自動重跑同一段流程續期。
圖說文字版

端點取得憑證身分的完整流程,共七個步驟,重點在私鑰從不離開裝置。

參與者

  • 端點(人、裝置或服務)。
  • 控制平面。

步驟

  • ① 一次性註冊 token(JWT)以帶外方式交給端點。
  • ② 端點依 token 內記載的位址連線,索取控制平面的憑證。
  • ③ 控制平面回傳憑證;端點驗證對方確實持有對應私鑰。
  • ④ 端點在本機產生金鑰對,私鑰寫入本機保存區,只把公鑰包成 CSR 送出。
  • ⑤ 送出憑證簽署請求(CSR)連同註冊 token。
  • ⑥ 控制平面驗證通過後簽發憑證鏈,身分自此成立。
  • ⑦ 到期前自動重跑步驟 ⑤ 與 ⑥ 續期,不需人工換發。

重點

  • 私鑰自始至終沒有離開裝置——即使整段傳輸被完整錄下,也複製不出這個身分。

流程的關鍵在第 ④ 步。端點在本機產生一組非對稱金鑰對,私鑰寫進本機保存區,然後把公鑰包成一份憑證簽署請求(CSR,RFC 2986)送出去。控制平面驗證後簽發憑證鏈回來。

這代表:就算有人完整錄下整段註冊流量,他也組不出這個身分——他手上只有公鑰。這和「把密碼或 API 金鑰送過網路」是本質上不同的安全模型;後者只要傳輸或儲存任一環出問題,憑據就複製出去了。

第 ① 步的那張一次性註冊 token 通常是一個帶有效期的 JWT(RFC 7519),只能用一次,作用僅僅是「告訴端點該連到哪裡、並讓控制平面認得這次註冊」。它換到憑證之後就作廢了。

值得注意的細節: 就算你的主要登入方式是 OpenID Connect 或帳號密碼,用戶端在連上邊緣節點之前,仍然必須先換到一張臨時憑證——因為資料平面全程要求 mTLS,沒有憑證根本建不起連線。人的登入方式和連線的身分載體,是兩件事。

三、為什麼要加密兩次

看到「全程 mTLS」又看到「端對端加密」,第一個反應通常是:這不是重複了嗎?

不是。它們保護的是不同的東西,而且是巢狀關係。

封裝順序(由內而外) / 路徑上誰解得開什麼左側為封裝順序:應用酬載先由端對端 AEAD 封裝,外面再套上逐段的 mTLS。右側為路徑上的解密能力:只有兩端持有端對端金鑰,中繼的邊緣節點只轉送它解不開的密文。封裝順序(由內而外)mTLS 1.2+ · 每一段連線各自的金鑰AEAD 封裝 · 金鑰只在通訊兩端應用酬載HTTP / SQL / 任何協定兩層彼此獨立,換掉其中一層不影響另一層路徑上誰解得開什麼端對端金鑰 KemTLS ①mTLS ②應用 A中繼邊緣節點應用 B持有 Ke持有 Ke只轉送密文中繼節點被攻陷,讀到的仍然只是密文
  • mTLS:逐段、每段各自金鑰
  • AEAD:端對端、金鑰只在兩端
  • 原始應用酬載
FIG 04 左:封裝順序。應用酬載先被端對端封裝,外面再套上逐段的傳輸層加密。右:解密能力沿路徑的分布——中繼節點能解開它那一段的傳輸層,但解不開裡面的酬載。
圖說文字版

左側是封裝順序,右側是同一條路徑上各節點分別解得開什麼。

封裝順序(由內而外)

  • 最內層:應用酬載,可以是 HTTP、SQL 或任何協定。
  • 中間層:AEAD 封裝,金鑰只存在於通訊的兩端。
  • 最外層:mTLS 1.2 以上,每一段連線各自持有不同金鑰。
  • 兩層彼此獨立,換掉其中一層不影響另一層。

路徑上誰解得開什麼

  • 路徑為:應用 A → 中繼邊緣節點 → 應用 B,中間分成 mTLS ① 與 mTLS ② 兩段。
  • 應用 A 持有端對端金鑰 Ke。
  • 應用 B 持有端對端金鑰 Ke。
  • 中繼邊緣節點不持有 Ke,只轉送它解不開的密文。
  • 因此中繼節點即使被攻陷,讀到的仍然只是密文。
  • 傳輸層(mTLS)是逐段的。用戶端到節點 A 是一段、節點 A 到節點 B 是另一段,各自有各自的金鑰。它負責的是「這一跳的對象是誰、這一跳的內容別人聽不到」。
  • 應用資料層(AEAD)是端對端的。酬載在來源端就用認證式加密(AEAD,RFC 5116)封好,金鑰只有通訊的兩端持有,中間節點沒有。實務上會用像 ChaCha20-Poly1305(RFC 8439)這類同時提供機密性與完整性的演算法——「認證式」的意思是密文被改一個位元,解密方會直接判定失敗,而不是解出一堆垃圾。

這一層的意義很直接:中繼節點只轉送它解不開的密文。資料平面對酬載的機密性而言是「不受信任」的元件,就算某個節點整台被拿下,攻擊者拿到的還是密文。

端對端的邊界落在哪裡取決於接入方式:如果加密邊界內嵌在應用程式本身,邊界就在兩個應用之間;如果因為系統老舊不能改程式,改用本機代理承接,邊界就在兩個代理之間。後者仍然涵蓋整段網路路徑,只是最後那一小段(代理到應用的本機迴路)在保護範圍外——這是導入時要明確標示的取捨。

四、每一條連線都重新問一次「可以嗎」

拿到有效憑證,只完成了認證(你是誰),還沒完成授權(你可以做什麼)。這兩者被混為一談,是很多存取控制設計出錯的起點。

每當有人要對某個服務開一條新連線,判定會依序走完四道:

有憑證只代表通過「認證」;每開一條連線,下面四道都要重走一次每一條連線都要依序通過四道判定:憑證有效且已登錄、政策授權此身分使用該服務、連線走的是被授權的節點與路徑、端點姿態符合要求。四項全過才建立一條僅通向該服務的通道,任一項失敗即拒絕。有憑證只代表通過「認證」;每開一條連線,下面四道都要重走一次連線請求憑證有效且身分已登錄identity政策授權此身分使用該服務policy連線走的是被授權的節點path端點姿態符合政策要求posture建立通道僅通向該服務任一道不通過 → 拒絕,且不回傳足以辨識服務存在的資訊授權範圍就是這條通道本身——它到不了任何沒被授權的服務
  • 判定鏈
  • 全過:開通僅限該服務的通道
  • 任一失敗:拒絕
FIG 05 逐連線授權。四道全過才開一條通道,而這條通道只通向那一個服務;任一道失敗就拒絕,而且拒絕時不回傳任何足以確認服務存在的資訊。
圖說文字版

每一條連線都必須依序通過四道判定,四項全過才會建立通道。

前提

  • 持有憑證只代表通過「認證」;每開一條新連線,下面四道判定都要重走一次。

四道判定(依序)

  • ① identity:憑證有效,且該身分已完成登錄。
  • ② policy:政策確實授權此身分使用該服務。
  • ③ path:連線走的是被授權的節點與路徑。
  • ④ posture:端點姿態符合政策要求。

結果

  • 四項全過 → 建立通道,且該通道僅通向這一個服務。
  • 任一道不通過 → 拒絕,且不回傳任何足以辨識該服務存在的資訊。
  • 授權範圍就是這條通道本身——它到不了任何沒被授權的服務。

重點在於授權的粒度時機。粒度是「單一服務」而不是「一個網段」,時機是「每一條連線」而不是「每一次登入」。這兩點合起來,就是最小權限原則在網路層的實作:某個端點被入侵時,攻擊者能碰到的僅限於那個身分原本就被授權的那幾個服務,圖 01 右邊那些連不到的服務,對他來說一樣連不到。

設計陷阱: 授予同一服務的多條政策之間通常是 OR 聯集——只要有一條通過就放行。如果你替同一組 identity 與 service 同時掛了一條「帶姿態檢查」和一條「不帶姿態檢查」的政策,後者會靜默地讓姿態檢查失效,而且系統不會報錯,因為兩條政策各自都合法。寫政策時務必把聯集語意算進去。

五、通過之後還要一直通過

第 ④ 道的**姿態檢查(posture check)**值得單獨講,因為它是少數會在連線「已經建立之後」還持續作用的機制。

只在建立連線時檢查一次 / 連線期間持續評估上排是只在連線建立時檢查一次的模型:端點事後偏離合規,既有連線仍然活著。下排是連線期間持續評估的模型:偏移發生的當下,既有連線就被終止。動畫以一條時間軸掃過兩種模型的差異。端點偏離合規的時刻只在建立連線時檢查一次建立連線時通過檢查連線仍然活著,直到使用者自己斷線連線期間持續評估每次狀態比對都通過授權消失 → 既有連線當場終止time →回報是變更驅動的:端點定期比對自身狀態,只有變化時才送出,不是定時全量上報
  • 評估通過
  • 端點狀態改變
  • 授權消失,連線終止
FIG 06 上排:只在建立連線時檢查一次,端點事後失去合規狀態,連線仍然活著。下排:連線期間持續評估,偏移發生的當下就失去授權,既有連線被終止。
圖說文字版

同一條時間軸上比較兩種姿態檢查模型:只檢查一次,與連線期間持續評估。

上排:只在建立連線時檢查一次

  • 建立連線的當下通過檢查。
  • 之後某個時刻,端點偏離合規狀態。
  • 既有連線仍然活著,直到使用者自己斷線為止。

下排:連線期間持續評估

  • 連線建立後,每次狀態比對都持續通過。
  • 端點偏離合規的那一刻被立即偵測到。
  • 授權隨即消失,既有連線當場終止。

回報機制

  • 回報是變更驅動的:端點定期比對自身狀態,只有發生變化時才送出,而不是定時全量上報。

一般的存取控制是「進門時檢查」,所以一台在上班時合規、下午被裝了東西的筆電,那條連線可以一路撐到使用者自己關掉。持續評估的差別在於:偏移發生的當下,既有連線就會被關閉,不用等下次重連。

常見的檢查類型大致是這幾種:

檢查類型判定的東西常見用途
作業系統 / 版本指定的 OS,可再指定版本範圍(用 Semver 之類的表達式)擋掉停止支援、不再收安全更新的版本
網路介面位址端點的介面位址落在允許清單內綁定特定的公司配發設備
多因子(MFA)端點目前已啟用並通過 TOTP(RFC 6238) 驗證,可設逾時高敏感服務要求近期驗證過
程序依執行檔路徑、二進位雜湊或簽章指紋比對確認防毒/端點防護確實在跑
網域成員端點是指定網域的成員區分公司資產與個人裝置

MFA 是其中唯一帶時間語意的:可以設定「多久以前驗證過才算數」,並在裝置鎖定或休眠喚醒後要求重新提交。

值得留意的是回報機制:姿態回報是變更驅動的——端點定期比對自身狀態,只在有變化時才送出回報,而不是每隔幾秒把全部狀態上傳一次。這對規模化很重要,也順帶解釋了為什麼偏移偵測會有秒級而非毫秒級的延遲。

六、服務為什麼「掃不到」:把連線方向反過來

這是整套架構裡最違反直覺、也最有效的一招。

要理解它,先回到 TCP 建立連線的基本事實。一個服務要能被連上,就必須開一個入站監聽埠——等於對整個網路廣播「我在這裡,這個埠可以連我」。而任何開著的埠在 port scan 下都會現形:掃描者送一個 SYN,只要收到 SYN-ACK,就確認了「這裡有東西」。接下來就是版本指紋辨識、憑證探測、已知漏洞比對、登入頁爆破——整條攻擊鏈的第一步,就是那個回應。

監聽埠本身就是攻擊面。 所以零信任網路的做法是:不要有監聽埠。

傳統:服務開一個入站監聽埠等人來連 / 出站撥號:服務只撥出,從不接受入站連線上排為傳統服務:開著入站監聽埠,掃描者送出 TCP SYN 會收到 SYN-ACK,服務因此現形。下排為出站撥號模式:服務沒有任何監聽埠,掃描得不到回應;服務改為主動撥出一條連線到邊緣節點,授權流量沿這條既有連線反向送回。傳統:服務開一個入站監聽埠等人來連掃描者網際網路上的任何人防火牆:入站需要 allow 規則服務主機:443 LISTENTCP SYN →← SYN-ACK:現形了有回應 = 指紋辨識、憑證探測、登入頁爆破的起點出站撥號:服務只撥出,從不接受入站連線掃描者網際網路上的任何人防火牆:入站可全部 default-deny服務主機no listenerTCP SYN →沒有 SYN-ACK,也沒有 RST——什麼都沒有邊緣節點① 服務主動撥出一條 TCP 連線(outbound)② 授權流量沿這條既有連線反向送回服務
  • 掃描者的探測封包
  • 回應 = 現形
  • 服務主動撥出的連線
  • 沿既有連線反向送回的流量
FIG 07 上排是傳統模式:開埠等連,掃描一送 SYN 就回 SYN-ACK,服務現形。下排是出站撥號:服務端沒有 listener,掃描得不到任何回應;服務改為自己撥出一條連線,授權流量沿這條既有連線反向送回。
圖說文字版

對比兩種暴露模型:傳統服務開入站監聽埠,與服務只對外撥出、從不接受入站連線。

上排:傳統,服務開一個入站監聽埠等人來連

  • 掃描者可以是網際網路上的任何人,向服務送出 TCP SYN。
  • 防火牆必須為入站流量開一條 allow 規則。
  • 服務主機的狀態是 :443 LISTEN。
  • 服務回應 SYN-ACK,位置與存在因此現形。
  • 有回應就是指紋辨識、憑證探測與登入頁爆破的起點。

下排:出站撥號,服務只撥出,從不接受入站連線

  • 服務主機的狀態是 no listener,沒有任何監聽埠。
  • 防火牆的入站規則可以全部 default-deny。
  • 掃描者送出 TCP SYN 後,沒有 SYN-ACK,也沒有 RST——什麼都沒有。
  • ① 服務主動向邊緣節點撥出一條 TCP 連線(outbound)。
  • ② 授權流量沿這條既有連線反向送回服務。

承載服務的節點不開任何對外監聽埠,而是主動向資料平面撥出一條 TCP 連線,並在這條已經建立的連線上,把自己註冊為該服務的終端者。之後所有要送往這個服務的授權流量,都由邊緣節點沿著這條既有通道「反向」送回去。服務端從頭到尾只曾撥出,從未接受過任何來自網際網路的入站連線

對掃描者來說,結果是這樣的:

面向傳統入站服務出站撥號
連線方向用戶端 → 服務(inbound)服務 → 邊緣節點(outbound)
對外監聽埠需要開放沒有任何 listener
SYN 掃描結果SYN-ACK,現形沒有回應,等同不存在
入站防火牆規則需要 allow 規則可全部 default-deny
公網 IP / NAT 設定通常需要不需要

注意最後兩列的實務價值。因為只需要放行出站(通常是 443,多數環境本來就開著),服務端可以把入站防火牆設成全部拒絕;也因為連線是從內往外建立的,它天然穿透 NATCGNAT——這就是為什麼服務可以部署在完全沒有公網 IP 的私有網段裡,卻仍然能被授權的人存取:它從來不需要「被連入」

值得說清楚的是這招防的是什麼、不防的是什麼。它移除的是被任意掃描與探測的可能性,也就是攻擊鏈最前面那一段;它不會讓應用程式本身的漏洞消失。已被授權的身分打進來時,你的 SQL injection 還是 SQL injection。

七、流量怎麼走:成本導向路由與自動改道

合法流量進入資料平面之後,還有一個問題:走哪條路?

路徑是算出來的:量測到的延遲加上各段設定成本,永遠走總成本最低的那一條資料平面是一張網狀網路,每段鏈路都有成本。動畫先讓流量走總成本最低的路徑,接著讓其中一段鏈路故障,路由自動改走次低成本的替代路徑,沒有集中閘道可以成為單點故障。12409251411ABCDE用戶端服務原路徑 9 + 11 = 20改道後 12 + 14 = 26路徑是算出來的:量測到的延遲加上各段設定成本,永遠走總成本最低的那一條
  • 原本的最低成本路徑
  • 故障鏈路
  • 自動改道後的路徑
FIG 08 每段鏈路都有成本,流量走總成本最低的路徑。B 到 D 的鏈路故障時,路由自動改走次低成本的替代路徑;沒有集中閘道,也就沒有一掛全斷的單點。
圖說文字版

網狀資料平面上的成本導向路由,以及一段鏈路故障後的自動改道。

拓撲

  • 用戶端與服務之間由多個邊緣節點組成網狀網路,存在數條可行路徑。
  • 每一段鏈路都標有成本值。

正常狀態

  • 流量走總成本最低的路徑,成本為 9 + 11 = 20。

鏈路故障後

  • 其中一段鏈路失效,路由自動改走次低成本的替代路徑。
  • 改道後的總成本為 12 + 14 = 26。
  • 過程中沒有集中閘道需要切換,因此不存在單點故障。

重點

  • 路徑是算出來的:量測到的延遲加上各段設定成本,永遠走總成本最低的那一條。

資料平面持續量測各段鏈路的延遲,路徑選擇是成本導向的:量測到的延遲、加上維運者為各段鏈路設定的成本、加上終端者本身的成本與優先序,取總和最低的路徑。概念上就是一張加權圖上的最短路徑問題,只是權重會隨著量測結果變動。

某段鏈路故障或壅塞時,路由自動改走替代路徑,對上層應用近乎無感。這和單一閘道的架構有結構性的差別——閘道式架構下,閘道掛掉就是全體斷線,而網狀資料平面沒有那個「全體」。

八、這套架構的限制

任何說「這個架構沒有取捨」的文件都不值得讀。以下幾點應該在評估階段就攤開來:

  • 端點或服務側需要部署元件。 完全無法安裝任何東西、也無法用一台獨立主機在前面承接的環境,不適用。
  • 控制平面的可用性是關鍵路徑。 授權決策依賴控制平面,所以它的高可用設計必須納入架構評估,不能當作附屬元件。
  • 不取代應用層的權限控管。 這套機制決定「這個身分能不能連到這個服務」,服務內部的角色、資料列權限、稽核,仍然是應用程式自己的責任。
  • 既有的網路監控會出現盲點。 端對端加密意味著中間節點看不到內容,原本依賴閘道側檢查流量的監控與 DLP 機制需要重新規劃——通常改成在端點側或應用側取得可見性。
  • 政策的聯集語意容易誤用。 前面提過的 OR 聯集陷阱,在政策數量長起來之後是最常見的設定錯誤來源,值得建立審查機制。

名詞對照與延伸閱讀

名詞一句話解釋出處
零信任架構不以網路位置作為信任依據的架構原則NIST SP 800-207
TLS 1.3目前的傳輸層加密標準RFC 8446
雙向 TLS(mTLS)連線兩端都出示憑證的 TLS 用法Mutual authentication
X.509 憑證公鑰與其持有者身分的標準格式RFC 5280
PKI憑證的簽發、驗證與撤銷體系Public key infrastructure
CSR只含公鑰的憑證簽署請求RFC 2986
憑證撤銷狀態查詢確認一張憑證是否已被撤銷RFC 6960
JWT帶簽章的權杖格式,常用於一次性註冊與登入RFC 7519
OpenID Connect建立在 OAuth 2.0 上的身分驗證層OIDC Core
PKCE公開用戶端的授權碼防攔截機制RFC 7636
AEAD同時保證機密性與完整性的加密模式RFC 5116
ChaCha20-Poly1305一種常見的 AEAD 演算法RFC 8439
TOTP以時間為基礎的一次性密碼,MFA 常用RFC 6238
TCP 連線建立三向交握與 SYN/SYN-ACK 的定義RFC 9293
連接埠掃描逐一探測哪些埠有回應的技術Port scanner
NAT / CGNAT位址轉換,以及電信級的共用位址空間RFC 3022 · RFC 6598
橫向移動攻擊者在內網從一台主機擴散到下一台MITRE ATT&CK TA0008
最小權限原則只給剛好夠用的權限Principle of least privilege
控制平面 / 資料平面做決定的部分與搬資料的部分分離Forwarding plane
單點故障單一元件失效導致整體失效Single point of failure
語意化版本版本號的比較規則,姿態檢查會用到Semantic Versioning

這篇的圖示為說明用的簡化架構:成本導向路由的完整權重、姿態回報週期、控制平面的高可用拓撲等細節為了清楚起見已經略去,實際數值與行為以產品文件為準。如果你想針對特定環境討論導入方式,或需要更完整的技術規格,歡迎透過聯絡我們提出。

返回部落格

SDP v3.0 改了什麼:從單封包授權到身分原生

SDP v3.0 把單封包授權從「定義」降級成選項之一。新版實際改了哪幾件事、SPA 在 IoT 與雲端函數上為什麼撐不住、SDP 與微隔離的界線該畫在哪裡,以及導入時第一步該做什麼。

軟體定義邊界(SDP)是什麼、怎麼運作

軟體定義邊界把邊界從網路入口搬到每個資源前面:三個角色與兩個平面、單封包授權為什麼讓掃描器連拒絕都收不到、它和連接埠敲門差在哪,以及這套架構擋不住什麼。

何謂零信任架構

寫給不碰技術的經營者:零信任到底在解決什麼問題、和過去的資安做法差在哪、對公司實際值多少,以及該問資訊部門哪些問題。