- 設定 GKE,在 Autopilot 模式中僅執行特定特殊權限工作負載。
- 為特殊權限工作負載安裝許可清單。
本文適用於下列角色:
- 資安工程師:確保第三方工作負載必須加入許可清單,才能在叢集上執行,且來源必須經 GKE 核准。
- 平台工程師:希望在叢集上啟用第三方工作負載,讓應用程式團隊順利運作。
您應該已熟悉下列概念:
關於 Autopilot 中的特殊權限工作負載
Autopilot 模式會對工作負載強制執行一組預設限制,以提升資安態勢。您可以安裝與這些工作負載對應的許可清單,修改這些限制,以執行特定特殊權限工作負載。根據預設,Autopilot 可讓您安裝 Autopilot 合作夥伴和特定開放原始碼專案的許可清單。符合資格的 GKE 客戶也可以建立許可清單,允許上傳至 Cloud Storage bucket 的客戶自有特殊權限工作負載。
每個許可清單都是一個檔案,與特定特殊權限工作負載相符。如要執行特殊權限工作負載,請按照下列步驟操作:
- 設定叢集,允許從特定路徑安裝許可清單。根據預設,系統支援 Autopilot 合作夥伴和已核准開放原始碼專案的所有許可清單。
- 在叢集中建立 AllowlistSynchronizer,以便安裝許可清單並保持最新狀態。
特殊權限工作負載和許可清單的錯誤和功能要求
特殊權限工作負載的擁有者負責建立、開發及維護工作負載和許可清單。如果遇到錯誤,或想針對特殊權限工作負載或許可清單提出功能要求,請與對應的擁有者聯絡。
事前準備
開始之前,請確認您已執行下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果先前已安裝 gcloud CLI,請執行
gcloud components update指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文件中的指令。
- 確認您可以設定叢集,從所選來源安裝許可清單。組織管理員可以使用組織政策,控管可新增至叢集的路徑。詳情請參閱「組織政策服務代管限制 (許可清單)」。
如為符合資格的 GKE 客戶可用的客戶自有特殊權限工作負載,請確認下列兩項條件:
- 貴組織的管理員已將許可清單 bucket 路徑新增至組織政策。詳情請參閱「限制組織中的特殊權限 GKE 工作負載」。
- 要安裝的許可清單位於 Cloud Storage bucket 中。詳情請參閱「為具特殊權限的 Autopilot 工作負載建立許可清單」。
需求條件
- AllowlistSynchronizer 自訂資源需要 GKE 1.32.2-gke.1652000 以上版本。
- 您必須知道要在叢集中執行哪些特殊權限工作負載。
- 如要修改叢集的許可清單路徑設定,叢集必須執行 GKE 1.35 以上版本。
設定叢集的許可清單路徑
本節說明如何設定叢集,支援從一組核准的路徑安裝許可清單。根據預設,Autopilot 支援安裝 GKE 合作夥伴和核准開放原始碼專案的許可清單。您可以修改個別叢集的預設設定。您也可以使用組織政策,為整個組織、資料夾或專案指定核准的許可清單來源。
找出要新增至叢集的許可清單檔案路徑。建立或更新叢集時,您可以指定多個路徑。您也可以指定空字串 (而非路徑),禁止從任何來源安裝許可清單。如要進一步瞭解可指定的路徑,請參閱「許可清單路徑」。
如要控管叢集核准的許可清單來源,請在建立或更新 Autopilot 或 Standard 叢集時,使用
--autopilot-privileged-admission旗標,如以下指令所示:gcloud container clusters create-auto CLUSTER_NAME \ --location=LOCATION \ --autopilot-privileged-admission=ALLOWLIST1_PATH,ALLOWLIST2_PATH,...更改下列內容:
CLUSTER_NAME:新叢集的名稱。LOCATION:叢集控制層的位置,例如us-central1。ALLOWLIST1_PATH,ALLOWLIST2_PATH,...:逗號分隔的清單,用於將檔案或目錄加入許可清單。例如:gke://*,gs://my-agent/privileged-logging-agent.yaml。您也可以指定空字串 (""),禁止從任何來源安裝許可清單。
如果您更新現有叢集,但未指定 --autopilot-privileged-admission 旗標,該叢集的現有路徑設定不會變更。每次更新叢集時,不一定要指定這個旗標。
叢集建立或更新作業完成後,您可以建立 AllowlistSynchronizer,從指定路徑安裝許可清單。
建立新的 AllowlistSynchronizer
如要執行具特殊權限的工作負載,請將對應許可清單檔案的路徑,新增至 YAML 檔案中的 AllowlistSynchronizer 規格。接著,將 AllowlistSynchronizer 部署至叢集。
- 在文字編輯器中建立新的 YAML 檔案。
在 YAML 檔案中加入下列內容:
apiVersion: auto.gke.io/v1 kind: AllowlistSynchronizer metadata: name: ALLOWLIST_SYNCHRONIZER_NAME spec: allowlistPaths: - ALLOWLIST1_PATH - ALLOWLIST2_PATH更改下列內容:
ALLOWLIST_SYNCHRONIZER_NAME:新同步器的名稱。請選擇描述性名稱,以便識別許可清單支援的工作負載或團隊。ALLOWLIST1_PATH, ALLOWLIST2_PATH, ...:要安裝的許可清單檔案或目錄的路徑清單,例如下列 GKE 核准的許可清單範例:allowlistPaths: - Gke-Org/accelerators/* - Wiz/wiz-sensor/v1/wiz-sensor-v1.yaml或在下列客戶擁有的許可清單範例中:
allowlistPaths: - my-agent/log-collector/* - my-agent/privileged-logging-agent.yaml叢集設定必須支援您指定的路徑,如「設定叢集的許可清單路徑」一節所述。此外,每個 AllowlistSynchronizer 必須僅包含 GKE 核准的許可清單,或僅包含客戶擁有的許可清單。
如果您是從 客戶擁有的 Cloud Storage bucket 安裝許可清單,請將
spec.projectNumber和spec.bucketName欄位新增至 AllowlistSynchronizer。詳情請參閱 AllowlistSynchronizer CustomResourceDefinition。將 YAML 檔案部署至叢集:
kubectl apply -f PATH_TO_YAML_FILE將
PATH_TO_YAML_FILE替換為您在上一個步驟中建立的 YAML 檔案路徑。AllowlistSynchronizer 控制器會從叢集中的指定路徑安裝許可清單檔案。
等待同步器回報
Ready狀態:kubectl wait --for=condition=Ready allowlistsynchronizer/ALLOWLIST_SYNCHRONIZER_NAME \ --timeout=60s
您也可以將許可清單安裝和特殊權限工作負載部署作業,整合至持續整合和持續部署 (CI/CD) 管道。請將工作流程設為等待許可清單安裝成功,再部署對應的工作負載。
更新現有的 AllowlistSynchronizer
您可以更新現有的 AllowlistSynchronizer,新增或移除許可清單檔案。在下列情況下,您可能需要更新現有的同步器:
- 工作負載擁有者新增名稱不同的許可清單檔案。
- 您想將新的工作負載許可清單,新增至現有同步器,該同步器會將相關許可清單分組。
- 您不想再使用對應的工作負載,因此想從同步器中移除許可清單。
如要更新現有的 AllowlistSynchronizer 物件,請按照下列步驟操作:
列出叢集中的現有同步器:
kubectl get allowlistsynchronizer在文字編輯器中開啟要更新的同步器規格。
更新
spec.allowlistPaths欄位,新增、修改或移除許可清單檔案路徑。儲存並關閉文字編輯器。
將更新後的設定套用至叢集:
kubectl apply -f PATH_TO_YAML_FILE將
PATH_TO_YAML_FILE替換為您在上一個步驟中更新的 YAML 檔案路徑。
部署更新後的同步器設定時,AllowlistSynchronizer 物件狀態中的 managedAllowlistStatus.generation 欄位會遞增一。AllowlistSynchronizer 控制器會套用變更。
監控許可清單同步處理狀態
安裝 AllowlistSynchronizer 或更新現有同步器後,即可監控同步狀態。您可以透過狀態追蹤許可清單檔案的安裝、移除或修改情形,以及可能發生的任何錯誤。
如要監控同步作業的一般狀態,請執行下列指令:
kubectl get allowlistsynchronizer ALLOWLIST_SYNCHRONIZER_NAME -o yaml
輸出結果會與下列內容相似:
...
status:
conditions:
- type: Ready
status: "False"
reason: "SyncError"
message: "some allowlists failed to sync: example-allowlist-1.yaml"
lastTransitionTime: "2024-10-12T10:00:00Z"
observedGeneration: 2
managedAllowlistStatus:
- filePath: "gs://path/to/example-allowlist-2.yaml"
generation: 1
phase: Installed
lastSuccessfulSync: "2024-10-10T10:00:00Z"
- filePath: "gs://path/to/example-allowlist-1.yaml"
phase: Failed
lastError: "Initial install failed: invalid contents"
lastSuccessfulSync: "2024-10-08T10:00:00Z"
在這個輸出範例中,example-allowlist-1.yaml 許可清單無法同步,example-allowlist-2.yaml 許可清單則已成功安裝。如需這些欄位的說明,請參閱「AllowlistSynchronizer 狀態」。
確認叢集中有許可清單
如要確認叢集中是否存在許可清單,請執行下列指令:
kubectl get workloadallowlist
輸出內容會列出叢集中已安裝的許可清單。確認輸出內容包含您要使用的許可清單。
部署具特殊權限的工作負載
成功安裝許可清單後,您可以在叢集中部署對應的工作負載。工作負載擁有者也應提供工作負載的安裝操作說明。如需 Autopilot 合作夥伴清單和說明文件連結,請參閱「Autopilot 合作夥伴」。
使用私人映像檔鏡像存放區
您可以將特殊權限工作負載的容器映像檔,鏡像至您擁有的私人存放區。如要在工作負載中執行這些鏡像映像檔,必須符合下列所有條件:
- 鏡像映像檔的 SHA-256 摘要必須與公開工作負載的映像檔摘要相符。
- 您指定的 SHA-256 映像檔摘要必須存在於同步至叢集的
WorkloadAllowlist物件中。
如果工作負載支援鏡像映像檔,該工作負載的許可清單規格會包含映像檔摘要清單,列在許可清單規格的 containers.imageDigests 欄位中。一般來說,這個欄位會為容器映像檔的每個可用版本提供個別摘要。如要查看這個映像檔摘要清單,請按照下列步驟操作:
- 確認叢集中有許可清單。
取得已安裝許可清單的規格:
kubectl get workloadallowlist ALLOWLIST_NAME -o yaml將
ALLOWLIST_NAME替換為已安裝許可清單的名稱。例如:company-name-solution-v1.0.0。如果工作負載支援這項功能,輸出內容會大致如下。
imageDigests欄位會列出允許的摘要。# lines omitted for clarity - containerName: pause-container1 imageDigests: - cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229 - 932ea160d395f3d7f76c0c17a52a63c4cfe1836a900f1058b6bc20b16fd10d23如果輸出內容不含
imageDigests欄位,或清單中沒有您要使用的版本摘要,請直接與工作負載擁有者聯絡,要求對方更新許可清單。工作負載擁有者將映像檔摘要新增至許可清單後,叢集中的許可清單同步器會自動安裝更新後的許可清單。在工作負載資訊清單中,新增其中一個支援的映像檔摘要。
舉例來說,請參考以下合作夥伴公開 Pod 規格中的圖片:
...
containers:
- name: pause-container1
image: partner-repo/pause1@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
securityContext:
privileged: true
如果摘要與公開摘要相符,您可以使用鏡像映像檔,例如:
...
containers:
- name: pause-container1
image: my-private-repo/pause1@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
securityContext:
privileged: true
您必須在圖片欄位中加入 SHA-256 摘要,如前例所示。如果摘要不相符,鏡像映像檔就不會執行。如要在鏡像合作夥伴映像檔時保留映像檔摘要,建議使用 crane、ORAS 或 skopeo 等工具。
刪除特殊權限工作負載
如要停止允許特殊權限工作負載在叢集中執行,請從 AllowlistSynchronizer 移除對應許可清單的路徑。同步器會解除安裝許可清單。
如果您從叢集刪除 WorkloadAllowlist 物件,而不是更新同步器,同步器會重新安裝許可清單。請務必從 AllowlistSynchronizer 中移除路徑。
如要解除安裝許可清單,請按照下列步驟操作:
- 在管理許可清單的 AllowlistSynchronizer YAML 資訊清單中,移除要解除安裝的許可清單路徑。如需操作說明,請參閱「更新現有的 AllowlistSynchronizer」一節。
如要確認許可清單已解除安裝,請取得叢集中的
WorkloadAllowlist物件清單:kubectl get workloadallowlist在輸出內容中,確認要移除的許可清單並未顯示。
從叢集刪除工作負載。如需操作說明,請參閱工作負載供應商的說明文件。
禁止在叢集中安裝許可清單
如要防止在特定叢集中安裝特殊權限工作負載許可清單,請在建立或更新叢集時,在 --autopilot-privileged-admission 旗標中指定空字串 ("")。
如要停用叢集的特定許可清單路徑,請在建立或更新叢集時,省略這些許可清單的路徑:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --autopilot-privileged-admission=ALLOWLIST1_PATH,ALLOWLIST2_PATH,...將
ALLOWLIST1_PATH,ALLOWLIST2_PATH,...替換為以逗號分隔的清單,列出要加入許可清單的來源路徑。省略要停用的路徑。如要停用現有叢集中的所有許可清單,請將核准的路徑指定為空字串:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --autopilot-allowlist-paths=""
疑難排解
如果同步處理或工作負載部署作業失敗,請參閱「排解部署特殊權限 Autopilot 工作負載的問題」。
後續步驟
- 瞭解 GKE Autopilot 合作夥伴提供的可用工作負載
- 在 GKE Autopilot 執行具特殊權限的開放原始碼工作負載
- 瞭解預設的 GKE Autopilot 安全防護功能
- 閱讀 AllowlistSynchronizer CustomResourceDefinition