關於 Kubernetes 安全防護機制掃描

本文說明如何使用 Kubernetes 資安態勢掃描,找出並降低 GKE 中的安全性風險。本文假設您已瞭解下列事項:

Kubernetes 資安態勢篩檢是資安態勢資訊主頁的一項功能,可協助您主動找出並解決 Google Kubernetes Engine (GKE) 叢集中的安全漏洞。Kubernetes 資安態勢掃描提供下列功能:

本文適用於監控叢集安全問題的資安專家。如要進一步瞭解我們在 內容Google Cloud 中提及的常見角色和範例工作,請參閱「 常見的 GKE 使用者角色和工作」。

如要瞭解如何啟用及使用 Kubernetes 安全防護機制掃描功能,請參閱「自動稽核工作負載的設定問題」。

定價

在 GKE 中使用這項功能無須額外付費。

新增至 Cloud Logging 的項目須遵守 Cloud Logging 定價。

關於工作負載設定稽核

在 GKE 部署的工作負載應採用強化設定,限制攻擊面。手動檢查叢集中的工作負載,找出設定問題,可能難以大規模進行。您可以使用資安態勢資訊主頁,自動稽核多個叢集中所有執行中工作負載的設定,並傳回可做為行動依據的評分結果和具體建議,協助您提升資安態勢。

工作負載設定稽核會根據Pod 安全性標準中的部分政策,檢查每個已部署的工作負載。工作負載設定稽核會在 Google 基礎架構上進行,不會使用節點上的運算資源。

工作負載設定稽核的優點

  • 自動偵測所有工作負載中已知的設定問題。
  • 取得可行的建議,強化資安態勢。
  • 使用 Google Cloud 控制台,概略瞭解設定問題。
  • 使用記錄功能取得可稽核的疑慮追蹤記錄,以便改善報表和可觀測性。

工作負載設定稽核的運作方式

針對每個符合條件的已部署工作負載,GKE 會持續掃描工作負載的規格,並將欄位和值與基礎安全性政策中定義的控制項進行比較。例如,含有 spec.containers.securityContext.privileged=true 的 Pod 違反基準 Pod 安全性標準,而 spec.securityContext.runAsNonRoot 欄位設為 false 的 Pod 則違反受限制標準。如要查看 GKE 檢查的安全性政策清單,請參閱「工作負載設定稽核會檢查哪些項目?」一節。

掃描並發現問題後,GKE 會根據內建的安全強化措施,評估設定問題的嚴重程度。GKE 會指派嚴重程度評分,協助您判斷回應問題的速度。Google Cloud 控制台會顯示結果和建議採取的應變措施建議。GKE 也會將項目新增至 Cloud Logging,以供追蹤和稽核。

工作負載設定稽核會檢查哪些項目?

疑慮 欄位 接受的值 嚴重性

主機命名空間

共用主機命名空間的 Pod 可讓 Pod 處理程序與主機處理程序相互通訊,並收集主機資訊,因此可能會導致容器跳脫。

  • spec.hostNetwork
  • spec.hostIPC
  • spec.hostPID
  • 未定義或空值
  • false
高

特殊權限容器

特殊權限容器具備近乎毫無限制的主機存取權。這類容器會與主機共用命名空間,而且沒有控管群組、seccomp、AppArmor 和功能限制。

  • spec.containers[*].securityContext.privileged
  • spec.initContainers[*].securityContext.privileged
  • spec.ephemeralContainers[*].securityContext.privileged
  • 未定義或空值
  • false
高

主機通訊埠存取權

將主機通訊埠公開給容器,可能會讓容器攔截使用該通訊埠的主機服務網路流量,或是略過 NetworkPolicy 等項目的網路存取控管規則。

  • spec.containers[*].ports[*].hostPort
  • spec.initContainers[*].ports[*].hostPort
  • spec.ephemeralContainers[*].ports[*].hostPort
  • 未定義或空值
  • 0
高

非預設功能

指派給容器的功能可能會導致容器跳脫。

  • spec.containers[*].securityContext.capabilities.add
  • spec.initContainers[*].securityContext.capabilities.add
  • spec.ephemeralContainers[*].securityContext.capabilities.add
  • 未定義或空值
  • AUDIT_WRITE
  • CHOWN
  • DAC_OVERRIDE
  • FOWNER
  • FSETID
  • KILL
  • MKNOD
  • NET_BIND_SERVICE
  • SETFCAP
  • SETGID
  • SETPCAP
  • SETUID
  • SYS_CHROOT
中

掛接主機路徑磁碟區

hostPath 磁碟區會掛接主機中的檔案或目錄。這些磁碟區含有安全性風險,可能導致容器跳脫。

spec.volumes[*].hostPath 未定義或空值 中

非預設 /proc 遮罩

預設的 /proc 掛接類型會遮蓋 /proc 中的某些路徑,以免因路徑曝光導致資訊外洩或容器跳脫。使用非預設的掛接類型會讓這些風險提高。

  • spec.containers[*].securityContext.procMount
  • spec.initContainers[*].securityContext.procMount
  • spec.ephemeralContainers[*].securityContext.procMount
  • 未定義或空值
  • 預設
中

不安全的 sysctl 遮罩

Pod 可設為允許透過 /proc/sys 虛擬檔案系統修改不安全的核心參數。不安全的參數不支援命名空間、未妥善區隔 Pod 之間的影響、可能損害節點的健康狀態,或是可能會讓 Pod 取得超出本身上限的資源。

spec.securityContext.sysctls[*].name
  • 未定義或空值
  • kernel.shm_rmid_forced
  • net.ipv4.ip_local_port_range
  • net.ipv4.ip_unprivileged_port_start
  • net.ipv4.tcp_syncookies
  • net.ipv4.ping_group_range
中

以非根使用者身分執行

如果映像檔中的 runAsUser 或 USER 指令指定了超級使用者,即代表已明確允許容器以超級使用者的身分執行。如果是以超級使用者的身分執行卻缺少預防性安全性控管機制,則會讓容器跳脫的風險提高。

  • spec.securityContext.runAsNonRoot
  • spec.containers[*].securityContext.runAsNonRoot
  • spec.initContainers[*].securityContext.runAsNonRoot
  • spec.ephemeralContainers[*].securityContext.runAsNonRoot
true 中

提權

容器可以明確設為允許在執行時提權。這樣一來,在容器中建立的程序就能執行 set-user-id、set-group-id 或檔案功能執行檔,進而取得執行檔指定的權限。缺少預防性安全性控管機制會導致容器跳脫的風險提高。

  • spec.containers[*].securityContext.allowPrivilegeEscalation
  • spec.initContainers[*].securityContext.allowPrivilegeEscalation
  • spec.ephemeralContainers[*].securityContext.allowPrivilegeEscalation
false 中

不受限的 AppArmor 設定檔

容器可以明確設為不受 AppArmor 限制。 這項設定可確保容器不會套用任何 AppArmor 設定檔,因此不會受到這些設定檔的限制。停用預防性安全性控管機制會提高容器跳脫的風險。

metadata.annotations["container.apparmor.security.beta.kubernetes.io/*"] false 低

此外,GKE 會檢查是否有任何 RBAC RoleBinding 或 ClusterRoleBinding 參照下列任一使用者或群組:

  • system:anonymous
  • system:authenticated
  • system:unauthenticated

如果存在參照這些使用者或群組的 RBAC 繫結,資安態勢資訊主頁會顯示名為「Effectively Anonymous Users Granted GKE Cluster Access」的發現項目,嚴重性為「中」。這些使用者和群組實際上是匿名的,不應在 RoleBindings 或 ClusterRoleBindings 中使用。詳情請參閱「避免預設角色和群組」。

關於安全性公告的顯示方式

在 GKE 中發現安全漏洞時,我們會修補該漏洞,並發布安全性公告。如要瞭解識別、修補程式和時間軸,請參閱「GKE 安全性修補程式」。

資安態勢資訊主頁會顯示影響叢集、工作負載和標準模式節點集區的安全性公告。這項功能是安全態勢資訊主頁的 Kubernetes 資安態勢功能之一,建立 Autopilot 或 Standard 叢集時會自動啟用。如要啟用 Kubernetes 資安態勢掃描功能,請按照「自動稽核工作負載的設定問題」一文中的操作說明操作。

Google Cloud 控制台會顯示詳細資料,例如受影響的叢集、版本,以及建議升級的修補程式版本,以減輕漏洞影響。您只會看到叢集 Google Cloud 區域或可用區中可採取緩解措施的公告。

如要查看已註冊 Kubernetes 資安態勢掃描的叢集公告,請前往資安態勢資訊主頁:

前往「Security Posture」

影響您環境的任何可用安全性公告,都會顯示在「安全性公告」部分。

後續步驟