使用 Kubernetes 稽核記錄

本文說明如何在裸機上使用 Google Distributed Cloud (僅限軟體) 的 Cloud 稽核記錄。Google Distributed Cloud 使用 Kubernetes 稽核記錄,依時間順序記錄對叢集 Kubernetes API 伺服器發出的呼叫。稽核記錄適合用於調查可疑的 API 要求,以及收集統計資料。如要瞭解 GKE On-Prem API 的稽核記錄,請參閱「Cloud API 稽核記錄」。

關於 Cloud 稽核記錄

稽核記錄會寫入Cloud 稽核記錄的Google Cloud 專案中。相較於寫入磁碟或在內部部署記錄系統中擷取記錄,寫入 Cloud 稽核記錄有以下幾項優點:

  • 您可以集中管理所有 GKE 叢集的稽核記錄。
  • 寫入 Cloud 稽核記錄的記錄項目無法變更。
  • Cloud 稽核記錄項目會保留 400 天。
  • Google Distributed Cloud 軟體專屬版價格已包含 Cloud Audit Logs 功能。
  • 您可以將 Google Distributed Cloud 設定為將記錄寫入磁碟或 Cloud 稽核記錄。

以磁碟為基礎的稽核記錄

如果明確停用 Cloud 稽核記錄,稽核記錄會寫入永久磁碟,因此叢集重新啟動和升級不會導致記錄消失。Google Distributed Cloud 軟體最多只會保留 1 GiB 的稽核記錄項目。

登入控制層節點,即可存取磁碟型稽核記錄。記錄檔位於 /var/log/apiserver/ 目錄中。

Cloud 稽核記錄

所有 Kubernetes API 伺服器的管理員活動稽核記錄項目,都會傳送至Google Cloud,並使用您建立使用者叢集時指定的專案和位置。為將記錄項目緩衝處理並寫入 Cloud 稽核記錄,Google Distributed Cloud 會部署 audit-proxy 精靈集,在控制層節點上執行。

限制

在裸機上,Cloud 稽核記錄有下列限制:

  • 不支援資料存取記錄。
  • 不支援修改 Kubernetes 稽核政策。
  • Cloud 稽核記錄無法在長時間網路中斷期間正常運作。如果無法將記錄檔項目匯出至 Google Cloud,系統會將這些項目快取到 10 GiB 的磁碟緩衝區。如果緩衝區已滿,系統會捨棄最舊的項目。
    • 一個專案最多可支援約 1000 個服務帳戶,用於 Cloud 稽核記錄。多個叢集可使用同一個服務帳戶。

為 Cloud 稽核記錄建立服務帳戶

如要搭配 Google Distributed Cloud 軟體使用 Cloud Logging 和 Cloud Monitoring,請先設定下列項目:

  1. 如果沒有,請在 Google Cloud 專案中建立 Cloud Monitoring 工作區。

    在 Google Cloud 控制台中,按一下下列按鈕,然後按照工作流程操作。

    前往「Monitoring」頁面

  2. 點選下列按鈕,啟用必要的 API:

    啟用 Anthos Audit API

    啟用 Stackdriver API

    啟用 Monitoring API

    啟用 Logging API

  3. 將下列 IAM 角色指派給 Stackdriver 代理程式使用的服務帳戶:

    • logging.logWriter
    • monitoring.metricWriter
    • stackdriver.resourceMetadata.writer
    • monitoring.dashboardEditor

存取 Cloud 稽核記錄

控制台

  1. 前往 Google Cloud 控制台的「Logging」選單,然後點選「Logs Explorer」頁面。

    前往記錄檔探索工具

    如果開啟「舊版記錄檢視器」頁面,請從「升級」下拉式選單中選擇「升級至新的記錄檔探索工具」

  2. 按一下「查詢」,即可存取提交查詢的欄位。

  3. 在欄位中填入下列查詢:

    resource.type="k8s_cluster"
    logName="projects/PROJECT_ID/logs/externalaudit.googleapis.com%2Factivity"
    protoPayload.serviceName="anthosgke.googleapis.com"
    

    PROJECT_ID 替換為您的專案 ID。

  4. 按一下「執行查詢」,即可顯示已設定登入這個專案的叢集中的所有稽核記錄。

gcloud

列出專案管理員活動記錄中,對應到 k8s_cluster 資源類型的前兩個記錄項目:

gcloud logging read \
    'logName="projects/PROJECT_ID/logs/externalaudit.googleapis.com%2Factivity" \
    AND resource.type="k8s_cluster" \
    AND protoPayload.serviceName="anthosgke.googleapis.com" ' \
    --limit 2 \
    --freshness 300d

PROJECT_ID 替換為您的專案 ID。

輸出會顯示兩個記錄項目。請注意,每個記錄項目的 logName 欄位都有 projects/PROJECT_ID/logs/externalaudit.googleapis.com%2Factivity 值,且 protoPayload.serviceName 等於 anthosgke.googleapis.com

稽核政策

Kubernetes 稽核政策會定義事件記錄為記錄項目時應遵循的規則,並指定應該納入記錄項目之中的資料。系統不支援變更這項政策,藉此修改 Cloud Audit Logs 行為。