在機密 Google Kubernetes Engine 節點上執行的工作負載,可以存取及使用平台完整性和安全防護功能,例如虛擬信任平台模組 (vTPM) 和機密運算認證報告。本文說明安全工程師如何讓 GKE 工作負載可見 vTPM 和硬體式裝置,以執行遠端認證、密碼封存和隨機數產生等工作。
您應該已熟悉下列資源:
您使用的具體機密運算技術,取決於貴機構的威脅模型和安全需求。詳情請參閱「機密運算技術」。
機密運算工作
您可以從在機密 GKE 節點上執行的 Pod 存取 vTPM 和硬體模組。您可以使用這些模組執行加密編譯作業,例如密封密鑰或進行遠端認證。用於這些工作的特定模組取決於節點使用的機密運算技術,如下所示:
- 密鑰封存:在所有機密運算技術中,工作負載都可以使用 Shielded VM vTPM 做為密鑰封存的信任根。
遠端驗證:工作負載可使用下列其中一個模組進行遠端驗證:
- AMD SEV:Shielded VM vTPM。
- AMD SEV-SNP:以硬體為基礎的 AMD 安全處理器。
- Intel TDX:以硬體為基礎的 Intel TDX 模組。
如要進一步瞭解這些機密運算技術的遠端認證運作方式,請參閱「認證者架構和證據」。
事前準備
開始之前,請務必先完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文件中的指令。
- 在符合「必要條件」一節中所有條件的叢集或節點集區上,啟用機密 GKE 節點。詳情請參閱「在叢集層級設定機密 GKE 節點」或「在節點集區層級設定機密 GKE 節點」。
需求條件
在下列情況下,您可以使用機密 GKE 節點:
視要存取的機密運算模組而定,叢集和節點集區必須執行下列其中一個版本:
- vTPMs:任何 GKE 版本。
- AMD SEV-SNP 硬體型裝置:GKE 1.33.5-gke.1350000 以上版本或 1.34.1-gke.2037000 以上版本。
- Intel TDX 硬體型裝置:GKE 1.33.5-gke.1697000 以上版本,或 1.34.1-gke.2909000 以上版本。
節點集區必須位於具有相應機器類型的 Compute Engine 位置。如要進一步瞭解區域可用性,請參閱「機器類型、CPU 和可用區」。
節點必須使用 Container-Optimized OS 節點映像檔。
安裝裝置外掛程式
如要讓 GKE Pod 顯示完整性和安全性資訊,請安裝裝置外掛程式。如要使用 DaemonSet 安裝外掛程式,請按照下列步驟操作:
連線至叢集:
gcloud container clusters get-credentials CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION更改下列內容:
CLUSTER_NAME:叢集名稱。CONTROL_PLANE_LOCATION:叢集控制層的區域或可用區,例如us-central1或us-central1-a。
建立
cc-device-pluginDaemonSet:kubectl create -f https://raw.githubusercontent.com/google/cc-device-plugin/main/manifests/cc-device-plugin.yaml
建立 DaemonSet 後,機密 GKE 節點上的任何機密運算裝置,都會對在這些節點上執行的 Pod 顯示。
從 Pod 存取機密運算裝置
建立 DaemonSet 來安裝裝置外掛程式後,您就可以從 Pod 存取 vTPM 和硬體型裝置,方式與在 Kubernetes 中要求其他擴充資源類似。以下各節說明如何從任何 Pod 存取 vTPM,以及如何在 AMD SEV-SNP 和 Intel TDX 節點中存取硬體式模組。
從 Pod 存取 vTPM
如要從在機密 GKE 節點上執行的任何 Pod 存取 Shielded VM vTPM,請將 google.com/cc 裝置新增至容器資源限制。下列步驟會要求存取範例 Pod 中的 vTPM:
將下列 Pod 資訊清單儲存為
example-vtpm-pod.yaml:apiVersion: v1 kind: Pod metadata: name: my-vtpm-pod spec: containers: - name: test-vtpm image: ubuntu command: ["/bin/sh", "-c", "ls -l /dev/tpmrm0; sleep 3600"] ports: - containerPort: 8080 name: http resources: limits: google.com/cc: 1建立 Pod:
kubectl apply -f example-vtpm-pod.yamlPod 會取得「
/dev/tpmrm0」裝置的存取權。如要確認 Pod 能存取 vTPM,請檢查 Pod 記錄:
kubectl logs my-vtpm-pod如果輸出內容包含檔案資訊,表示 Pod 可以存取裝置。
您可以透過應用程式程式碼與裝置互動。舉例來說,您可以使用 Go-TPM 程式庫與 vTPM 通訊,並執行密封等工作。如果您使用 AMD SEV,也可以使用 vTPM 對機密 VM 執行個體進行遠端認證。
從 Pod 存取硬體型模組
如果您使用 AMD SEV-SNP 或 Intel TDX,也可以在 Pod 中存取對應的硬體式模組,方法是在容器資源限制中指定對應的選取器。您必須使用這些模組,對採用 AMD SEV-SNP 和 Intel TDX 的節點執行遠端認證,因為 vTPM 並非這些技術中測量的信任根。
如要要求存取 AMD 安全處理器或 Intel TDX 模組,請按照下列步驟操作:
儲存下列其中一個 Pod 範例:
要求 AMD SEV-SNP 裝置:
要求 Intel TDX 裝置:
建立 Pod:
kubectl create -f PATH_TO_POD_MANIFEST將
PATH_TO_POD_MANIFEST替換為您儲存的 Pod 資訊清單檔案路徑。Pod 可存取下列其中一部裝置:
/dev/sev-guest,適用於 AMD SEV-SNP。/dev/tdx_guest,適用於 Intel TDX。
如要確認 Pod 是否可以存取裝置,請檢查 Pod 記錄:
kubectl logs POD_NAME將
POD_NAME替換為您在上一步部署的範例 Pod 名稱。如果輸出內容包含檔案資訊,表示 Pod 可以存取裝置。
後續步驟
- 瞭解如何遠端驗證工作負載是否在機密 VM 上執行。