使用 Kubernetes 稽核記錄

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

關於 Cloud 稽核記錄

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

  • 所有叢集的稽核記錄都可以集中管理。
  • 寫入 Cloud 稽核記錄的記錄項目不可變更。
  • Cloud 稽核記錄項目會保留 400 天。
  • Google Distributed Cloud 的價格已包含 Cloud 稽核記錄功能。
  • 您可以設定 Google Distributed Cloud,將記錄寫入磁碟或 Cloud 稽核記錄。

磁碟稽核記錄

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

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

Cloud 稽核記錄

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

限制

Cloud 稽核記錄有下列限制:

  • 不支援資料存取記錄 (get、list、watch 要求)。
  • 不支援修改 Kubernetes 稽核政策。
  • Cloud 稽核記錄無法因應長時間的網路中斷。如果記錄項目無法匯出至 Google Cloud,則會快取至 10 GB 的磁碟緩衝區。如果緩衝區已滿,系統會捨棄最舊的項目。
  • 一項專案最多可支援約 1000 個服務帳戶,用於 Cloud 稽核記錄。多個叢集可以使用同一個服務帳戶。

建立 Cloud 稽核記錄服務帳戶

如要搭配使用 Cloud Logging 和 Cloud Monitoring 與 Distributed Cloud 軟體,請先完成下列設定:

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

    在 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」。

    前往「Logs Explorer」

    如果開啟的是「舊版記錄檢視器」頁面,請從「升級」下拉式選單中,選擇「升級至新的 Logs Explorer」。

  2. 按一下「Query」(查詢) 欄位,輸入查詢。

  3. 在「Query」(查詢) 欄位中輸入下列查詢:

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

    將 PROJECT_ID 替換為專案 ID。

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

gcloud

  1. 列出專案管理員活動記錄中,前兩筆適用於 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
  1. 將 PROJECT_ID 替換為專案 ID。

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

稽核政策

Kubernetes 稽核政策會定義規則,指定哪些事件應記錄為記錄項目,以及記錄項目應包含哪些資料。Cloud 稽核記錄的行為取決於靜態設定的 Kubernetes 稽核記錄政策。不支援透過變更這項政策來修改 Cloud 稽核記錄行為。