Kubernetes 安全攻防實戰與防禦策略

引言

Kubernetes 作為雲原生架構的核心元件,其安全性直接影響系統整體穩定性與資料安全。近年來,隨著容器化技術普及,針對 Kubernetes 的攻擊手法不斷演進,從服務帳號令牌濫用到准入控制繞過,皆可能導致權限提升與資料洩漏。本文深入解析 Kubernetes 安全控制機制,並透過實際攻擊路徑演示與防禦策略,協助讀者建立完整的安全防護架構。

主要內容

技術定義與核心概念

Kubernetes 安全性主要依賴三大層級控制:

  1. 認證(Authentication):驗證使用者身份,常見方式包括 OIDC、服務帳號令牌與客戶端證書。
  2. 授權(Authorization):根據角色(RBAC)或節點驗證限制操作範圍,例如 kubectl auth can-i 命令可檢查權限。
  3. 准入控制(Admission Control):在資源創建前執行策略檢查,如 Pod Security Admission(PSA)可阻斷危險操作(如 hostPath 卷使用)。

關鍵特性與功能

  • 多層次安全控制:透過認證、授權與准入控制的組合,形成防禦鏈。
  • 靈活策略配置:支援自訂准入控制器(如 Kyverno、OPA)與命名空間標籤管理。
  • 攻擊路徑防禦:針對服務帳號令牌濫用、權限提升與流量劫持等常見攻擊手法,提供具體防禦措施。

實際應用案例

環境設置與資源部署

  • 使用 Kind 建立測試集群:kind create cluster 需搭配 Docker 環境,若遇 Docker Hub 速率限制,可改用 Ixie Muis Labs 等備用鏡像倉庫。
  • 部署教學資源:透過 kubectl apply -f manifests/ 安裝所有資源,並透過手機熱點解決網路限制。

攻擊路徑演示

開發者嘗試部署日誌讀取應用時,因使用 hostPath 卷觸發 PSA 策略導致部署失敗。此為 Kubernetes 防止容器逃逸的典型機制,但攻擊者可透過以下方式繞過:

  1. 服務帳號令牌濫用:提取 arbback-manager 服務帳號令牌,解碼 JWT 獲取權限。
  2. 權限提升:建立 ns-admin Role 並綁定至開發者帳號,取得命名空間管理權限。
  3. 標籤操作:刪除 dev 命名空間的 pod-security.kubernetes.io/enforce 標籤,解除 PSA 限制。

防禦與解決方案

  • 調整安全策略:修改 PSA 設定或使用 kubectl apply -f 更新策略。
  • 替代方案:採用雲端供應商預設安全策略,或配置自訂准入控制器。
  • 憑證管理:避免使用 system:masters 群組憑證,定期審查集群憑證。

技術優勢與挑戰

優勢

  • 多層次安全控制提供強大防禦能力。
  • 支援自訂策略與第三方控制器,靈活性高。
  • 透過命名空間隔離與網絡策略,有效限制攻擊範圍。

挑戰

  • 配置複雜度高,需深入理解 RBAC、准入控制與網絡策略。
  • 未修補的 CVE 漏洞(如 CVE-2022-8554)可能導致流量劫持風險。
  • 服務帳號令牌與 Secrets 管理若未妥善控制,可能成為攻擊入口。

總結

Kubernetes 安全性核心在於認證、授權與准入控制的組合應用。開發者需遵循最小權限原則,避免授予不必要的 RBAC 權限,並透過命名空間隔離與網絡策略限制攻擊範圍。同時,應定期審查安全策略,禁用非必要功能(如 externalIPs 服務),並利用 CNCF 相關工具(如 Kyverno、OPA)強化防禦。透過實際案例與技術細節的深入分析,可有效降低 Kubernetes 集群的攻擊風險。