本頁說明如何在執行 Container-Optimized OS 的 Google Kubernetes Engine 節點上,啟用詳細的作業系統稽核記錄。本頁面也會說明如何設定 fluent-bit Logging 代理程式,將記錄檔傳送至 Cloud Logging。啟用詳細記錄可提供叢集和工作負載狀態的寶貴資訊,例如錯誤訊息、登入嘗試和二進位檔執行作業。這些資訊可以協助進行除錯或調查安全性事件。
GKE Autopilot 叢集不支援啟用 Linux auditd 記錄,因為節點和基礎虛擬機器 (VM) 由 Google 管理。
本頁面適用於負責審查及分析安全性記錄的資安專家。請參考這項資訊,瞭解詳細 OS 記錄的規定與限制,並在 GKE 節點上啟用這些記錄時,做為導入指南。如要進一步瞭解 Google Cloud 內容中提及的常見角色和範例工作,請參閱「常見的 GKE 使用者角色和工作」。
閱讀本頁面前,請確認您已熟悉 Linux 作業系統稽核記錄。
作業系統稽核記錄與 Cloud 稽核記錄和 Kubernetes 稽核記錄不同。
總覽
如要從叢集中的每個節點收集記錄檔,請使用 DaemonSet,在 DaemonSet 符合排程資格的每個叢集節點上,DaemonSet 只會執行一個 Pod。這個 Pod 會在主機上設定 auditd 記錄檔精靈,並設定 Logging 代理程式,將記錄檔傳送至 Logging 或任何其他記錄檔擷取服務。
根據定義,稽核是在事件發生後進行,屬於回溯性安全措施。單獨使用 auditd 記錄可能不足以對叢集進行鑑識。請多加考慮如何善用 auditd 記錄功能,當做整體安全性策略的環節之一。
限制
本頁面所述的記錄機制僅適用於 GKE Standard 叢集中執行 Container-Optimized OS 的節點。
記錄 DaemonSet 的運作方式
本節會說明記錄 DaemonSet 範例運作方式,以便您依照自己的需求進行設定。下一節會說明如何部署 DaemonSet。
資訊清單範例定義了各一個 DaemonSet、ConfigMap 和包含上述兩者的命名空間。
DaemonSet 會將 Pod 部署到群集中的每個節點。Pod 包含兩個容器。第一個是「init」容器,可啟動 Container-Optimized OS 節點上提供的 cloud-audit-setup systemd 服務。第二個容器 cos-auditd-fluent-bit 包含 fluent-bit 的執行個體,這個執行個體已設定為從節點日誌收集 Linux 稽核記錄,並將這些記錄匯出至 Cloud Logging。
記錄 DaemonSet 範例會記錄下列事件:
auditd系統設定異動- AppArmor 權限檢查
execve()、socket()、setsockopt()和mmap()執行作業- 網路連線
- 使用者登入
- SSH 工作階段和所有其他 TTY (包括
kubectl exec -t工作階段)
設定記錄 DaemonSet
您可以使用 ConfigMap cos-auditd-fluent-bit-config 設定記錄 DaemonSet。提供的範例會將稽核記錄傳送至 Cloud Logging,但您可以設定將記錄傳送至其他目的地。
auditd 產生的記錄量可能非常龐大,且會耗用系統資源,並傳送比預設記錄設定更多的記錄,因此可能會產生額外費用。您可以設定篩選器來管理記錄量:
- 您可以在
cos-auditd-fluent-bit-configConfigMap 中設定篩選器,不記錄特定資料。請參閱 fluent-bit 說明文件,瞭解 Grep、Modify、Record Modifier 和其他篩選器。 - 您也可以設定 Logging 來篩選傳入的記錄。詳情請參閱「設定及管理接收器」。
部署記錄 DaemonSet
您可以使用現有叢集或建立新叢集。
下載資訊清單範例:
curl https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-node-tools/master/troubleshooting/os-audit/cos-auditd-logging.yaml > cos-auditd-logging.yaml依照您的需求,編輯資訊清單範例。如要進一步瞭解 DaemonSet 的運作方式,請參閱上一節。請注意,這個範例資訊清單中使用的
fluent-bit映像檔僅供示範之用。最佳做法是將圖片換成來自受控來源的圖片,並提供 SHA-256 摘要。初始化常見變數:
export CLUSTER_NAME=CLUSTER_NAME export CLUSTER_LOCATION=COMPUTE_REGION更改下列內容:
CLUSTER_NAME:叢集名稱。COMPUTE_REGION:叢集的 Compute Engine 區域。如果是區域叢集,請改用區域。
部署記錄命名空間、DaemonSet 和 ConfigMap:
envsubst '$CLUSTER_NAME,$CLUSTER_LOCATION' < cos-auditd-logging.yaml \ | kubectl apply -f -確認記錄 Pod 已啟動。 如果您在資訊清單中定義了其他命名空間,請將 cos-auditd 替換為您使用的命名空間名稱。
kubectl get pods --namespace=cos-auditd如果 Pod 正在運行,輸出結果會如下所示:
NAME READY STATUS RESTARTS AGE cos-auditd-logging-g5sbq 1/1 Running 0 27s cos-auditd-logging-l5p8m 1/1 Running 0 27s cos-auditd-logging-tgwz6 1/1 Running 0 27s叢集中的每個節點上都部署了一個 Pod,在這種情況下,叢集具有三個節點。
現在可以在 Logging 中存取稽核記錄。在Logs Explorer中,使用下列查詢篩選結果:
LOG_ID("linux-auditd") resource.labels.cluster_name = "CLUSTER_NAME" resource.labels.location = "COMPUTE_REGION"或者,您也可以使用 gcloud CLI (請使用
--limit,因為結果集可能非常大):gcloud logging read --limit=100 "LOG_ID("linux-auditd") AND resource.labels.cluster_name = "${CLUSTER_NAME}" AND resource.labels.location = "${CLUSTER_LOCATION}""
匯出記錄
如要瞭解如何將記錄檔轉送至支援的目的地,請參閱「設定及管理接收器」。
停用記錄功能
如要在節點上停用 auditd 記錄,請刪除記錄 DaemonSet,然後部署 cos-auditd-logging-disable DaemonSet,還原每個節點上的 systemd 服務變更。部署這個 DaemonSet 後,除非重新建立節點,否則無法啟用 auditd 記錄功能。
刪除原始記錄 DaemonSet 和相關資源:
kubectl delete daemonset cos-auditd-logging -n cos-auditd kubectl delete configmap fluent-bit-config -n cos-auditd # The namespace will be deleted by the cleanup daemonset's namespace definition套用 cos-auditd-logging-disable 清理 DaemonSet:
kubectl apply -f 'https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-node-tools/master/troubleshooting/os-audit/cos-auditd-logging-disable.yaml'確認
cleanup-auditdPod 在所有節點上執行:kubectl get pods -n cos-auditd -l name=cleanup-auditd -w等待所有 Pod 顯示
Running。清除 Pod 執行完畢後,請執行「部署記錄 DaemonSet」一節中的查詢,確認系統未產生新的
linux-auditd記錄。舉例來說,您可以使用下列 gcloud CLI 指令:gcloud logging read --limit=10 --freshness="5m" \ "LOG_ID(\"linux-auditd\") AND \ resource.labels.cluster_name = \"${CLUSTER_NAME}\" AND \ resource.labels.location = \"${CLUSTER_LOCATION}\""這個指令會檢查過去五分鐘內的記錄。如果清除作業成功,輸出內容會是空白。
同樣地,使用 Cloud Explorer 搭配相同篩選器時,清除時間過後應該不會出現新的記錄項目。
刪除清理 DaemonSet 和命名空間:
kubectl delete -f cleanup-auditd-daemonset.yaml這項指令會刪除 DaemonSet 和
cos-auditd命名空間。
後續步驟
- 觀看 Cloud 鑑識 101,瞭解如何開始使用雲端鑑識。
- 瞭解 Kubernetes 稽核記錄和稽核政策。
- 閱讀 Kubernetes Engine 安全性總覽。
- 瞭解 Cloud 稽核記錄。