自動稽核工作負載的設定問題

本頁面說明如何自動稽核工作負載設定,找出安全疑慮,並取得可行的建議,提升 Google Kubernetes Engine (GKE) Autopilot 和 Standard 叢集的資安態勢。本指南將逐步說明如何啟用工作負載設定稽核功能、部署測試工作負載、查看設定稽核結果並採取行動,以及停用工作負載設定稽核功能。此外,也會說明工作負載設定稽核的定價、需求和限制。

本頁面適用於監控 GKE 叢集安全性的資安專員,說明如何自動稽核 GKE Autopilot 和 Standard 叢集中的工作負載設定。如要進一步瞭解 Google Cloud 內容中提及的常見角色和工作範例,請參閱「常見的 GKE 使用者角色和工作」。

閱讀本頁面前,請先熟悉下列概念,因為工作負載設定稽核是資安態勢資訊主頁的功能:

定價

GKE 透過 Container Security API 免費提供資安態勢資訊主頁。

新增至 Cloud Logging 的項目適用 Cloud Logging 定價。

事前準備

開始之前,請確認您已執行下列工作:

  • 啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行 gcloud components update 指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文件中的指令。

需求條件

  • 如要取得使用工作負載設定稽核功能所需的權限,請要求管理員授予您 Google Cloud 專案的資安態勢檢視者 (roles/containersecurity.viewer) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

    這個預先定義的角色具備使用工作負載設定稽核功能所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:

    所需權限

    必須具備下列權限,才能使用工作負載設定稽核功能:

    • resourcemanager.projects.get
    • resourcemanager.projects.list
    • containersecurity.locations.list
    • containersecurity.locations.get
    • containersecurity.clusterSummaries.list
    • containersecurity.findings.list

    您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

  • 工作負載設定稽核功能需要 GKE 1.21 以上版本。

啟用工作負載設定稽核功能

根據預設,執行 1.27 以上版本的新 Autopilot 和 Standard 叢集會啟用工作負載設定稽核功能。您也可以使用 gcloud CLI 或 Google Cloud 控制台,手動啟用這項功能。

為現有叢集啟用設定稽核功能

gcloud

更新叢集:

gcloud container clusters update CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --security-posture=standard

更改下列內容:

  • CLUSTER_NAME:叢集名稱。
  • CONTROL_PLANE_LOCATION:叢集控制層的位置。請為區域性 Standard 和 Autopilot 叢集提供區域,或為可用區 Standard 叢集提供可用區。

控制台

  1. 前往 Google Cloud 控制台的「Security Posture」(資安態勢) 頁面。

    前往「Security Posture」
  2. 按一下 [設定] 標籤。
  3. 在「Configuration audit enabled clusters」(已啟用設定稽核功能的叢集) 區段中,按一下「Select clusters」(選取叢集)。
  4. 勾選要新增的叢集。
  5. 在「選取動作」下拉式選單中,選取「設為基本」。
  6. 按一下「套用」。

您也可以設定機群層級的設定稽核設定,套用至所有成員叢集。如需操作說明,請參閱「在機群層級設定 GKE 資安態勢資訊主頁功能」。

部署測試工作負載

部署刻意違反 Pod 安全性標準的範例應用程式。

  1. 將下列資訊清單儲存為 misconfig-sample.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: helloweb
      labels:
        app: hello
    spec:
      selector:
        matchLabels:
          app: hello
          tier: web
      template:
        metadata:
          labels:
            app: hello
            tier: web
        spec:
          containers:
          - name: hello-app
            image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
            ports:
            - containerPort: 8080
            securityContext:
              runAsNonRoot: false
            resources:
              requests:
                cpu: 200m
    
  2. 將應用程式部署至叢集:

    kubectl apply -f misconfig-sample.yaml
    

如要嘗試其他違規事項,請使用對應的「不良」設定修改 misconfig-sample.yaml。

查看設定稽核結果並採取行動

初始稽核作業最多需要 15 分鐘才能傳回結果。GKE 會在資安態勢資訊主頁顯示結果,並自動將項目新增至叢集記錄。

查看結果

如要查看專案叢集和工作負載中發現的問題總覽,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Security Posture」(資安態勢) 頁面。

    前往「Security Posture」(安全防護機制)

  2. 點按「Concerns」(疑慮) 分頁標籤。

  3. 在「Filter concerns」(篩選疑慮) 窗格的「Concern type」(疑慮類型) 部分,勾選「Configuration」(設定) 核取方塊。

查看疑慮詳情和建議

如要查看特定設定問題的詳細資訊,請按一下包含該問題的資料列。

「Configuration Concern」(設定問題) 窗格會顯示下列資訊:

  • 說明:問題說明。
  • 應變措施建議:概略說明可採取哪些行動來修正設定問題。這個部分包含下列詳細資料:
    • 需要修正的資源
    • 可執行的指令範例,用於將修正項目套用至受影響的資源
    • Google Cloud 控制台操作說明 (如適用),說明如何修正問題

查看偵測到的疑慮記錄

GKE 會在 Logging 的 _Default 記錄檔 bucket 中,為每個發現的問題新增項目。這些記錄只會保留一段時間。詳情請參閱「記錄檔保留期限」。

  1. 前往 Google Cloud 控制台的「Logs Explorer」頁面:

    前往「Logs Explorer」
  2. 在「Query」(查詢) 欄位中,指定下列查詢:

    resource.type="k8s_cluster"
    jsonPayload.@type="type.googleapis.com/cloud.kubernetes.security.containersecurity_logging.Finding"
    jsonPayload.type="FINDING_TYPE_MISCONFIG"
  3. 點選「執行查詢」。

如要在 GKE 將新發現項目新增至 Logging 時收到通知,請為這項查詢設定記錄檔快訊。詳情請參閱「設定記錄式警告」。

清除所用資源

  1. 刪除您部署的範例工作負載。

    kubectl delete deployment helloweb
    
  2. 視需要刪除您使用的叢集。

    gcloud container clusters delete CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION
    

停用工作負載設定稽核功能

您可以使用 gcloud CLI 或 Google Cloud 控制台,停用工作負載設定稽核功能。

gcloud

執行下列指令:

gcloud container clusters update CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --security-posture=disabled

更改下列內容:

  • CLUSTER_NAME:叢集名稱。
  • CONTROL_PLANE_LOCATION:叢集控制層的位置。請提供區域性 Standard 和 Autopilot 叢集的區域,或可用區 Standard 叢集的可用區。

控制台

  1. 前往 Google Cloud 控制台的「Security Posture」(資安態勢) 頁面。

    前往「Security Posture」(安全防護機制)
  2. 按一下 [設定] 標籤。
  3. 在「Configuration audit enabled clusters」(已啟用設定稽核功能的叢集) 區段中,按一下「Select clusters」(選取叢集)。
  4. 在「Audit enabled」(已啟用稽核) 分頁中,勾選要移除的叢集核取方塊。
  5. 依序點選「Disable audit」(停用稽核) 和「Confirm」(確認),停用這些叢集的稽核功能。

工作負載設定稽核的限制

  • 不支援 Windows Server 節點集區。
  • 工作負載設定稽核不會掃描 GKE 代管的工作負載,例如 kube-system 命名空間中的工作負載。
  • 工作負載設定稽核功能僅適用於節點數量少於 1,000 個的叢集。
  • 資安態勢資訊主頁最多可支援每個叢集 150,000 項有效的工作負載設定稽核發現項目。如果叢集的發現項目數量超過上限,資安態勢資訊主頁就會停止顯示該叢集的設定發現項目。

    如要解決這個問題,請使用 Logging 中的記錄找出設定問題,並部署更新後的資訊清單。當設定發現項目數量少於 150,000 個時,資安態勢資訊主頁就會開始顯示叢集的發現項目。

  • 針對每個叢集,GKE 資安態勢資料庫會追蹤 Kubernetes API 中的所有頂層工作負載物件。舉例來說,管理 20 個副本的 Deployment 會視為單一物件。靜態 Pod 也是單一物件。

    資料庫在單一交易中最多可處理 5,000 項物件刪除和建立作業。舉例來說,刪除 Deployment 是一項作業,重新建立靜態 Pod 則是兩項作業 (刪除和建立)。如果作業數量超過 5,000 項,資安態勢資訊主頁就會停止顯示該叢集的發現項目。

    如果資訊主頁未更新,且您最近擴充了叢集中的頂層工作負載數量,可以向 Cloud Customer Care 提交客服案件,重設資料庫狀態。

後續步驟