Istio 中對出口流量的安全控制,第二部分

使用 Istio 出口流量控制來防止涉及出口流量的攻擊。

2019 年 7 月 10 日 | 作者:Vadim Eisenberg - IBM

歡迎來到我們關於 Istio 中出口流量安全控制的新系列的第二部分。在本系列的第一部分中,我介紹了涉及出口流量的攻擊,以及我們針對出口流量安全控制系統收集的需求。在這一期中,我將描述 Istio 安全控制出口流量的方式,並展示 Istio 如何幫助您防止攻擊。

Istio 中出口流量的安全控制

要在 Istio 中實施出口流量的安全控制,您必須將 TLS 流量導向透過出口閘道的外部服務。或者,您可以將 HTTP 流量導向透過出口閘道,並讓出口閘道執行 TLS 來源

這兩種選擇各有利弊,您應該根據自身情況在它們之間做出選擇。選擇主要取決於您的應用程式是否可以發送未加密的 HTTP 請求,以及您的組織安全策略是否允許發送未加密的 HTTP 請求。例如,如果您的應用程式使用某些用戶端程式庫加密流量,而無法取消加密,您就無法使用發送未加密 HTTP 流量的選項。如果您的組織安全策略不允許在Pod 內部發送未加密的 HTTP 請求(在 Pod 外部,流量由 Istio 加密),情況也是如此。

如果應用程式發送 HTTP 請求,並且出口閘道執行 TLS 來源,您可以監控 HTTP 資訊,例如 HTTP 方法、標頭和 URL 路徑。您也可以根據上述 HTTP 資訊定義策略。如果應用程式執行 TLS 來源,您可以監控 SNI 和來源 Pod 的服務帳戶的 TLS 流量,並根據 SNI 和服務帳戶定義策略。

您必須確保從您的叢集到外部的流量無法繞過出口閘道。Istio 無法為您強制執行此操作,因此您必須應用一些額外的安全機制,例如,Kubernetes 網路策略或 L3 防火牆。請參閱Kubernetes 網路策略設定範例。根據深度防禦概念,您為同一目標應用越多的安全機制,效果就越好。

您還必須確保 Istio 控制平面和出口閘道不會被入侵。雖然您的叢集中可能有數百或數千個應用程式 Pod,但只有十幾個 Istio 控制平面 Pod 和閘道。您可以而且應該專注於保護控制平面 Pod 和閘道,因為這很容易(只有少數 Pod 需要保護),而且對於您的叢集安全至關重要。如果攻擊者入侵控制平面或出口閘道,他們可能會違反任何策略。

根據您的環境,您可能有多種工具來保護控制平面 Pod。合理的安全措施包括:

一旦您將出口流量導向透過出口閘道並應用額外的安全機制,您就可以安全地監控和強制執行流量的安全策略。

下圖顯示了 Istio 的安全架構,並增強了 L3 防火牆,它是額外安全機制的一部分,應在 Istio 外部提供。

Istio Security Architecture with Egress Gateway and L3 Firewall
具有出口閘道和 L3 防火牆的 Istio 安全架構

您可以輕鬆地將 L3 防火牆配置為僅允許通過 Istio 入口閘道的輸入流量,並且僅允許通過 Istio 出口閘道的輸出流量。閘道的 Istio 代理會像網格中的所有其他代理一樣強制執行策略並報告遙測。

現在讓我們檢查一下可能的攻擊,讓我向您展示 Istio 中出口流量的安全控制如何阻止它們。

防止可能的攻擊

考慮以下出口流量的安全策略

假設攻擊者有以下目標

現在假設攻擊者設法侵入應用程式 A 的其中一個 Pod,並嘗試使用受損的 Pod 執行禁止存取。攻擊者可能會碰碰運氣,並以直接的方式存取外部服務。您將對直接嘗試做出以下反應

在未能以直接方式實現其目標後,惡意行為者可能會訴諸進階攻擊

就我們所知,所有禁止存取都被阻止,或者至少受到監控,並且可以在以後阻止。如果您看到其他涉及出口流量或目前設計中存在安全漏洞的攻擊,我們很樂意聽到您的意見

總結

希望我能讓您相信 Istio 是一個有效的工具,可以防止涉及出口流量的攻擊。在本系列的下一部分中,我將比較 Istio 中出口流量的安全控制與其他解決方案,例如Kubernetes 網路策略和舊式出口代理/防火牆。

分享這篇文章