本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
Security Profiles Operator v0.4.0 的新功能
Security Profiles Operator (SPO) 是一個開箱即用的 Kubernetes 增強功能,旨在使 seccomp、SELinux 和 AppArmor 配置檔案的管理變得更加簡單和方便。我們很高興地宣佈,我們最近 釋出了 v0.4.0 版本 的 Operator,其中包含大量新功能、修復和可用性改進。
新增內容
自從上次 v0.3.0 版本的 Operator 釋出以來,已經有一段時間了。在過去半年中,我們透過 290 次提交添加了新功能,微調了現有功能,並重新編寫了文件。
其中一個亮點是,我們現在能夠使用 Operator 的 日誌豐富器 記錄 seccomp 和 SELinux 配置檔案。這使得我們能夠減少配置檔案記錄所需的依賴項,只需在節點上執行 auditd 或 syslog(作為備用)。Operator 中的所有配置檔案記錄都以相同的方式工作,即使用 ProfileRecording
CRD 及其相應的標籤選擇器。日誌豐富器本身也可以用於收集有關節點 seccomp 和 SELinux 訊息的有意義的見解。請檢視官方文件以瞭解更多資訊。
seccomp 相關改進
除了基於日誌豐富器的記錄之外,我們現在還提供了一種替代方法,透過利用 ebpf 記錄 seccomp 配置檔案。此可選功能可以透過將 enableBpfRecorder
設定為 true
來啟用。這將導致在每個節點上執行一個專用容器,該容器帶有一個自定義 bpf 模組來收集容器的系統呼叫。它甚至支援預設不暴露 BPF 型別格式 (BTF) 的舊核心版本以及 amd64
和 arm64
架構。請檢視我們的文件以檢視其執行情況。順便說一下,我們現在還將記錄器主機的 seccomp 配置檔案架構新增到記錄的配置檔案中。
我們還將 seccomp 配置檔案 API 從 v1alpha1
升級到 v1beta1
。這與我們隨著時間推移穩定 CRD API 的總體目標相一致。唯一改變的是 seccomp 配置檔案型別 Architectures
現在指向 []Arch
而不是 []*Arch
。
SELinux 增強功能
SELinux 策略的管理(類似於您通常在單個伺服器上呼叫的 semodule
)並非由 SPO 本身完成,而是由另一個名為 selinuxd 的容器完成,以提供更好的隔離。此版本切換到使用來自個人儲存庫的 selinuxd 容器,轉而使用位於 我們團隊的 quay.io 儲存庫下的映象。selinuxd 儲存庫也已移至 containers GitHub 組織。
請注意,selinuxd 動態連結到 libsemanage
並從節點掛載 SELinux 目錄,這意味著 selinuxd 容器必須執行與叢集節點相同的發行版。SPO 預設使用基於 CentOS-8 的容器,但我們也構建基於 Fedora 的容器。如果您使用其他發行版並希望我們為其新增支援,請向 selinuxd 提交問題。
配置檔案記錄
此版本增加了對 SELinux 配置檔案記錄的支援。記錄本身透過一個 ProfileRecording
自定義資源例項進行管理,如我們儲存庫中的示例所示。從使用者的角度來看,它與 seccomp 配置檔案記錄的工作方式大致相同。
在底層,為了瞭解工作負載正在做什麼,SPO 在啟動時會安裝一個特殊的許可策略,名為 selinuxrecording,該策略允許所有操作並將所有 AVC 記錄到 audit.log
。這些 AVC 訊息由日誌豐富器元件抓取,當記錄的工作負載退出時,策略就會被建立。
SELinuxProfile
CRD 畢業
引入了 SelinuxProfile
物件的 v1alpha2
版本。這從物件本身移除了原始的通用中間語言 (CIL),而是添加了一種簡單的策略語言,以簡化編寫和解析體驗。
同時,還引入了一個 RawSelinuxProfile
物件。它包含策略的封裝和原始表示。這旨在讓人們能夠儘快使用他們現有的策略。但是,此處會進行驗證。
AppArmor 支援
此版本引入了 AppArmor 的初始支援,允許使用者透過使用新的 AppArmorProfile CRD 將 AppArmor 配置檔案載入和解除安裝到叢集節點中。
要啟用 AppArmor 支援,請使用 SPO 配置的 enableAppArmor 功能門開關。然後使用我們的 apparmor 示例在您的叢集中部署您的第一個配置檔案。
指標
Operator 現在公開了指標,這些指標在我們的新指標文件中進行了詳細描述。我們決定透過使用 kube-rbac-proxy 來保護指標檢索過程,同時我們提供了一個額外的 spo-metrics-client
叢集角色(和繫結)來從叢集內部檢索指標。如果您使用的是 OpenShift,那麼我們提供了一個開箱即用的 ServiceMonitor
來訪問指標。
可除錯性和魯棒性
除了所有這些新功能,我們決定對 Security Profiles Operator 的內部進行部分重構,以使其更易於除錯且更健壯。例如,我們現在維護一個內部 gRPC API,用於在 Operator 內部的不同功能之間進行通訊。我們還提高了日誌豐富器的效能,它現在快取結果以更快地檢索日誌資料。透過將 verbosity
從 0
設定為 1
,可以將 Operator 置於更詳細的日誌模式。
我們還在啟動時列印所使用的 libseccomp
和 libbpf
版本,並透過 enableProfiling
選項為每個容器公開 CPU 和記憶體分析端點。Operator 守護程式內部的專用活性和啟動探測器現在將進一步改善 Operator 的生命週期。
結論
感謝您閱讀此更新。我們期待 Operator 未來的增強,並希望收到您對最新版本的反饋。歡迎透過 Kubernetes Slack #security-profiles-operator 聯絡我們,提供任何反饋或問題。