注意:

在 Oracle Container Engine for Kubernetes 上安裝 Tetragon 並設定 TracingPolicies

簡介

由於 eBPF 型工具對雲端原生應用程式而言更為普及,此教學課程描述如何在 Oracle Cloud Infrastructure (OCI) 上執行 Tetragon (一種用於安全性觀察和強制執行的 eBPF 工具)。

作業系統核心通常是觀察和影響系統的最佳位置,因為執行功能的工具與嘗試觀察和影響活動之間的障礙極少。在核心空間內執行通常可以讓程式擁有非常低的負荷,但代價是安全與維護的代價。

eBPF 提供導入的新功能的方法,無需變更核心原始碼或載入核心模組,即可在封閉測試環境與授權環境中執行。它基本上是透過建立與虛擬機器程式設計語言類似的典範。eBPF 程式的位元組程式碼格式與現代 Java 程式是如何編譯成使用 JIT 編譯器編譯至原生程式碼的位元組程式碼,而 JVM (Java Virtual Machine) 則採用位元組程式碼表示。BPF 與 Linux 核心深度連結,核心 JIT 編譯器會將 eBPF 位元組程式碼編譯為可在核心空間中執行的原始程式碼。

eBPF 使用以事件為基礎的模型來載入程式,而 eBPF 程式會寫入「鉤點」至網路事件、系統呼叫等等。在呼叫 eBPF 程式的事件後,eBPF 程式會在驗證與 JIT 編譯後載入核心中。驗證步驟可確保程式安全執行、具備正確權限以及可執行完成,而 JIT 編譯可確保原生效能。在許多情況下,eBPF 程式會以較高層次的語言撰寫,並編譯為位元組程式碼表示。然後在 JIT 編譯之後,依據程式實際連接到的事件,將這些程式載入執行中的核心。

Tetragon - 基於 eBPF 的安全性觀察與執行

Tetragon 是一種基於雲端原生的 eBPF 工具,可執行安全性觀察並實施。它是鈣項目的一部分。使用 eBPF,Tetragon 可篩選與觀察事件並在即時套用原則,而不需將事件傳送給核心外部執行的代理程式。Tetragon 可以透過篩選用於開啟網路連線、存取檔案或甚至在容器內啟動程序等事件的多個安全與可觀察使用案例。例如,在應用程式容器內啟動的 Shell 處理作業可能會被視為安全事件。有可能是有人嘗試排解問題,或可能是某個惡意活動,這可能是該活動應觸發安全檢查,以排除系統上的攻擊。也可以說是有關正在開啟的網路連線或讀取的檔案。Tetragon 可以追蹤和篩選這些活動,同時幾乎沒有負荷,而且通常是在軟體中可以偵測到這些事件的最早階段。

Tetragon 最適合用於 Kubernetes 工作負載,並在叢集上的每個節點以 daemonset 形式執行。接著,Tetragon 可以從 Kubernetes API 伺服器提取描述資料,然後將該描述資料與每個節點核心內觀察到的事件建立關聯。Tetragon 透過 TracingPolicies 輕鬆為這些活動設定即時篩選。TracingPolicy 是由 Tetragon 建立的自訂資源,讓管理員與 DevSecOps 將核心事件的篩選器建立並部署為 Kubernetes 資源。TracingPolicy 可以比對系統呼叫、程序屬性和引數,並在相符項目上觸發動作。

目標

必要條件

Oracle Linux 的先決條件

OKE 使用 Oracle Linux,Tetragon 需要在核心中擁有 BTF (BPF 類型格式) 支援。最近的 Oracle Linux 核心包括此立即可用,因此使用者應使用 5.4.17-2136.305.3.el7uek 或更新版本的核心。Tetragon 也無法提供 Arm (linux/arm64) 架構的支援,而寫入時則僅提供 x86 (linux/amd64) 支援。如果您 OKE 叢集中有臂節點,常駐程式集將會保持在 Init:CrashLoopBackOff 狀態。

注意:最新版本的 OKE 節點影像是以包含 BTF 支援的核心為基礎。此 BTF 支援的 caveat 只適用於尚未在一段時間內更新節點作業系統,而不是新建立的叢集。如果您不確定,檢查是否有 BTF 支援的最佳方式是將 SSH 連線至節點並執行 ls /sys/kernel/btf,您應該看到核心 (vmlinux) 以及此處所列的模組。一般請注意,此部署偏好使用 Oracle Linux 8 型節點。

若要檢查節點執行的核心版本,請在節點上執行 uname -a。如果您執行的是舊版的核心,則可以升級節點集區組態上的版本。不過,這只會影響新建立的節點與現有節點不會自動升級,以確保工作負載在其上執行的連續性。您可以按照節點集區升級程序,將現有的節點更新為較新的核心版本。

JSON 輸出的事件串流是詳細資訊且難以理解,但它是相當密集的資訊。有數種方式可擷取此 JSON 資料及從其中衍生分析資訊。最明顯的就是使用 tetragon CLI 工具。Isovalent,Cilium 和 Tetragon 公司也提供功能齊全的商業產品,能夠分析和視覺化這些資料,使其更容易採取行動。

作業 1:安裝 tetra CLI

作業 2:將 TracingPolicies 設定為 FileAccess 與網路可觀察性

TracingPolicies 是可輕鬆設定核心事件即時篩選的自訂資源。TracingPolicy 會比對並篩選系統呼叫以提供可觀察性,同時會對這些相符項目觸發動作。Tetragon 提供了一些展示此能力的範例,並可作為設定 TracingPolicies 的起點。

由於這些事件是直接從核心內監督,因此針對追蹤這些呼叫的行為會增加非常少的額外負荷,惡意動作者可能會混淆或遮罩非常少。

此方法的主要底端是您可以採取的動作,例如終止讀取檔案的過程具有反作用,我們知道發生事件的時候 (而不是之前)。但它仍然非常強大,能夠提供低負擔的解決方案來篩選核心層次的事件並建立原則,以協助我們觀察這些事件並採取行動。

疑難排解

錯誤:如果您看到 Tetragon Pod 處於 CrashLoopBackOff 狀態,這可能是因為兩個原因所造成。

可能的原因:如果您的叢集中有以 Arm 為基礎的節點,則最有可能發生此情況。Tetragon 尚未在 Arm 上執行。

疑難排解:

第二種原因可能是您的節點上有舊版的核心,但未包含 BTF 支援。若要確認問題是否確實存在,請按照上述方式取得 Pod 中失敗之容器的容器日誌。如果核心缺少 BTF 支援,可能會看到類似以下的錯誤訊息

aborting. kernel autodiscovery failed: Kernel version BTF search failed kernel is not included in supported list.
Use --btf option to specify BTF path and/or '--kernel' to specify kernel version

這適用於最近或舊版作業系統尚未更新的節點。若要解決此問題,您可以切換至工作者節點的最新 Oracle Linux 8 型 OKE 或平台映像檔。必須使用此選擇更新節點集區組態,以及依照標準節點集區升級處理作業升級的節點。

確認

其他學習資源

探索 docs.oracle.com/learn 的其他實驗室,或者存取更多 Oracle Learning YouTube 頻道上的免費學習內容。此外,請瀏覽 education.oracle.com/learning-explorer 以成為 Oracle Learning 檔案總管。

如需產品文件,請造訪 Oracle Help Center