在 GKE 節點上啟用 Linux 稽核記錄


本頁說明如何在執行 Container-Optimized OS 的 Google Kubernetes Engine 節點上,啟用詳細的作業系統稽核記錄。本頁面也會說明如何設定 fluent-bit 記錄代理程式,將記錄檔傳送至 Cloud Logging。啟用詳細記錄檔可提供叢集和工作負載狀態方面的重要資訊,例如錯誤訊息、登入嘗試次數和二進位執行檔執行次數。這些資訊可以協助進行除錯或調查安全性事件。

GKE Autopilot 叢集不支援啟用 Linux auditd 記錄,因為節點和基礎虛擬機器 (VM) 由 Google 管理。

本頁面適用於負責審查及分析安全性記錄的安全性專家。請參考這項資訊,瞭解詳細 OS 記錄的規定與限制,並在 GKE 節點上啟用這些記錄時,做為導入作業的指南。如要進一步瞭解 Google Cloud 內容中提及的常見角色和範例工作,請參閱常見的 GKE Enterprise 使用者角色和工作

閱讀本頁內容前,請先熟悉 Linux 作業系統稽核記錄

作業系統稽核記錄不同於 Cloud 稽核記錄Kubernetes 稽核記錄

總覽

如要從叢集中的每個節點收集記錄檔,請使用 DaemonSet,在 DaemonSet 符合排程資格的每個叢集節點上,DaemonSet 只會執行一個 Pod。這個 Pod 會在主機上設定 auditd 記錄 Daemon,並將記錄代理程式設為傳送記錄檔至 Logging 或任何其他記錄檔擷取服務。

根據定義,稽核作業會在事件發生後進行,且屬於回溯安全措施。單獨使用 auditd 記錄檔可能不足以在叢集上進行鑑識作業。請多加考慮如何善用 auditd 記錄功能,當做整體安全性策略的環節之一。

限制

本頁面所介紹的記錄機制,僅適用於 GKE Standard 叢集中執行 Container-Optimized OS 的節點。

記錄 DaemonSet 的運作方式

本節會說明記錄 DaemonSet 範例運作方式,以便您依照自己的需求進行設定。下一節會說明如何部署 DaemonSet。

資訊清單範例定義了各一個 DaemonSet、ConfigMap 和包含上述兩者的命名空間。

DaemonSet 會將 Pod 部署到群集中的每個節點。Pod 包含兩個容器。第一個是啟動 cloud-audit-setup systemd 服務的初始容器,適用於 Container-Optimized OS 節點。第二個容器 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。提供的範例會將稽核記錄傳送到 Logging,但您可以將其設為將記錄檔傳送到其他目的地。

auditd 產生的記錄檔可能非常龐大,因而耗用系統資源並傳送超出預設記錄設定的記錄檔,導致產生額外費用。您可以設定篩選器來管理記錄量:

部署記錄 DaemonSet

  1. 您可以使用現有叢集或建立新叢集。

  2. 下載資訊清單範例:

    curl https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-node-tools/master/os-audit/cos-auditd-logging.yaml > cos-auditd-logging.yaml
    
  3. 依照您的需求,編輯資訊清單範例。如要進一步瞭解 DaemonSet 的運作方式,請參閱上一節。請注意,本範例資訊清單中使用的 fluent-bit 圖片僅供示範之用。最佳做法是將圖片換成來自受控來源的圖片,並提供 SHA-256 摘要。

  4. 初始化通用變數:

    export CLUSTER_NAME=CLUSTER_NAME
    export CLUSTER_LOCATION=COMPUTE_REGION
    

    更改下列內容:

    • CLUSTER_NAME:叢集名稱。
    • COMPUTE_REGION:叢集的 Compute Engine區域。如果是區域叢集,請改用區域。
  5. 部署記錄命名空間、DaemonSet 和 ConfigMap:

    envsubst '$CLUSTER_NAME,$CLUSTER_LOCATION' < cos-auditd-logging.yaml \
    | kubectl apply -f -
    
  6. 確認記錄 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,在這種情況下,叢集具有三個節點。

  7. 現在可以在 Logging 中存取稽核記錄了。在「記錄檔探索工具」中,使用下列查詢篩選結果:

    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 並重新啟動節點。稽核設定一旦啟用就會受到鎖定,只能透過重新建立節點來變更。

  1. 刪除叢集中的 DaemonSet、ConfigMap 及其命名空間:

    kubectl delete -f cos-auditd-logging.yaml
    
  2. 重新啟動叢集的節點。首先,請取得叢集所屬的執行個體群組:

    instance_group=$(gcloud compute instance-groups managed list \
                        --format="value(name)" \
                        --filter=${CLUSTER_NAME})
    

    然後會自行取得執行個體:

    instances=$(gcloud compute instance-groups managed list-instances ${instance_group} \
                   --format="csv(instance)[no-heading][terminator=',']")
    

    最後請重新建立執行個體:

    gcloud compute instance-groups managed recreate-instances ${instance_group} \
       --instances=${instances}
    

後續步驟