憑證存取:在 Kubernetes 命名空間存取密鑰

本文說明 Security Command Center 中的威脅發現項目類型。威脅偵測工具偵測到雲端資源中可能存在威脅時,就會產生威脅發現項目。如需可用威脅發現項目的完整清單,請參閱威脅發現項目索引

總覽

Pod 的 defaultKubernetes 服務帳戶用於存取叢集中的密鑰物件。除非您使用 Role 物件或 ClusterRole 物件明確授予存取權,否則 default Kubernetes 服務帳戶不應有權存取 Secret 物件。

Event Threat Detection 是這項發現項目的來源。

下列應變計畫可能適用於這項發現,但也可能影響作業。 請仔細評估調查期間收集到的資訊,找出解決問題的最佳方式。

回應方式

如要回應這項發現項目,請按照下列步驟操作:

  1. 找出存取權範圍:

    • 在發現項目 JSON 中,記下 finding.resourceName 的值。 這表示發生存取行為的 Kubernetes 命名空間或資源。
    • 請記下 resource.sourceProperties.affectedResources.gcpResourceName 的值。這是所存取 Kubernetes 密鑰的完整資源名稱。
  2. 調查 Cloud 稽核記錄:

    • 前往 Google Cloud 控制台的「Logs Explorer」。
    • 篩選記錄,找出對 Kubernetes 密鑰執行的特定動作。使用下列篩選條件:

      resource.type="k8s_cluster"
      protoPayload.methodName=~"io\.k8s\.core\.v1\.secrets\..*"
      
    • 在產生調查結果的時間前後,尋找具有 protoPayload.methodName 值的項目,例如 io.k8s.core.v1.secrets.getio.k8s.core.v1.secrets.list。這些記錄可提供更多背景資訊,瞭解存取密鑰的使用者或項目,以及執行的動作。

    • 使用下列記錄篩選器,檢查角色型存取權控管 (RBAC) 的變更 (Pod 必須進行這項變更,才能存取密鑰):

      resource.type="k8s_cluster"
      protoPayload.methodName:"io\.k8s\.authorization\.rbac\.v1\..*"
      

      具體來說,請尋找含有 methodName 的記錄,其中包含 io.k8s.authorization.rbac.v1.roles.create/updateio.k8s.authorization.rbac.v1.rolebindings.create/update

  3. 檢查 Google Kubernetes Engine RBAC 設定:

    • 前往 Google Cloud 控制台的「Kubernetes Engine」部分。
    • 前往叢集並選取「物件瀏覽器」
    • 展開 rbac.authorization.k8s.io 群組。
    • 檢查 finding.resourceName 中所識別命名空間內的 RoleRoleBinding 物件 (以及 ClusterRole / ClusterRoleBinding,如適用)。
    • 找出在 secrets 上授予 getlist 權限的角色。
    • 找出將命名空間中的 default 服務帳戶 (或其他服務帳戶) 與授予密鑰存取權的角色建立關聯的 RoleBinding
  4. 修正權限過多的問題:

    • 如果 default 服務帳戶已獲准存取密鑰,但您並非有意授予這項權限,請更新 RoleRoleBinding,移除這些權限。
    • 遵循最小權限原則。只授予服務帳戶運作所需的最低必要權限。請勿使用 default 服務帳戶執行需要特定權限的工作負載,而應建立專屬的服務帳戶。
    • 您可以使用 kubectl edit role [ROLE_NAME]kubectl edit rolebinding [ROLE_BINDING_NAME] 修改 RBAC 資源。

      後續步驟