關於 Kubernetes 安全防護機制掃描


本頁面說明 Kubernetes 安全性狀態掃描,這是安全性狀態資訊主頁的功能,可協助您主動找出並解決 Google Kubernetes Engine (GKE) 叢集中的安全漏洞。本頁面說明如何稽核工作負載設定,以及顯示安全性公告,以便在 GKE 中找出並降低安全風險。

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

如要啟用及使用 Kubernetes 安全性狀態掃描功能,請參閱「自動稽核工作負載的設定問題」一文。

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

以非根使用者身分執行

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

  • 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 繫結,安全狀態資訊主頁就會顯示名為「已將 GKE 叢集存取權授予確實匿名的使用者」的發現項目,嚴重程度為「中」。這些使用者和群組實際上是匿名,不應在 RoleBinding 或 ClusterRoleBinding 中使用。詳情請參閱「避免預設角色和群組」。

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

如果 GKE 發現安全漏洞,我們會修補該漏洞,並發布相關的安全性公告。如要瞭解識別、修補和時間表,請參閱 GKE 安全性修補

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

Google Cloud 控制台會顯示詳細資料,例如受影響的叢集、版本,以及建議升級的修補程式版本,以緩解安全漏洞。您只會看到叢集 Google Cloud 區域或地帶提供緩解措施的公告。

如要查看已註冊 Kubernetes 安全防護機制掃描的叢集公告,請前往安全防護機制資訊主頁:

前往「安全防護機制」

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

後續步驟