本文說明如何使用 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 軟體,請先完成下列設定:
如果還沒有 Cloud Monitoring 工作區,請在 Google Cloud 專案中建立一個。
在 Google Cloud 控制台中,按一下下列按鈕,然後按照工作流程操作。
點選下列按鈕,啟用必要的 API:
將下列 IAM 角色指派給 Stackdriver 代理程式使用的服務帳戶:
logging.logWritermonitoring.metricWriterstackdriver.resourceMetadata.writermonitoring.dashboardEditor
存取 Cloud 稽核記錄
控制台
前往 Google Cloud 控制台,在「Logging」選單中點選「Logs Explorer」。
如果開啟的是「舊版記錄檢視器」頁面,請從「升級」下拉式選單中,選擇「升級至新的 Logs Explorer」。
按一下「Query」(查詢) 欄位,輸入查詢。
在「Query」(查詢) 欄位中輸入下列查詢:
resource.type="k8s_cluster" logName="projects/PROJECT_ID/logs/externalaudit.googleapis.com%2Factivity" protoPayload.serviceName="anthosgke.googleapis.com"將
PROJECT_ID替換為專案 ID。按一下「執行查詢」,即可顯示已設定登入這項專案的叢集的所有稽核記錄。
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 稽核記錄的行為取決於靜態設定的 Kubernetes 稽核記錄政策。不支援透過變更這項政策來修改 Cloud 稽核記錄行為。