七、雲原生日誌審計

語言: CN / TW / HK

網路安全的審計是指按照一定的安全策略,利用記錄、系統活動和使用者活動等資訊,檢查、審查和檢驗操作事件的環境及活動,從而發現系統漏洞、入侵行為或改善系統性能的過程。

作為安全審計的重要資料來源,日誌展現的是系統和應用執行產生的事件或者程式在執行的過程中產生的一些記錄,可以詳細解釋系統的執行狀態。日誌描述了一些離散的、不連續的事件,對於應用程式的可見性是很好的資訊來源,日誌同樣也為應用程式分析提供了精確的資料來源。

對於雲原生架構下的日誌審計與分析,其面臨的挑戰主要包括兩個層面,一方面是日誌審計本身面臨的挑戰。

  1. 日誌儲存分散。企業 IT 系統中的各種網路裝置、安全裝置、應用系統等分散在網路的不同位置,安全審計人員須通過不同的方式,檢視裝置/應用產生的日誌、裝置/應用的狀態。

  2. 日誌資料量大。企業 IT 系統中的各種網路裝置、安全裝置、應用系統等每天會產生大量的日誌,安全審計人員很難通過人工的手段進行集中儲存管理以及有效分析。

  3. 日誌格式不統一。企業 IT 系統中的各種網路裝置、安全裝置、應用系統等不同的裝置型別產生的日誌格式都不相同,安全審計人員須瞭解每種裝置/應用日誌的格式才有可能分析日誌,日誌分析成本很大。

另一方面,針對雲原生環境以及雲原生應用的特性,其平臺、網路以及應用在架構和行為上較傳統 IT 系統都有著更大的複雜性。因此,相比較傳統的日誌審計,雲原生架構下的日誌審計面臨的挑戰將會更大。

Docker 日誌審計

Docker 支援多種日誌記錄機制,用以幫助使用者從正在執行的容器和服務中獲取資訊,這種機制被稱為日誌驅動程式。Docker 從 1.6 版本開始支援日誌驅動,使用者可以將日誌直接從容器輸出到如 syslogd 這樣的日誌系統中。每個 Docker 守護程序都有一個預設的日誌驅動程式,通常這個預設的日誌驅動是 json-file,也就是以 JSON 檔案的形式儲存日誌資訊。同時 Docker 還支援其他日誌驅動,比如 none、syslog、gelf 和 fluentd 等。

Kubernetes 日誌審計

另外,對於單個節點上的日誌記錄,還需要重點考慮日誌的輪轉(rotation)問題,保證日誌記錄不會消耗掉節點上的全部可用空間。Kubernetes 本身並不負責輪轉日誌,而是通過部署相關的日誌工具來解決這個問題。

叢集級的日誌架構需要一個獨立的後端,用來儲存、分析和查詢日誌。Kubernetes 當前並不為日誌資料提供原生的儲存解決方案,不過,有很多現成的日誌方案可以整合到 Kubernetes 中。Kubernetes 針對 Pod 提供了基本的日誌記錄,我們使用 kubectl logs 即可通過標準輸出列印相關的日誌記錄。

Kubernetes 系統元件的日誌同樣需要有一定的方案來記錄和儲存。系統元件日誌主要記錄了叢集中發生的事件,這對於除錯以及安全審計有著重要的作用。系統元件日誌可以根據需要配置日誌的粒度,靈活調整日誌記錄的細節程度。日誌可以是隻粗粒度地顯示元件內的錯誤,也可以是更加細粒度的,如記錄事件的每一個追蹤步驟(HTTP 訪問日誌、Pod 狀態更新、控制器操作、排程器決策等)。

Kubernetes 預設使用的日誌庫是 klog,它專門用來做日誌初始化的相關操作,klog 是 glog 的 fork 版本。當前,支援 Kubernetes 的日誌管理工具種類也比較多,如 Zebrium、ElasticStack、CloudWatch、Fluentd 等,這些日誌管理工具都有著一個共同的目標,那就是可以儘可能高效、快速地進行日誌監控、記錄以及分析處理。

日誌實現了對系統和應用行為的記錄,對雲原生可觀測性的實現起到了重要的作用。我們可以通過日誌系統獲取系統以及應用的詳細操作資料,是雲原生可觀測性重要的資料來源。