本文將說明 GKE 網路安全的核心概念,例如最低權限原則,並協助您選擇合適的工具來保護叢集。導入 GKE 網路安全性的主要目標是隔離工作負載,以及確保多用戶群環境安全無虞。為達成這些目標,您應採用最低權限和縱深防禦原則,並根據實用資料做出安全決策。
在 Google Kubernetes Engine (GKE) 中,對網路流量套用最小權限原則,表示只允許應用程式運作所需的通訊。根據預設,GKE 叢集內的網路是開放的,也就是說,每個 Pod 都能與其他 Pod 通訊。
GKE 現在支援階層式網路安全方法,可透過 ClusterNetworkPolicy 在所有命名空間中強制執行管理層級的政策。
本文件提供運算子、網路專家和安全專家所需瞭解的資訊,以及在 GKE 叢集中實作網路安全性的方法。如要進一步瞭解 Cloud de Confiance by S3NS中的常見角色和範例工作,請參閱「常見的 GKE 使用者角色和工作」。
閱讀本文前,請先確認您熟悉下列事項:
- GKE 網路概念:如需總覽,請參閱「關於 GKE 網路」。
- Kubernetes Pod、服務和命名空間:這些基本 Kubernetes 資源是定義網路安全政策的中心。請參閱 Kubernetes 說明文件。
- 最小權限原則:這項安全原則是本文通篇適用的核心概念。
GKE 網路安全目標
GKE 網路安全政策可在叢集內提供精細的 Kubernetes 感知流量控制。這些政策是整體安全策略的重要元素。如要實作穩健的網路安全機制,請考慮下列基本原則:
- 最小權限:只授予系統和服務執行功能所需的最低權限。這項原則可降低遭入侵的潛在影響。Kubernetes 網路政策可協助您從預設開放的網路,改為只允許必要連線的網路。
- 縱深防禦:分層採用多種獨立的安全控管機制。一項控制措施失效不會導致整個系統遭到入侵。舉例來說,您可以使用網路政策隔離資料庫,即使資料庫本身需要驗證也沒問題。
- 可執行的資料:根據資料做出安全決策。建立威脅模型和風險評估可協助您瞭解安全防護機制。網路政策記錄等功能可提供資料,協助您驗證政策及偵測潛在違規行為。
選擇網路安全政策
如要選擇合適的政策,請找出需要控管的流量類型和範圍。
流量類型
如要選擇合適的政策,請考量要管理的流量來源和目的地:
叢集內 Pod 之間的通訊:如要控管微服務之間的通訊方式,請使用以 Pod 標籤和命名空間為運作對象的政策。
- 應用程式開發人員可以使用標準 Kubernetes NetworkPolicy,在應用程式的命名空間中定義輸入和輸出規則。
- 叢集管理員可以使用標準 Kubernetes ClusterNetworkPolicy,在所有命名空間中強制執行必要安全防護措施 (
Admin層級),或建立零信任預設值 (Baseline層級)。這個資源支援執行 GKE 1.36.1-gke.1067000 以上版本的叢集。 - 叢集管理員可以使用專屬的 CiliumClusterwideNetworkPolicy,專門控制叢集範圍的流量。對於新的部署作業,請使用 Kubernetes 原生
ClusterNetworkPolicy,而非這個專有政策。
從 Pod 輸出至外部服務的流量:如要根據網域名稱控管從 Pod 輸出至外部服務的流量,請使用 FQDNNetworkPolicy。如果外部服務的 IP 位址不是靜態,這項政策就非常實用,因為系統會根據 DNS 自動解析及更新允許的 IP 位址。
加密所有服務對服務流量:如要確保服務之間的所有通訊都經過加密和驗證,請使用服務網格。使用 Istio 或 Anthos Cloud Service Mesh 實作相互 TLS (mTLS),自動處理加密作業。
政策評估層級
GKE 會在三個階層評估網路安全政策。
- 管理員層級 (ClusterNetworkPolicy):優先順序最高。使用這個層級強制執行強制性安全授權。這個層級的「拒絕」規則會覆寫所有其他政策。接受規則會允許流量,並停止評估該封包。
- NetworkPolicy 層級:開發人員在這個層級定義應用程式專用的安全性。政策包括標準的
NetworkPolicy、FQDNNetworkPolicy和CiliumClusterwideNetworkPolicy資源。 - 基準層級 (ClusterNetworkPolicy):優先順序最低。使用這個層級設定預設的「預設拒絕」防護措施,開發人員可以在 NetworkPolicy 層級選擇性地覆寫這些措施。
如果任何層級都沒有相符的政策,GKE 預設會採取隱含的「允許所有項目」行為。
政策選項摘要
下表根據您的安全性目標,摘要說明應使用的政策。
| 目標 | 建議政策 |
|---|---|
| 使用標籤和命名空間控管 Pod 之間的流量。 | Kubernetes NetworkPolicy |
| 依網域名稱控管外部服務的出站流量。 | FQDNNetworkPolicy |
| 加密及驗證所有服務對服務的流量。 | Istio 或 Anthos Cloud Service Mesh (適用於 mTLS) |
| 強制執行不可覆寫的必要安全防護機制。 | ClusterNetworkPolicy (管理員層級) |
| 建立開發人員可覆寫的預設「零信任」防護機制。 | ClusterNetworkPolicy (基準層級) |
| 設定專屬的叢集層級政策 (不建議用於新部署作業)。 | CiliumClusterwideNetworkPolicy |
| 稽核及記錄政策允許或拒絕的連線。 | 網路政策記錄 (針對任何政策啟用) |
稽核及排解網路政策問題
導入網路政策後,請確認政策是否如預期運作,並診斷任何連線問題。您可以使用「網路政策記錄」做為主要工具。
啟用網路政策記錄功能後,GKE 會在 Cloud Logging 中,為網路政策允許或拒絕的每項連線產生記錄項目。這些記錄對於執行安全稽核和排解異常行為問題至關重要。查看這些記錄可瞭解規則的具體效果,確認合法流量是否如預期流動,以及未經授權的流量是否遭到封鎖。
與「僅允許」的標準政策不同,ClusterNetworkPolicy 資源支援明確的「拒絕」動作。如果管理政策導致流量下降,記錄會將拒絕歸因於負責封鎖的特定政策。
後續步驟
- 瞭解如何設定 Kubernetes NetworkPolicy。
- 瞭解如何使用 FQDNNetworkPolicy 控制輸出流量。
- 瞭解如何使用 ClusterNetworkPolicy 實施叢集範圍的安全防護措施。
- 瞭解如何為叢集範圍規則設定 CiliumClusterwideNetworkPolicy。
- 瞭解如何啟用網路政策記錄,稽核政策。