安全性

本主題針對 Tanzu Kubernetes Grid 安全性提供高層級的描述性概觀。

簡介

Tanzu Kubernetes Grid (TKG) 能夠在任何雲端上實現 Kubernete 原生的一致體驗。如此一來,藉由 TKG 中幾個預先封裝的元件,協助工作負載叢集及其基礎環境達到更高的安全性,而讓安全性控制也能一致地套用在各環境之間。對於雲端原生堆疊中各個層,共同責任模型還適用於保護執行 Tanzu Kubernetes Grid 佈建叢集的環境:程式碼容器叢集雲端

本文件嘗試分享目前最先進的 TKG 安全性。在每個版本中,VMware 始終致力於提高 TKG 安全性,並專注於產品本身的安全性,同時保持順暢的開發人員體驗。應該根據組織的安全狀態和風險承受度,考慮本文中的所有建議。

對於部署了 vSphere with Tanzu 主管的 TKG 以及部署了獨立管理叢集的 TKG,這兩者間的安全性詳細資料有所不同。下方連結的 vSphere with Tanzu 說明文件涵蓋了以主管為基礎的部署的相關安全性案例。本主題的其餘部分會說明具有獨立管理叢集的 TKG 部署。

vSphere with Tanzu 主管的安全性

在具有主管的 vSphere 8 上,Tanzu Kubernetes Grid v2.0 是 vSphere 的附加元件模組。此產品利用許多 vSphere 功能,包括 vSphere 安全性和 vCenter SSO。如需關於 Tanzu Kubernetes Grid v2.0 安全性的詳細資訊,請參閱 vSphere 8 說明文件中的 vSphere with Tanzu 安全性

本文僅涉及 Tanzu Kubernetes Grid 多雲端供應項目。這裡描述官方產品說明文件及有別於其他供應項目之處。

如需其他 VMware Tanzu 供應項目的安全指導,請參閱:

獨立管理叢集的安全性

以下各節說明部署了獨立管理叢集的 TKG 內部及其周圍的安全性。這包括產品內建的可用安全性控制,以及有何最佳做法來實作補充安全性控制以保護部署 Tanzu Kubernetes Grid 叢集的環境。

程式碼

Tanzu Kubernetes Grid 執行由應用程式開發人員編寫並部署為 Kubernetes 網繭的程式碼。Tanzu Kubernetes Grid 由不同元件組成,其中許多是開放原始碼,有些是 VMware 專屬。如果所有這些應用程式和元件的程式碼都很安全,則執行 Tanzu Kubernetes Grid 佈建叢集的環境可以改善安全狀態。

Tanzu Kubernetes Grid 遵照 VMware 安全開發生命週期流程開發。具體而言是實作以下最佳做法,以確保 Tanzu Kubernetes Grid 產品安全性:

  • 隨產品的各項重大設計變更,修正威脅模型。

  • 根據威脅建模實驗中發現的結果,進行優先順序較高的修正。

  • 自動建置所有核心 Tanzu Kubernetes Grid 元件,從原始程式碼編譯元件。

  • 參與上游的安全性修正、發行管理和弱點分類。

  • 對於合併到 main 分支之前的 VMware 專屬程式碼:

    • 實作對等程式碼檢閱以確保二次審查。

    • 使用 golintgosecgovet 等工具自動掃描靜態程式碼。

  • 使用 VMware 簽署金鑰來簽署 kubectltanzu-cli 等二進位檔。

為了保護 Tanzu Kubernetes Grid 上執行的容器化應用程式的程式碼,以下資源是很有用的參考:

容器

使用預先封裝的映像 (實質上是所有執行階段相依性和應用程式二進位檔的 tarball,用於執行容器化應用程式),將容器具現化為 Linux 命名空間隔離程序。Tanzu Kubernetes Grid 將這些容器視為 Kubernetes 網繭的一部分來執行。許多 Tanzu Kubernetes Grid 元件也封裝為容器映像,並設定為當作網繭執行 (有時當作 Kubernetes DaemonSet 或靜態網繭)。實作以下最佳做法以保護 Tanzu Kubernetes Grid 元件的容器:

  • push 到暫存容器登錄期間,使用常見漏洞與披露 (CVE) 的弱點掃描程式來掃描所有容器映像。

  • 按照最低權限原則,限定 Tanzu Kubernetes Grid 發行團隊才有對外容器登錄的 push 存取權。

  • 使用集中 (LDAP) 受管理服務或機器人帳戶,在發行準則和適當的測試完成後,自動將容器映像從暫存環境推送 (push) 到生產環境。

  • 執行內部影響評估,記錄容器映像中任何未修正的嚴重弱點。

  • 修正具有重大產品影響 [1][2] 的弱點,而無需等待下一個次要版本。

  • 定期將 Tanzu Kubernetes Grid 元件更新為較新的基礎映像,以獲得新發現弱點的修正。

  • 所有 Tanzu Kubernetes Grid 元件盡可能優先採用最小映像,並盡可能減少散佈基礎映像,以縮小所有映像的修補規模。

通常,若要安全地建置、執行和取用容器映像,以下資源是很有用的指南:

作業系統更新和節點映像版本

VMware 在 Tanzu Kubernetes 版本 (TKr) 中封裝版本化基礎機器作業系統映像,以及相容版本的 Kubernetes 和支援元件。然後,Tanzu Kubernetes Grid 使用這些封裝的作業系統、Kubernetes 和元件版本,來建立叢集和控制平面節點。如需詳細資訊,請參閱 Tanzu Kubernetes 版本和自訂節點映像

每個已發佈的 TKr 使用其封裝的作業系統版本最新穩定和公開的更新,其中包含建置映像當日所有最新的 CVE 和 USN 修正。VMware 隨 Tanzu Kubernetes Grid 的每個版本 (可能更頻繁) 重建這些節點映像 (vSphere OVA、AWS AMI 和 Azure 虛擬機器映像)。映像檔由 VMware 簽署,檔案名稱包含唯一雜湊碼識別碼。

在報告重大或高優先順序 CVE 時,VMware 會協作修正,並在發佈修正時,重建所有受影響的節點映像和容器基礎映像以納入更新。

啟用 FIPS 的版本

您可以安裝並執行啟用 FIPS 的 Tanzu Kubernetes Grid v2.1.0 和 v2.1.1 版本,其中,核心元件使用啟用 FIPS 標準的程式庫 (基於 BoringCrypto/Boring SSL 模組) 所提供的密碼編譯基元。這些核心元件包括 Kubernetes、Containerd 和 CRICNI 外掛程式CoreDNSetcd 的元件。

有關如何安裝啟用 FIPS 的 Tanzu Kubernetes Grid v2.1 的資訊,請參見 TKG v2.1 說明文件中的啟用 FIPS 的版本

叢集

Kubernetes 叢集的組成包括多個充當叢集控制平面的元件,還有一組支援元件和工作節點來實際協助執行已部署的工作負載。Tanzu Kubernetes Grid 設定中有兩種類型的叢集:管理叢集和工作負載叢集。Tanzu Kubernetes Grid 管理叢集託管用於管理工作負載叢集的所有 Tanzu Kubernetes Grid 元件。然後,Tanzu Kubernetes Grid 管理員啟動的工作負載叢集用來實際執行容器化應用程式。叢集安全性是 Tanzu Kubernetes Grid 佈建叢集上執行應用程式的 Tanzu Kubernetes Grid 叢集管理員、開發人員及操作員的共同責任。本節列舉 Tanzu Kubernetes Grid 預設隨附的元件,有助於為管理叢集和工作負載叢集實作安全最佳做法。

身分識別和存取管理

Tanzu Kubernetes Grid 具有一個 Pinniped 套件,可以安全存取 Kubernetes 叢集,如身分識別和存取管理中所述。

Tanzu Kubernetes Grid 操作員仍負責透過內建的角色型存取控制,授與 Kubernetes 的其他使用者存取叢集資源。在 Tanzu Kubernetes Grid 佈建叢集中管理身分識別的建議最佳做法如下:

  • 遵循最低權限原則來限制對叢集資源的存取權。

  • 將管理叢集的存取權限於一組適當的使用者。例如,只提供存取權給負責管理基礎結構和雲端資源的使用者,而不提供給應用程式開發人員。這尤其重要,因為存取管理叢集本質上就允許存取所有工作負載叢集。

  • 將工作負載叢集的叢集管理員存取權限於一組適當的使用者。例如,組織中負責管理基礎結構和平台資源的使用者,而不是應用程式開發人員。

  • 透過 Pinniped,連線到集中式身分識別提供者,以管理允許存取叢集資源的使用者身分識別,而不依賴管理員產生的 kubeconfig 檔案。

多承租人

Tanzu Kubernetes Grid 的核心優勢之一是能夠透過單一管理平面,管理多個叢集的完整生命週期。這很重要,因為從多承租人的角度來看,不受信任的工作負載在各自的 Kubernetes 叢集中執行時,隔離程度最高。這些是 Tanzu Kubernetes Grid 中設定為支援多承租人工作負載的一些預設值:

  • 叢集之間不共用節點。

  • 節點設定為僅託管容器工作負載。

  • 管理平面在自己的專用叢集中執行,以將與工作負載叢集相關的問題區分開來。

  • Kubernetes 管理元件 (例如 api-serverschedulercontroller-manager 等) 在專用節點上執行。此外,請考慮套用稽核規則,以偵測是否有任何工作負載網繭部署到控制平面節點。

  • 透過節點污點和相似性規則停用了在管理元件 (如上所述) 的專用節點上排程應用程式網繭。

若要提高 AWS 多承租人環境的安全性,請將工作負載叢集部署到不同於用來部署管理叢集的 AWS 帳戶。若要跨多個 AWS 帳戶部署工作負載叢集,請參閱不同 AWS 帳戶上的叢集

如需部署多承租人環境時設計考量的其他詳細資訊,請參閱工作負載租用

工作負載隔離

每個客戶都有不同的工作負載隔離需求。因此,為了在可接受的風險承受力下合理地將工作負載彼此隔離,需要更努力符合共同責任模型。這包括將需要以較高權限執行的容器數限於少數命名空間,以及在執行階段、網繭和節點層級實作深度防禦機制,例如 AppArmor 和 SELinux。在 Tanzu Kubernetes Grid 1.6 及更新版本中,依預設,會在 Ubuntu 20.04 映像中啟用 AppArmor。

這些組態可以透過 Pod 安全性許可控制器在 Pod 上集中實施。

對於進階使用案例和自訂原則管理,以下資源通常是很好的起點:OPA許可控制網繭安全性標準

保護服務間通訊

微服務架構的一個基本特徵是建置只執行一項操作的服務。這樣可以將問題區分開來,從而提高團隊的效率。但是,這也會增加與多個不同微服務進行通訊的需求,這些微服務通常在自己的網繭內的同一叢集中執行。因此,在執行階段保護這些通訊時應該考慮以下最佳做法:

  • 最低權限網路原則:Antrea 是 Tanzu Kubernetes Grid 中啟用的預設 CNI 外掛程式。若要進一步瞭解如何使用 Antrea 實作可根據風險狀態套用的網路原則,請參閱 Antrea 的官方說明文件。若要使用另外選擇的 CNI 外掛程式,請遵循此指南進行操作:網繭和容器網路

  • 預設為相互 TLS:由 Tanzu Kubernetes Grid 的客戶負責實作。這可以實作為應用程式資訊清單的一部分,或使用服務網格來實作,讓 Sidecar 容器處理應用程式容器的 TLS 通訊。

  • 保護密碼:在 Kubernetes 叢集中管理密碼時,有幾個不同選項可供選擇。如需選項的快速概要,請參閱密碼管理

稽核、記錄和監控

若要確保觀察和拒絕叢集資源,包括應用程式網繭,請務必對 Tanzu Kubernetes Grid 佈建叢集啟用稽核和監控。Tanzu Kubernetes Grid 隨附一組延伸模組,可讓管理員在本機啟用此功能。以下指南深入說明這一點:

  1. API 伺服器和系統稽核記錄:如何啟用 API 伺服器稽核記錄和系統層級 (節點) 稽核,以防止拒絕使用叢集。Tanzu Kubernetes Grid 包含 API 伺服器稽核的預設原則。建議為節點層級稽核精靈設定適當的原則,以確保可偵測到容器執行階段二進位檔和組態的竄改。

  2. 使用 Fluent Bit 轉送記錄:如何集中收集記錄,以防止因為在本機竄改記錄而無法拒絕。

  3. 透過 Prometheus 和 Grafana 進行監控:如何觀察叢集和系統度量以進行警示和視覺化,以偵測因為拒絕服務攻擊而導致資源耗用量突然激增。

根據所述的相關威脅,以上任何或所有控制可以套用至 Tanzu Kubernetes Grid 叢集。

雲端提供者

對於 Tanzu Kubernetes Grid 佈建的所有 Kubernetes 叢集,無論是內部部署 (例如 vSphere) 還是公有雲 (例如 AWS、Azure 或 Google Cloud) 部署,雲端提供者都充當基礎資源。保護基礎結構通常是 Tanzu Kubernetes Grid 客戶和雲端提供者的共同責任。以下一些建議可提高 Tanzu Kubernetes Grid 佈建叢集基礎雲端的安全性:

  • 使用本指南定期輪換或更新雲端認證 (僅限 vSphere):Tanzu 叢集密碼 (如果是自動輪換,請考慮在非生產環境中對其進行測試,以觀察可能造成的任何中斷並做好規劃)。

  • 對雲端認證套用最低特殊權限,如 AWSAzurevSphere 提供者的說明文件中所述。盡可能在單獨區域 (VPC) 和防火牆區域中執行管理叢集和工作負載叢集。這是 Tanzu Kubernetes Grid 佈建叢集的預設設定。

  • SSH 節點存取 (尤其是控制平面節點) 應該限於擔任基礎結構管理員角色的少數使用者。

  • SSH 存取主要作為緊急程序,例如遺失管理叢集認證,最好少用。

  • 確認網際網路上未經驗證的使用者無法存取叢集資源。風險承受力低的客戶應該使用適當的負載平衡器組態來部署叢集,避免向網際網路公開 API 伺服器連接埠。

  • 將 Tanzu Kubernetes Grid 環境 (管理叢集和工作負載叢集) 隔離在專用 VPC 中或防火牆後面,與其他非 Tanzu 雲端工作負載分開,以限制橫向移動並在叢集遭入侵時縮小受攻擊面範圍。

  • 套用、測試和驗證災難復原方案,以支援跨叢集的備援和多地區可用性。

  • 實作計劃,在資料損毀、勒索軟體攻擊或導致實體硬體損壞的自然災害下,得以從資料遺失中復原。

  • 考慮使用叢集資源的原生備份和還原,並搭配 Velero 協助災難復原規劃和資料遺失復原方案。

除了任何雲端提供者的安全性一般指導,還提供這些建議。有關雲端安全性的一般指導,請參閱相關雲端提供者的官方安全說明文件。

總之,本文概述了適用於 Tanzu Kubernetes Grid 的目前最先進和建議的安全性控制。我們致力於隨著每個版本推出本質上更安全的 Tanzu Kubernetes Grid,並謹記為開發人員提供順暢的開發體驗。

如對本文有所意見反應,或有任何關於安全性的功能要求,請連絡您的 VMware 代表。

參考

上游社群推動的資源

以下是上游 (CNCF/Kubernetes) 社群推動的一些以安全性為主的資源:

第三方標準和準則

以下是從政府和標準機構發佈的文件清單,未按特定優先順序排列:

check-circle-line exclamation-circle-line close-line
Scroll to top icon