執行期安全 - Amazon EKS

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

執行期安全

執行期安全性可在容器執行時為您的容器提供主動保護。其目的是偵測和/或防止惡意活動在容器內發生。這可以透過與 Kubernetes 整合的 Linux 核心或核心延伸中的多種機制來實現,例如 Linux 功能、安全運算 (seccomp)、AppArmor 或 SELinux。還有 Amazon GuardDuty 和第三方工具等選項,可協助建立基準和偵測異常活動,並減少 Linux 核心機制的手動組態。

重要

Kubernetes 目前不提供將 seccomp、AppArmor 或 SELinux 設定檔載入節點的任何原生機制。它們必須在啟動時手動載入或安裝在節點上。這必須在 Pod 中參考它們之前完成,因為排程器不知道哪些節點具有設定檔。請參閱以下 Security Profiles Operator 等工具如何協助自動化將設定檔佈建至節點。

安全內容和內建的 Kubernetes 控制項

許多 Linux 執行期安全機制都與 Kubernetes 緊密整合,並且可以透過 Kubernetes 安全內容進行設定。其中一個這類選項是 privileged旗標,false預設為 ,如果啟用,基本上等同於主機上的根。在生產工作負載中啟用特權模式幾乎一律不適當,但有更多控制項可以視需要為容器提供更精細的權限。

Linux 功能

Linux 功能可讓您將特定功能授予 Pod 或容器,而無需提供根使用者的所有功能。範例包括 CAP_NET_ADMIN,其允許設定網路介面或防火牆,或 CAP_SYS_TIME,其允許操作系統時鐘。

Seccomp

透過安全運算 (seccomp),您可以防止容器化應用程式對基礎主機作業系統的核心進行特定 syscall。雖然 Linux 作業系統有數百個系統呼叫,但 lion 的共用並不需要執行容器。透過限制容器可以進行的 syscall,您可以有效地減少應用程式的攻擊面。

Seccomp 的運作方式是攔截 syscall,並且只允許已列入允許清單的 傳遞。Docker 具有預設的 seccomp 設定檔,適用於大多數一般用途工作負載,而容器化等其他容器執行時間則提供相當的預設值。您可以將下列內容新增至 Pod 規格的 securityContext區段,將容器或 Pod 設定為使用容器執行期的預設 seccomp 設定檔:

securityContext: seccompProfile: type: RuntimeDefault

自 1.22 起 (以 Alpha 表示,自 1.27 起穩定),上述RuntimeDefault可用於使用單一 kubelet 旗標 的節點上的所有 Pod--seccomp-default。然後,只有在 中指定的設定檔securityContext才需要其他設定檔。

您也可以為需要額外權限的物件建立自己的設定檔。手動執行此操作可能會非常繁瑣,但有 Inspektor Gadget (在網路安全區段中也建議用於產生網路政策) 和 Security Profiles Operator 等工具支援使用 eBPF 或 日誌等工具,將基準權限要求記錄為 seccomp 設定檔。Security Profiles Operator 進一步允許自動化將錄製的設定檔部署到節點,以供 Pod 和容器使用。

AppArmor 和 SELinux

AppArmor 和 SELinux 稱為強制性存取控制或 MAC 系統。其概念類似於 seccomp,但具有不同的 APIs和功能,允許對 特定檔案系統路徑或網路連接埠進行存取控制。這些工具的支援取決於 Linux 發行版本,Debian/Ubuntu 支援 AppArmor 和 RHEL/CentOS/Bottlerocket/Amazon Linux 2023 支援 SELinux。另請參閱基礎設施安全章節,以進一步討論 SELinux。

AppArmor 和 SELinux 都與 Kubernetes 整合,但截至 Kubernetes 1.28 AppArmor 設定檔必須透過註釋指定,而 SELinux 標籤可以透過安全內容上的 SELinuxOptions 欄位直接設定。

如同 seccomp 描述檔,上述安全描述檔運算子可協助將描述檔部署到叢集中的節點。(未來,專案也旨在產生 AppArmor 和 SELinux 的設定檔,如同 seccomp 一樣。)

建議

使用 Amazon GuardDuty 來監控執行時間並偵測對 EKS 環境的威脅

如果您目前沒有持續監控 EKS 執行時間和分析 EKS 稽核日誌,以及掃描惡意軟體和其他可疑活動的解決方案,Amazon 強烈建議希望以簡單、快速、安全、可擴展且經濟實惠的一鍵式方式保護其 AWS 環境的客戶使用 Amazon GuardDuty。Amazon GuardDuty 是一種安全監控服務,可分析和處理基礎資料來源,例如 AWS CloudTrail 管理事件、AWS CloudTrail 事件日誌、VPC 流程日誌 (來自 Amazon EC2 執行個體)、Kubernetes 稽核日誌和 DNS 日誌。它還包括 EKS 執行期監控。它使用持續更新的威脅情報摘要,例如惡意 IP 地址和網域的清單,以及機器學習,來識別 AWS 環境中非預期、可能未經授權的惡意活動。這可能包括權限提升、使用公開的登入資料,或與惡意 IP 地址、網域的通訊、Amazon EC2 執行個體和 EKS 容器工作負載上存在惡意軟體,或探索可疑 API 活動等問題。GuardDuty 透過產生您可以在 GuardDuty 主控台或透過 Amazon EventBridge 檢視的安全性調查結果,通知您 AWS 環境的狀態。GuardDuty 也支援您將問題清單匯出至 Amazon Simple Storage Service (S3) 儲存貯體,並與 AWS Security Hub 和 Detective 等其他服務整合。

觀看此 AWS Online Tech Talk「使用 Amazon GuardDuty 增強 Amazon EKS 的威脅偵測 - AWS Online Tech Talks」,了解如何在幾分鐘內step-by-step啟用這些額外的 EKS 安全功能。

選用:使用第三方解決方案進行執行期監控

如果您不熟悉 Linux 安全性,建立和管理 seccomp 和 Apparmor 設定檔可能會很困難。如果您沒有時間熟練,請考慮使用第三方商業解決方案。其中許多都已超越靜態設定檔,例如 Apparmor 和 seccomp,並已開始使用機器學習來封鎖或提醒可疑活動。您可以在以下工具區段中找到其中一些解決方案。您可以在 AWS Marketplace for Containers 中找到其他選項。

在撰寫 seccomp 政策之前,請考慮新增/捨棄 Linux 功能

功能涉及 syscall 可存取的核心函數中的各種檢查。如果檢查失敗,syscall 通常會傳回錯誤。檢查可以在特定 syscall 開始時完成,或在可透過多個不同 syscall 連線的區域中更深入的核心 (例如寫入特定特權檔案)。另一方面,Seccomp 是一種 syscall 篩選條件,在執行之前會套用至所有 syscall。程序可以設定篩選條件,允許他們撤銷執行特定 syscall 的權利,或特定 syscall 的特定引數。

使用 seccomp 之前,請考慮新增/移除 Linux 功能是否提供您所需的控制。如需詳細資訊,請參閱設定 容器的功能

了解您是否可以使用 Pod 安全政策 (PSPs) 達成目標

Pod 安全政策提供許多不同的方式來改善您的安全狀態,而不會帶來過度的複雜性。探索 PSPs中可用的選項,然後再進入建置 seccomp 和 Apparmor 設定檔。

警告

從 Kubernetes 1.25 開始,已移除 PSPs並以 Pod 安全許可控制器取代 PSP。存在的第三方替代方案包括 OPA/Gatekeeper 和 Kyverno。用於實作 PSPs 中常見政策的 Gatekeeper 限制和限制範本集合,可以從 GitHub 上的 Gatekeeper 程式庫儲存庫中提取。您可以在 Kyverno 政策程式庫中找到許多 PSPs 的替換,包括完整的 Pod 安全標準集合。

工具與資源