總覽
Google Distributed Cloud (僅限軟體) for VMware 支援 API 和 Kubernetes 叢集層級的稽核記錄。Google Cloud 本文提供 Kubernetes 叢集稽核記錄的相關資訊。如要瞭解Google Cloud API 稽核記錄,請參閱「Cloud API 稽核記錄資訊」。
Google Distributed Cloud 會使用 Kubernetes 稽核記錄,依時間順序記錄對叢集 Kubernetes API 伺服器發出的呼叫。稽核記錄適合用於調查可疑的 API 要求,以及收集統計資料。
您可以設定叢集,將稽核記錄寫入磁碟或Cloud 稽核記錄 (位於 Google Cloud 專案中)。與寫入磁碟,甚至是擷取本機記錄系統中的記錄相比,寫入 Cloud 稽核記錄有幾項優點:
- 您可以集中管理所有 GKE 叢集的稽核記錄。
- 寫入 Cloud 稽核記錄的記錄項目無法變更。
- Cloud 稽核記錄項目會保留 400 天。
- Cloud 稽核記錄的費用包含在 Anthos 定價中。
以磁碟為基礎的稽核記錄
根據預設,稽核記錄會寫入永久磁碟,因此 VM 重新啟動和升級時不會導致記錄消失。
如果未啟用進階叢集:
Google Distributed Cloud 最多會保留 12 GB 的稽核記錄項目。
如果啟用進階叢集
Google Distributed Cloud 最多會保留 1 GB 的稽核記錄項目。
Cloud 稽核記錄
如果為叢集啟用 Cloud 稽核記錄,叢集 Kubernetes API 伺服器的管理員活動稽核記錄項目會傳送至 Google Cloud,並使用您在叢集設定檔的 cloudAuditLogging.projectID
欄位中指定的 Google Cloud 專案。這個 Google Cloud 專案稱為「稽核記錄專案」。
稽核記錄專案必須與車隊主專案相同。
為將記錄項目緩衝處理並寫入 Cloud 稽核記錄,Google Distributed Cloud 會將 audit-proxy
Pod 部署至管理員叢集。這個元件也可做為使用者叢集上的補充資訊容器。
限制
目前 Google Distributed Cloud 適用的 Cloud 稽核記錄有幾項限制:
不支援資料存取 (取得、列出、監看要求) 記錄。
不支援修改 Kubernetes 稽核政策。
Cloud 稽核記錄無法在長時間網路中斷時正常運作。如果無法將記錄檔項目匯出至 Google Cloud,系統會將這些項目緩存在 10G 的磁碟緩衝區中。如果緩衝區已滿,系統就會捨棄後續項目。
一個專案最多可支援約 1000 個服務帳戶,用於 Cloud 稽核記錄。多個叢集可使用同一個服務帳戶。
啟用 Anthos Audit API
在稽核記錄專案中啟用 Anthos Audit API。
為 Cloud Audit Logs 建立服務帳戶
您已建立一或多個服務帳戶,用於 Google Distributed Cloud。如要使用這項功能,您必須建立額外的服務帳戶,也就是「稽核記錄服務帳戶」。
建立稽核記錄服務帳戶:
gcloud iam service-accounts create audit-logging-service-account
為 Cloud Audit Logs 服務帳戶建立 JSON 金鑰檔案:
gcloud iam service-accounts keys create audit-logging-key.json \ --iam-account AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL
其中 AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL 是服務帳戶的電子郵件地址。
將
audit-logging-key.json
儲存在管理工作站上,與其他服務帳戶金鑰位於相同位置。
警告:刪除這個服務帳戶前,請務必先在叢集設定中將其替換為新服務帳戶!這個程序與為現有使用者叢集啟用 Cloud 稽核記錄類似。如果忘記這麼做,請按照這份指南進行清理。
建立啟用 Cloud 稽核記錄的管理員叢集
您只能在首次建立管理員叢集時,為管理員叢集啟用 Cloud 稽核記錄。您無法修改現有的管理員叢集,以啟用 Cloud Audit Logs。
請參閱「建立管理員叢集」。
在管理員叢集設定檔中,填寫
cloudAuditLogging
區段。將
cloudAuditLogging.projectID
設為稽核記錄專案的 ID。將
cloudAuditLogging.clusterLocation
設為要儲存稽核記錄的 Google Cloud 區域。如要縮短延遲時間,請選擇靠近地端資料中心的區域。將
cloudAuditLogging.serviceAccountKeyPath
設為稽核記錄服務帳戶的 JSON 金鑰檔案路徑。
例如:
cloudAuditLogging: projectID: "my-project" clusterLocation: "us-west1" serviceAccountKeyPath: "/my-key-folder/audit-logging-key.json"
繼續照常建立叢集。
建立啟用 Cloud 稽核記錄的使用者叢集
請參閱「建立使用者叢集」。
在使用者叢集設定檔中,填寫
cloudAuditLogging
部分。將
cloudAuditLogging.projectID
設為稽核記錄專案的 ID。將
cloudAuditLogging.clusterLocation
設為要儲存稽核記錄的 Google Cloud 區域。如要縮短延遲時間,請選擇靠近地端資料中心的區域。將
cloudAuditLogging.serviceAccounKeyPath
設為 Cloud Audit Logs 服務帳戶的 JSON 金鑰檔案路徑。請確認已填寫
gkeConnect
區段,且gkeConnect.projectID
與cloudAuditLogging.projectID
相同。
例如:
gkeConnect: projectID: "my-project" registerServiceAccountKeyPath: "/my-key-fokder/connect-register-key.json" cloudAuditLogging: projectID: "my-project" clusterLocation: "us-west1" serviceAccountKeyPath: "/my-key-folder/audit-logging-key.json"
繼續照常建立叢集。
為現有使用者叢集啟用 Cloud 稽核記錄
只有在註冊使用者叢集的 Google Cloud 專案中,才能啟用 Cloud 稽核記錄。
如果現有使用者叢集尚未註冊,請先按照下列步驟註冊,再啟用 Cloud 稽核記錄:
在使用者叢集設定檔中新增
gkeConnect
區段。例如:gkeConnect: projectID: "my-project" registerServiceAccountKeyPath: "/my-key-fokder/connect-register-key.json"
更新叢集:
gkectl update cluster --config USER_CLUSTER_CONFIG --kubeconfig ADMIN_CLUSTER_KUBECONFIG
註冊使用者叢集後,請按照下列步驟啟用 Cloud Audit Logs:
填寫使用者叢集設定檔的
cloudAuditLogging
區段。如要瞭解個別欄位的詳細資料,請參閱「建立已啟用 Cloud 稽核記錄的使用者叢集」。cloudAuditLogging
區段中的projectID
必須與gkeConnect
區段中的相同。更新叢集:
gkectl update cluster --config USER_CLUSTER_CONFIG --kubeconfig ADMIN_CLUSTER_KUBECONFIG
為現有使用者叢集停用 Cloud 稽核記錄
在使用者叢集設定檔中,刪除
cloudAuditLogging
區段。更新使用者叢集:
gkectl update cluster --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] --config [USER_CLUSTER_CONFIG]
存取稽核記錄
以磁碟為基礎的稽核記錄
您可以在 /var/log/kube-audit/kube-apiserver-audit.log
下的控制層節點上找到管理員叢集的稽核記錄。使用者叢集的稽核記錄位於名為 PersistentVolumeClaim
的 kube-audit-kube-apiserver-0
中。您可以在自己的 Pod 中透過 volumes
項目存取這項資料:
為管理員叢集新增這個項目:
volumes: - name: kube-audit hostPath: path: /var/log/kube-audit type: ""
為使用者叢集新增這個項目:
volumes: - name: kube-audit persistentVolumeClaim: claimName: kube-audit-kube-apiserver-0
如要在適當的管理員叢集節點 (且僅限這個節點) 上排定 Pod,您需要在 Pod 規格中加入 nodeSelector
和 tolerations
區段,如下所示:
spec: nodeSelector: node-role.kubernetes.io/master: '' tolerations: - key: node-role.kubernetes.io/master value: "" effect: NoSchedule
如果是使用者叢集,請將 namespace
設為使用者叢集名稱,然後將 nodeName
設為與 kube-apiserver-0
相同:
spec: nodeName: NODE_NAME
如要指出 nodeName
的 kube-apiserver-0
,請執行下列指令:
kubectl get pod kube-apiserver-0 -n USER_CLUSTER_NAME --kubeconfig kubeconfig -o jsonpath='{.spec.nodeName}'
每個稽核記錄的檔案名稱都有時間戳記,指出檔案輪替的時間。檔案會包含該時間和日期之前的稽核記錄。
Cloud 稽核記錄
控制台
在 Google Cloud 控制台中,前往「記錄」選單中的「記錄」頁面。
在「按標籤或搜尋字詞篩選」方塊中,按一下記錄層級下拉式選單上方的向下箭號,以開啟下拉式選單。 在選單中選擇「轉換為進階篩選器」。
在欄位中填入下列篩選器:
resource.type="k8s_cluster" logName="projects/PROJECT_ID/logs/externalaudit.googleapis.com%2Factivity" protoPayload.serviceName="anthosgke.googleapis.com"
按一下「提交篩選器」,即可顯示已設定登入這個專案的叢集中的所有稽核記錄。
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
。
稽核政策
Cloud 稽核記錄的行為取決於靜態設定的 Kubernetes 稽核記錄政策。目前不支援變更這項政策,但未來版本將開放這項功能。