Cloudflare Gateway 全程可程式設計安全網路閘道
A fully programmable secure web gateway
Cloudflare 釋出全新可程式設計安全閘道器功能,將 Workers 內嵌於 Gateway 政策評估,允許客製化程式直接執行於邊緣。
- Forward:新政策動作,將符合條件的 HTTP 請求轉發至 Cloudflare Worker,支援請求/回應變更與後端處理。
Cloudflare 透過 Workers 讓安全閘道可執行客製化程式,提升防護彈性與效率
市場上所有安全網頁閘道器運作方式相同:流量符合條件。觸發終端動作。允許、封鎖、隔離、紀錄。這個模型已成為近30年來網路安全的基礎,並且能妥善處理常見情況。但它有上限,擁有複雜環境的客戶經常觸及此上限。
今年早些時候,我們分享了建立「真正可程式化的 SASE 平臺」的願景 真正可程式化的 SASE 平臺。我們亦闡述了「programmability」一詞在安全產業中已被稀釋。大多數供應商宣稱具備程式化,因為他們提供公開 API、Terraform 提供者、Webhook 與警示功能。Cloudflare 也提供這些,但不足以滿足需求。真正的程式化意味著在策略評估路徑中執行您自行撰寫的程式碼——為特定環境所寫的任意邏輯——於安全決策時即執行。
今天,我們很高興宣佈 Cloudflare 正在將真正的程式化帶入 Cloudflare Gateway 與 DLP(資料遺失防護),透過將其整合至我們整體的邊緣運算平臺。我們將推出一種新的 Gateway 動作型別,Forward,以及可供所有 Zero Trust 計畫使用的自訂驗證函式。這些功能讓您可以使用 Cloudflare Worker 來轉換與操作流量,或將自己的資料帶入策略評估。
每個安全團隊面臨的權衡
自防火牆出現以來,企業就面臨二元選擇。您可以維護自己的安全偵測引擎——自己的防火牆、自己的代理基礎設施——以高維護成本和低可攜性換取最大化的客製化。或者,您可以接受供應商的限制,將大量維護成本外包,犧牲彈性以解決特定環境的問題。
在建立 Cloudflare Gateway 六年的過程中,我們聽到數千位客戶在這種權衡上苦惱。某安全團隊在為關鍵內部應用程式遷移存取控制時,需要根據身份供應商的 JSON Web Token (JWT) 壓印來注入 HTTP 標頭。資料已存在於請求上下文中,但 Gateway 無法讀取 JWT 並寫入標頭。因此該團隊單獨啟動了一組 NGINX 代理來完成此轉換。這套基礎設施現在必須不斷地進行修補、監控與安全保護…無限期。
另一個團隊想要在員工註冊新 SaaS 服務的那一刻即時收到 Slack 通知。策略引擎能偵測到註冊事件,但只能允許或封鎖。因此該團隊建立了 Logpush → SIEM → Slack 的管線,延遲 5 至 15 分鐘且無送達保證。又添上另一段基礎設施。
數十家企業客戶要求警告頁面在允許存取敏感目標前,提示使用者提供理由。大多數客戶還希望根據使用者身份與所請求存取等級的額外上下文來客製化後續行為。但從策略引擎提供客製化、動態回應極為困難。
多年來,我們為客戶提供了許多擴充點。但與其他防火牆供應商一樣,無法以同樣速度開發功能來覆蓋新出現的威脅向量。然而,我們也認識到,最佳解決方案是那些能無限擴充至您環境的方案。
為什麼只有 Cloudflare 能解決這個問題
Cloudflare 不只是防火牆、或安全網頁閘道、內容傳遞網路,或邊緣服務。Cloudflare Workers 已經允許客戶在全球 330+ 個地點的網路邊緣執行複雜邏輯。Cloudflare Gateway 已經在同一地點、同一機器、同一資料中心評估並執行使用者流量的安全政策。
只有 Cloudflare 能在同一個全球分散式網路中同時執行分散式客戶計算和完整功能的安全網頁閘道及防火牆。我們擁有獨特的機會與能力,將這些功能結合成業界首個 完全 可程式設計且可自訂的 SASE 平臺。
Gateway 與 Workers 一開始就建置於同一基礎設施上。當 Gateway 將流量轉發至 Worker 時,該排程即為本地函式呼叫。不存在髮尾轉接,也無需跨越網路邊界造成額外延遲。這是客戶首次能夠完全掌控其代理流量的處理方式,無須妥協,使用可自行撰寫並執行的程式碼,而不必維護任何基礎設施。
獨立的 SASE 供應商若沒有自己的計算平臺,需在獨立雲端部署自動化、手動配置 Webhook,並接受跨系統拼接所帶來的往返延遲與管理開銷。此領域中其他供應商並未擁有與其安全閘道共址的可程式設計邊緣計算平臺。隨著威脅以 AI 加速演進,此功能將為安全機構提供急需的彈性與敏捷性。
兩個 Gateway 入口:Forward 動作與 Custom Functions
一種名為 Forward 的新 Gateway 動作型別,以及一種名為 Custom Function 的新政策資源,是從 Gateway 政策呼叫 Worker 的兩種不同方式。Forward 動作今日已開放公測,Custom Functions 則會在年末前提供。
Forward 動作:流量轉換與代理
您可透過新 policy action 稱為 Forward 的功能,自訂 HTTP 流量行為,將符合條件的 HTTP 請求以代理方式轉發至 Worker。具有 Forward 動作的政策會針對 HTTP 政策允許的流量進行評估。第一條匹配的 Forward 規則將套用於您的流量,並將流量送至其繫結的 Cloudflare Worker。Worker 作為內聯中介軟體:它接收完整標頭與請求主體。您的邏輯隨後可選擇修改其中任何一項(或執行其他非同步操作),將請求轉發至原始伺服器,接收回應,亦可修改回應,最後將最終回應回傳給使用者。
import { WorkerEntrypoint } from "cloudflare:workers";
import type {
GatewayMiddlewareContext,
GatewayMiddlewareNext,
} from "@cloudflare/zt-types";
export class GatewayMiddleware extends WorkerEntrypoint {
async handle(
request: Request,
context: GatewayMiddlewareContext,
next: GatewayMiddlewareNext,
): Promise<Response> {
// Read a value from the Gateway context
const clientIP = context.srcIp;
// Add headers before the request reaches the origin
request.headers.set("X-Gateway-Client-IP", clientIP);
// Forward upstream and get the response
const response = await next(request);
// Modify the response before it reaches the user
response.headers.set("X-Processed-By", "gateway-middleware");
return response;
}
}Gateway 負責 TCP 連線、TLS 終止與重新加密、憑證管理以及 HTTP 版本協商。Worker 僅負責轉換邏輯。您將擁有一個可自訂、類似代理的擴充點,為現有安全堆疊提供功能,而無需承擔傳統 HTTP 代理的營運成本。
你的 Workers 也不必轉換請求。規則的唯一目的可以是將請求代理到一個 Worker,該 Worker 非同步接收完整的匹配請求上下文:傳送 Slack 訊息、寫入 R2、記錄到外部管道、呼叫 webhook、更新 KV 儲存。流量仍可繼續到其目的地,毫不受影響。
自訂函式:內嵌政策評估
自訂函式會在 Gateway 政策評估期間內嵌呼叫一個 Worker,並返回一個值。該函式隨後會以 selector 的形式公開於 Gateway 政策編輯器中,並根據其值進行評估。該 selector 可用於任何網路或 HTTP Gateway 規則的條件,與內建 selector 如 Source IP or Content Category 今日所用方式相同。
Worker 會接收有關請求的上下文:來源 IP、目的地、使用者身份、裝置姿態、HTTP 標頭等,具體內容取決於政策階段。Worker 會回傳一個已型別化的值(字串、數字或布林值),Gateway 會在規則條件中使用。契約簡單:輸入資料,輸出值。
以下是一個自訂函式,解析 JWT Authorization 標頭並回傳使用者的角色:
export class GatewayCustomSelector extends WorkerEntrypoint {
async compute(ctx: GatewayContext): Promise<string> {
const authHeader = ctx.request.headers.get("Authorization");
if (!authHeader) return "anonymous";
const token = authHeader.replace("Bearer ", "");
const payload = JSON.parse(atob(token.split(".")[1]));
return payload.groups?.[0] ?? "unknown";
}
}部署此函式後,管理員可建立一條 HTTP 政策規則:Custom Function \"JWT Role\" contains \"finance_contractor\" 並設定動作為 Allow。自訂函式成為規則條件的一部分,與其他 selector 一同評估。
自訂函式不限於 HTTP 流量。因為它們接收身份、裝置姿態及連線元資料,而非完整的 HTTP 請求,您亦可在 Gateway Network 政策規則編輯器中使用它們處理任意 Layer 4 埠與協定的流量。
Worker 本身可以執行任何已能執行的動作——呼叫外部 API、從 KV 或 D1 讀取資料,或呼叫 Workers AI。但從 Gateway 的角度看,該函式是確定性的:資料輸入,值輸出。
何時使用自訂函式或 Forward 動作
自訂函式旨在快速、受限、無狀態地評估資料,並可回傳已格式化的回應。您可以將其用途視為已可在 Gateway selector 內評估的資料;即在一組條件內進行計算,例如「此範圍內的埠號」或「符合此正規表示式模式的 URL 路徑」。其強大之處在於能以任意或內部資料來源擴充結構化評估,以下將示範一些範例。
Forward 動作需要更多規劃與準備。它可用於對使用者即時請求進行強大的即時轉換,並能在出口與回傳至原始服務時以複雜方式操控請求。這些應視為轉換函式,現今少數企業安全代理甚至尚未概念化。使用 Forward 動作的 Worker 必須精心定位與設計,以避免對終端使用者整體體驗造成負面影響。
您可以構建的內容
目的說明與中介頁面
Worker 會攔截對敏感目的地的請求,並回傳一個中介頁面,要求最終使用者提供書面授權理由。Worker 會呼叫 Cloudflare KV 以寫入帶 TTL 的會話,讓使用者每個設定期間只被提示一次。它會將使用者身份及其所述理由寫入 Cloudflare D1,建立審計軌跡。或者,你可以使用 Hyperdrive 將該記錄寫入你已經運營的任何內部資料庫。
這已經是我們超過四年來最受需求的功能之一。利用 Worker 能夠處理並操縱 HTTP 流量,您就能輕鬆構建符合您自身標準的解決方案。
動態 HTTP 標頭注入
自訂函式會從請求的 Authorization 標頭中解析 JWT,提取使用者的角色或群組成員資格,並將其作為選擇器值返回。Gateway 規則會根據該值匹配,並在上游請求中設定一個 X-App-Role 標頭。無需 NGINX 代理池,亦不需額外維護基礎建設。
檔案檢查與日誌記錄
當檔案下載符合特定條件時,Worker 可以將檔案送至第三方沙盒服務進行解封與分析。或者,它可以將整個檔案寫入 Cloudflare R2 作為永久紀錄,供日後檢查,而檔案永不離開 Cloudflare 網路。
政策匹配即時警示
當特定選擇器匹配時,與 Forward 政策繫結的 Worker 會接收流量。Worker 會將使用者電子郵件、觸發規則及目的地 URL 送至 Slack 頻道或 PagerDuty 端點。
export default {
async invoke(ctx: GatewayContext, env: Env): Promise<void> {
await fetch(env.SLACK_WEBHOOK_URL, {
method: "POST",
body: JSON.stringify({
text: `DLP alert: ${ctx.identity.email} triggered "${ctx.rule.name}" accessing ${ctx.request.url}`
})
});
}
}複雜評估邏輯
傳統防火牆的表示式建構器並未設計為在評估時執行某些組織所需的複雜計算。如果您維護跨多個資料來源進行行為分析的內部風險評分系統,或擁有複雜的使用者、群組與條件成員關係圖,其中多項條件必須獨立為真,您可以使用自訂函式作為計算擴充,評估所有邏輯並將單一值回傳給 Gateway。
效能與可靠性
由於 Gateway 與 Workers 服務執行於 Cloudflare 網路同一機器,將流量分派至 Worker 不會產生額外網路跳躍。效能影響僅限於 Worker 程式碼本身的執行時間。
當自訂函式失敗—丟擲例外、逾時或返回意外值—您可為每個函式設定回退行為。預設 值 在自訂函式合約中必須提供,以便輕鬆判斷行為。
可用性與價格
從今天起,Forward 動作及其與 Workers 的整合已進入公開測試版,Custom Functions 預計於年底前推出。正式上線時,兩者將對所有客戶、所有方案型別可用。
分派至 Worker 的流量將以標準 Worker 請求計費。此功能在 Workers Free、Workers Paid 與 Workers for Enterprise 上均可使用,功能上無限制。Workers Free 仍有執行時間與每日請求上限,使用者在擴充 Gateway 流量至 Worker 時需考慮此限制。
DLP 內嵌偵測驗證的自訂函式
一個 完全可程式設計的 SASE 平臺 不僅限於 Gateway。 我們的 DLP 方案——已整合於 Gateway、AI Gateway、Email Security 等——現在也能透過與 Compute 平臺的整合支援自訂結果。
大多數資料安全產品透過尋找符合已知模式的資料來運作。客戶通常可以定義正規表示式、詞彙表等來執行這些偵測。也可透過關鍵字或請求內容的語境分析提升匹配信心。但這些方法有核心缺陷:此類偵測只能告訴你何時有資料符合與組織相關的 pattern,而無法判斷 this specific instance 是否代表資料外洩或濫用。
隨著攻擊者變得越來越高階,且代理程式可被用來無情地利用系統,僅提升準確偵測模式的能力已不足夠。為提升對重要資料的準確度,你必須知道該資料是否對組織具有實際相關性。
為解決此問題,大多數方案採用精確資料比對,但也帶來自身權衡。客戶必須準備、維護並轉移參考資料集,然後決定是否願意讓供應商管理其最敏感系統的資料。
DLP 橋接的自訂驗證函式彌補了這一缺口,並且從今天起即提供。這些自訂函式允許客戶在 Cloudflare Worker 內直接使用自己的真實來源,定義驗證邏輯,並在使用 DLP 來保護敏感資料的 everywhere 應用。
憑證與金鑰驗證
當 DLP 偵測條目匹配時,可派遣外部 Worker 在執行策略強制前執行驗證邏輯。若你有偵測 GitHub 金鑰使用的設定,但只關心活躍的金鑰,則可使用 Worker 先查詢被偵測關鍵字的狀態,從相應的 GitHub 端點回傳回應,然後決定 DLP 設定是否應匹配該流量。
import {
DlpValidation,
type DlpValidationInput,
type DlpValidationResult,
} from "@cloudflare/zt-types";
export class DlpValidationEntrypoint extends DlpValidation {
async validate({ excerpt, start, end }: DlpValidationInput): Promise<DlpValidationResult> {
const bytes = Uint8Array.from(atob(excerpt), (c) => c.charCodeAt(0));
const token = new TextDecoder().decode(bytes.slice(start, end));
const res = await fetch("https://api.GitHub.com/user", {
headers: {
Authorization: `Bearer ${token}`,
"User-Agent": "dlp-GitHub-validator",
Accept: "application/vnd.GitHub+json",
},
});
if (res.ok) return { score: 1.0 }; // token is valid and active
if (res.status === 401) return { score: "veto" }; // token is invalid, discard
return { score: 0 };
}
}接下來會是什麼
這只是完全可程式設計 SASE 平臺的開始。我們正積極擴大可從中派發自訂功能到整個 Cloudflare One 套件的進入點,電子郵件安全將接續推出。這並不代表我們已經完成建置:此新架構將使我們更容易、更靈活、更具開發者體驗地將第一方功能快速整合進所有 Cloudflare One 服務。
使用 Cloudflare One 來 保護你的 Workers、代理程式及其流量 也變得越來越簡單。若您是 Enterprise 客戶,想要實施策略會談、預覽即將推出的功能,或接收關於自訂函式測試版的通知,請聯絡您的帳戶團隊。
您的組織安全現在能做任何 Cloudflare Worker 能做的事。我們迫不及待想看您會開發什麼。