- 設定 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 客戶可用的客戶自有權限工作負載,請確認下列兩項條件:
- 貴機構管理員已將允許清單值區路徑新增至機構政策。詳情請參閱「在機構中限制具備特殊權限的 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 欄位會遞增 1。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 許可清單已成功安裝。如需這些欄位的說明,請參閱「允許清單同步器狀態」。
確認叢集中有許可清單
如要確認叢集中是否有允許清單,請執行下列指令:
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。