保護叢集中繼資料


Google Kubernetes Engine (GKE) 使用執行個體中繼資料設定節點虛擬機器 (VM),但中繼資料的某些部分可能屬於敏感資訊,且應加以保護,以免受到叢集中執行的工作負載影響。

事前準備

開始之前,請確認你已完成下列工作:

  • 啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 如要使用 Google Cloud CLI 執行這項工作,請安裝初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行 gcloud components update,取得最新版本。

設定節點服務帳戶

每個節點的服務帳戶憑證會持續在工作負載中公開。根據預設,節點會使用 Compute Engine 預設服務帳戶。您應為節點設定權限最小的服務帳戶,而非使用 Compute Engine 預設服務帳戶。接著,將這個服務帳戶附加至節點,這樣攻擊者就無法藉由使用 Compute Engine API 直接存取基礎 VM 執行個體,來規避 GKE 中繼資料保護。

詳情請參閱「使用最低權限的節點服務帳戶」。

如要建立權限最小的節點服務帳戶,請完成下列步驟:

  1. 建立新的身分與存取權管理 (IAM) 服務帳戶,並將電子郵件地址儲存於環境變數中:

    gcloud iam service-accounts create NODE_SA_NAME \
        --display-name="DISPLAY_NAME"
    export NODE_SA_EMAIL=$(gcloud iam service-accounts list --format='value(email)' \
        --filter='displayName:DISPLAY_NAME')
    

    更改下列內容:

    • NODE_SA_NAME:新節點服務帳戶的名稱。
    • DISPLAY_NAME:新服務帳戶的顯示名稱。

    節點服務帳戶電子郵件地址的格式為 NODE_SA_NAME@PROJECT_ID.iam.gserviceaccount.com

  2. 設定服務帳戶,使其具備執行 GKE 節點所需的最低角色和權限:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:$NODE_SA_EMAIL \
        --role=roles/monitoring.metricWriter
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:$NODE_SA_EMAIL \
        --role=roles/monitoring.viewer
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:$NODE_SA_EMAIL \
        --role=roles/logging.logWriter
    

    PROJECT_ID 替換為您的 Google Cloud 專案 ID。

    此外,如果您的叢集會從 Artifact Registry 中提取出私人映像檔,請新增 roles/artifactregistry.reader 角色:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:$NODE_SA_EMAIL \
        --role=roles/artifactregistry.reader
    

中繼資料隱藏功能

GKE 中繼資料隱藏功能可防止使用者 Pod 存取 kube-env (其中含有 kubelet 憑證) 和 VM 的執行個體識別憑證

中繼資料隱藏功能防火牆會將來自使用者 Pod (「並非」HostNetwork 上執行的 Pod) 的流量傳送至叢集中繼資料伺服器,僅允許安全查詢。這道防火牆可防止使用者 Pod 利用 kubelet 憑證進行權限提升攻擊,或使用 VM 身分進行執行個體升級攻擊。

GKE 適用的工作負載身分聯盟取代了中繼資料隱藏功能的使用需求,並擴大了中繼資料隱藏功能提供的保護措施。在所有情況下,您都應使用 GKE 適用的 Workload Identity Federation,而非中繼資料隱藏功能。如要瞭解詳情,請參閱「About Workload Identity Federation for GKE」。

如要啟用中繼資料隱藏功能,請在 gcloud beta container clusters create 指令gcloud beta container node-pools create 指令中使用已淘汰的 --workload-metadata=SECURE 選項。

限制

隱藏中繼資料有下列限制:

  • 中繼資料隱藏功能只能保護對於 kube-env 和節點執行個體識別憑證的存取安全。
  • 中繼資料隱藏功能無法限制對於節點服務帳戶的存取權。
  • 中繼資料隱藏功能無法限制對於其他相關執行個體中繼資料的存取權。
  • 中繼資料隱藏功能無法限制對於其他舊版中繼資料 API 的存取權。
  • 中繼資料隱藏功能不會限制來自主機網路 (Pod 規格中的 hostNetwork: true) 上執行的 Pod 的流量。

停用舊版中繼資料 API 並完成轉換

v0.1v1beta1 Compute Engine 中繼資料伺服器端點已於 2020 年 9 月 30 日淘汰並關閉。

如需關閉時間表,請參閱「v0.1v1beta1 中繼資料伺服器端點淘汰」一文。

後續步驟