稽核記錄

總覽

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。

啟用 Anthos Audit API

為 Cloud Audit Logs 建立服務帳戶

您已建立一或多個服務帳戶,用於 Google Distributed Cloud。如要使用這項功能,您必須建立額外的服務帳戶,也就是「稽核記錄服務帳戶」

  1. 建立稽核記錄服務帳戶:

    gcloud iam service-accounts create audit-logging-service-account
  2. 為 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 是服務帳戶的電子郵件地址。

  3. audit-logging-key.json 儲存在管理工作站上,與其他服務帳戶金鑰位於相同位置。

警告:刪除這個服務帳戶前,請務必先在叢集設定中將其替換為新服務帳戶!這個程序與為現有使用者叢集啟用 Cloud 稽核記錄類似。如果忘記這麼做,請按照這份指南進行清理。

建立啟用 Cloud 稽核記錄的管理員叢集

您只能在首次建立管理員叢集時,為管理員叢集啟用 Cloud 稽核記錄。您無法修改現有的管理員叢集,以啟用 Cloud Audit Logs。

  1. 請參閱「建立管理員叢集」。

  2. 在管理員叢集設定檔中,填寫 cloudAuditLogging 區段。

  3. cloudAuditLogging.projectID 設為稽核記錄專案的 ID。

  4. cloudAuditLogging.clusterLocation 設為要儲存稽核記錄的 Google Cloud 區域。如要縮短延遲時間,請選擇靠近地端資料中心的區域。

  5. cloudAuditLogging.serviceAccountKeyPath 設為稽核記錄服務帳戶的 JSON 金鑰檔案路徑。

例如:

cloudAuditLogging:
  projectID: "my-project"
  clusterLocation: "us-west1"
  serviceAccountKeyPath: "/my-key-folder/audit-logging-key.json"

繼續照常建立叢集。

建立啟用 Cloud 稽核記錄的使用者叢集

  1. 請參閱「建立使用者叢集」。

  2. 在使用者叢集設定檔中,填寫 cloudAuditLogging 部分。

  3. cloudAuditLogging.projectID 設為稽核記錄專案的 ID。

  4. cloudAuditLogging.clusterLocation 設為要儲存稽核記錄的 Google Cloud 區域。如要縮短延遲時間,請選擇靠近地端資料中心的區域。

  5. cloudAuditLogging.serviceAccounKeyPath 設為 Cloud Audit Logs 服務帳戶的 JSON 金鑰檔案路徑。

  6. 請確認已填寫 gkeConnect 區段,且 gkeConnect.projectIDcloudAuditLogging.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 稽核記錄:

  1. 使用者叢集設定檔中新增 gkeConnect 區段。例如:

    gkeConnect:
      projectID: "my-project"
      registerServiceAccountKeyPath: "/my-key-fokder/connect-register-key.json"
    
  2. 更新叢集:

    gkectl update cluster --config USER_CLUSTER_CONFIG --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

註冊使用者叢集後,請按照下列步驟啟用 Cloud Audit Logs:

  1. 填寫使用者叢集設定檔cloudAuditLogging 區段。如要瞭解個別欄位的詳細資料,請參閱「建立已啟用 Cloud 稽核記錄的使用者叢集」。cloudAuditLogging 區段中的 projectID 必須與 gkeConnect 區段中的相同。

  2. 更新叢集:

    gkectl update cluster --config USER_CLUSTER_CONFIG --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

為現有使用者叢集停用 Cloud 稽核記錄

  1. 在使用者叢集設定檔中,刪除 cloudAuditLogging 區段。

  2. 更新使用者叢集:

gkectl update cluster --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] --config [USER_CLUSTER_CONFIG] 

存取稽核記錄

以磁碟為基礎的稽核記錄

您可以在 /var/log/kube-audit/kube-apiserver-audit.log 下的控制層節點上找到管理員叢集的稽核記錄。使用者叢集的稽核記錄位於名為 PersistentVolumeClaimkube-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 規格中加入 nodeSelectortolerations 區段,如下所示:

    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

如要指出 nodeNamekube-apiserver-0,請執行下列指令:

kubectl get pod kube-apiserver-0 -n USER_CLUSTER_NAME --kubeconfig kubeconfig -o jsonpath='{.spec.nodeName}'

每個稽核記錄的檔案名稱都有時間戳記,指出檔案輪替的時間。檔案會包含該時間和日期之前的稽核記錄。

Cloud 稽核記錄

控制台

  1. 在 Google Cloud 控制台中,前往「記錄」選單中的「記錄」頁面。

    前往「Logs」(記錄) 頁面

  2. 在「按標籤或搜尋字詞篩選」方塊中,按一下記錄層級下拉式選單上方的向下箭號,以開啟下拉式選單。 在選單中選擇「轉換為進階篩選器」

  3. 在欄位中填入下列篩選器:

    resource.type="k8s_cluster"
    logName="projects/PROJECT_ID/logs/externalaudit.googleapis.com%2Factivity"
    protoPayload.serviceName="anthosgke.googleapis.com"
    
  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

稽核政策

Cloud 稽核記錄的行為取決於靜態設定的 Kubernetes 稽核記錄政策。目前不支援變更這項政策,但未來版本將開放這項功能。