什麼是 Kubernetes 安全性?
Kubernetes 安全性是指用於保護 Kubernetes 叢集、工作負載和底層基礎架構的程序、工具和組態。它包括保護容器、應用程式開發介面、節點、網路和控制平面,以確保應用程式在雲端-原生環境中安全執行。
Kubernetes 是協調容器化應用程式的主要平台,使其成為雲端-原生應用程式現代軟體開發的重要元件。 然而,平台的廣泛使用使其成為網路攻擊的目標。
Kubernetes 安全的重要性
Kubernetes 作為在公共和私有雲端環境中協調容器化應用程式的主要平台,已成為網路罪犯的主要目標。 Kubernetes 是現代開發運營工作流程的核心,可讓團隊自動化和擴充應用程式 部署,而無需擔心底層基礎架構或管理資源的複雜性。
但是,Kubernetes' 複雜性也意味著很容易引入和忽略可能暴露關鍵業務應用程式的脆弱性或錯誤配置。 如果 Kubernetes 未妥善保護,攻擊者可能會危及關鍵工作負載、外洩敏感資料,甚至導致重要服務癱瘓。
因此,組織需要能夠保護平台及其基本元件的 Kubernetes 安全實務:
- 叢集: 包含所有 Kubernetes 元件的總體環境。它由管理集群的控制平面和實際執行應用程式的工作節點組成。
- Nodes: 執行容器化工作負載的虛擬或實體機器。每個節點都包含與控制平面通訊的 kubelet、處理網路規則的 kube-proxy 以及容器運行時。
- Pods: 節點執行打包到 Pod 中的工作負載,Pod 是 Kubernetes 中最小的可部署單元,它封裝了一個或多個共用儲存、網路命名空間和組態的容器。
- 控制平面元件: 管理群集的狀態和運作。其主要元件包括應用程式開發介面伺服器,以及將 Pod 分派到節點的排程器。
Kubernetes 安全性也稱為 k8s 安全性,包含廣泛的安全措施,旨在保護這些元件。為此,組織必須採取主動、多層次的安全策略,持續監控Kubernetes 威脅、減緩攻擊,並確保合規符合法規標準。 隨著 Kubernetes 成為大多數雲端基礎架構的基礎,確保其安全性是企業連續性與成功的必要條件。
Kubernetes 的最大威脅
要保護 Kubernetes 的安全,就必須瞭解可能危害平台完整性與可用性的威脅。以下是一些針對 Kubernetes 最常見且最危險的安全威脅:
容器 脆弱性
容器的脆弱性可能來自容器映像中的缺陷、過時的軟體函式庫或不安全的容器執行時。 有安全漏洞的容器影像可能會為攻擊者創造一個直接入口,讓應用程式暴露在未經授權的存取和惡意軟體之下。這些攻擊會造成資料外洩和中斷,導致財務後果、聲譽受損和部署延遲。
未經授權的存取和權限升級
在Kubernetes 中,使用者和服務透過角色存取控制 (RBAC) 授予存取權,但配置不佳的存取控制或過於允許的角色會造成脆弱性,並增加攻擊面。 攻擊者可能會透過竊取的憑證、薄弱的驗證機制或錯誤設定的系統,取得未經授權的群集存取權。一旦進入,他們就可以嘗試提升權限,獲得更高層級的存取或管理控制。這可能會導致各種後果,從竊取敏 感資料到在群集上執行程式碼。
Insecure 應用程式開發介面
Kubernetes 它非常依賴應用程式開發介面來進行元件間的通訊。 不安全的應用程式開發介面可為攻擊者提供切入點,讓他們與Kubernetes 控制平面互動、操控工作負載、注入惡意指令、未經授權存取敏感資料,或發動拒絕服務攻擊。
群集配置錯誤
錯誤設定的網路政策或未以最佳安全設定部署群集,都會讓 Kubernetes 平台面臨不必要的威脅。攻擊者可以瞄準並運用錯誤配置來取得未經授權的存取並擾亂作業。發生錯誤設定的常見方式是以預設設定部署群集,而非定義可限制存取並降低 Kubernetes 安全風險的網路政策。正確設定新的群集、執行安全的網路政策,以及執行定期稽核以快速修正任何遺漏的錯誤設定,都是非常重要的。
拒絕服務 (DoS) 攻擊
拒絕服務 (DoS) 攻擊的目標是集群的可用性,方法是壓倒其資源或服務,使合法使用者無法使用這些資源或服務。在Kubernetes 中,這可能會造成應用程式開發介面伺服器或 Pods 流量過大,導致它們無法回應或當機。
應用程式生命週期各階段的 Kubernetes 安全性
為了確保穩健的 k8s 安全性,在應用程式生命週期的每個階段解決安全問題至關重要。安全性不只是部署後的考量;它需要整合到開發流程的每個階段。
以下,我們將分別說明每個階段的基本安全措施:
#1.發展階段
開發與設計階段是 Kubernetes 安全的第一道防線。在這個階段,開發人員需要專注於建立安全的應用程式和架構,以抵擋潛在的攻擊。這包括保護開發環境的完整性、從一開始就考量安全性來設計應用程式,以及實施安全的編碼實務。
需要考慮的主要安全措施包括
- 採用零信任架構來驗證每個存取請求。
- 開發程式碼檢閱程序,並確保應用程式碼不含弱性。
- 強制執行安全的機密管理流程,以適當處理敏感資料 (密碼、應用程式開發介面金鑰、OAuth 令牌等)。
#2.分發階段
在散佈階段,您必須檢閱應用程式的供應鏈,確保影像和其他元件是安全且最新的,沒有已知的弱性。
To achieve this, you should:
- 掃描所有容器影像以尋找弱性。
- 限制對容器影像的存取,以防止未經授權的存取和篡改。
- 更新所有相依性,並開發修補程式管理流程,以盡快取得新的更新。
#3.部署階段
部署階段是將應用程式導入 Kubernetes 叢集的階段。要在此階段確保安全性,就必須安全地設定Kubernetes 環境,並管理部署程序,以盡量降低暴露弱性的風險。
需要考慮的安全部署做法包括
- 限制應用程式部署至特定使用者和環境。
- 掃描容器影像以驗證加密身份,以檢查簽章是否有效、是否來自可信賴的發佈者,以及工件是否未被篡改。
- 將應用程式和群集部署到不同的命名空間。
#4.運行階段
Kubernetes 運行資安保障 專注於運作階段,也就是應用程式在集群內執行的階段。運行階段需要持續監控和事件回應能力,以限制安全事件的影響,並持續更新以維持環境安全。
它可以分為三個主要區域:
- 存取: 透過強大的存取控制、驗證程序和加密所有應用程式開發介面,保護Kubernetes 應用程式開發介面。
- 計算: 選擇能提供高度安全性的容器執行時間,並在隔離應用程式與在同一主機上執行之間找到平衡。
- 儲存: 加密群集和應用程式開發介面物件,驗證群集和儲存設備之間的連線,並利用備份以便在需要時還原。
Kubernetes 安全的 4C
若要有效保護 Kubernetes 免受威脅,請從 4C 模型的角度來處理安全性。4Cs 模型為程式碼、容器、群集和雲端安全性,是解決 Kubernetes 架構內安全性問題的路線圖。
程式碼安全
程式碼是指容器執行的應用程式。在Kubernetes 環境中,程式碼帶來了顯著的攻擊面,這不僅來自於無意間導入錯誤所造成的脆弱性,也來自於可能易受攻擊的第三方函式庫。
為了確保在 Kubernetes 平台上執行的程式碼安全,首先要以基本的網路安全和存取控制作為第一道防線,防止未經授權存取程式碼。實施安全編碼實務、使用專用工具執行定期掃描與測試,並遵守OWASP編碼準則。
容器安全性
容器 包含映像,而映像本身則由基本映像、作業系統、容器組態、相依性,以及執行應用程式碼所需的執行時間所組成。
在 Pod 中執行的容器必須使用可信賴的基本映像和執行環境,而每個映像和環境都可能是惡意行為者的目標。驗證原始映像儲存庫是否安全、縮小程式碼基礎以限制使用中的第三方函式庫數量、掃描容器映像以檢查是否存在弱性,以及使用存取控制和網路政策來限制 Pod 之間的通訊,以確保 Pod 的安全。
叢集安全
Kubernetes 架構組織為群集。Kubernetes 群集 由 pod 組成 ,每個 pod 包含一個或多個在相同區域網路運作的容器。群集安全性的設計取決於存取政策和安全性配置的仔細設計。
叢集安全涉及保護容器和在其中執行的應用程式、控制平面 (應用程式開發介面、排程器、資料儲存器和控制器) 以及叢集執行所在的更廣泛網路。
雲端資安
雲端層是執行 Kubernetes 的實體資料中心或雲端 基礎架構 ,通常是 基礎架構即程式碼(IaC) 平台或受管理的 Kubernetes 服務。
雲端供應商提供實施適當存取控制的指引和安全最佳實務。透過對資源實施最少權限程序、掃瞄雲端 脆弱性或錯誤配置,以及存取控制以限制哪些使用者可以與Kubernetes 互動,降低雲端基礎架構的風險。
一般而言,管理員可以預期在應用程式生命週期的所有階段中實施安全措施:從最初的編碼與測試、生產部署,到群集中的持續作業。
Kubernetes 安全最佳實務
實施Kubernetes 最佳安全實務,對於降低容器脆弱性、未授權存取、不安全應 用程式開發介面、錯誤配置、DoS 攻擊及其他威脅所造成的風險,至關重要。
以下列出可降低這些風險的關鍵最佳實作,有助於形成安全 Kubernetes 環境的基礎。
- 強化驗證及 RBAC 政策: 未經授權的存取和權限升級是 Kubernetes 最嚴重的威脅之一。實施嚴格的 RBAC 規則,強制執行最少權限的權限,並使用 多重身份驗證 以加強使用者驗證。 這些措施可限制外洩帳戶可能造成的損害,並防止攻擊者在存取群集時提升權限。
- 安全容器映像與執行時間: 若要減緩容器的脆弱性,請使用可信賴的影像、移除不必要的套件,並在部署前掃描所有影像是否有已知的 CVE。 同時,實施影像簽章與驗證,以確保人工影像未被篡改。
- Harden theKubernetes 應用程式開發介面: 不安全的應用程式開發介面是常見的攻擊入口。 為所有應用程式開發介面流量啟用 TLS 加密,透過網路控制限制應用程式開發介面伺服器存取,並追蹤日誌以識別可疑行為。
- 應用網路分割與零信任控制: 網路設定錯誤可能會使群集暴露在未經授權的存取之下。使用網路政策定義哪些 Pod 可以彼此通訊,有效隔離工作負載。此外,採用零信任模式可確保每個連線都經過認證、授權和持續驗證。
- 實施資源配額和自動擴充保障措施: DoS 攻擊會導致群集資源不堪負荷。為 Pod 和命名空間設定資源配額和限制,以防止工作負載消耗過多中央處理器或記憶體。 小心配置自動擴充,讓惡意流量無法耗盡底層基礎架構。
- 持續監控與稽核叢集: 監控對於在運行時偵測異常狀況是非常重要的。使用雲端原生安全解決方案來監控容器行為、偵測惡意活動並執行合規性。定期稽核有助於及早發現錯誤配置,並維持與安全政策的一致性。
Kubernetes 安全的主要原則
以下原則和安全對策有助於確保在 Kubernetes 上執行的容器化應用程式的彈性:
Role-Based Access Control (RBAC)
在 Kubernetes 中,RBAC 控制群集內資源的存取,並定義允許或不允許使用者或群組執行的動作。RBAC 用於隔離團隊存取、限制作業、控制管理員存取,以及管理服務帳戶權限。
角色用於授權存取單一命名空間內的資源,而群集角色的範圍較廣,可定義跨命名空間的存取。很明顯,並非每位使用者都能完全、不受限制地存取所有資源。在評估 Kubernetes 角色和權限時,請參考最小權限原則 (PoLP) 作為一般準則。
使用 RBAC 時,管理員應該傾向選擇特定名稱空間的權限,而非群集範圍的權限,為每個 Kubernetes 物件和名稱空間指定存取控制。僅在特定任務需要時才允許存取,僅此而已。
網路政策執行
容器透過網路與外部服務及彼此溝通。容器化應用程式通常會廣泛使用群集網路。為了更好地瞭解應用程式如何與其他系統互動,以及識別異常通訊,請針對作用中的網路流量實施監控,並將其與 Kubernetes 網路政策所允許的流量進行比較。
為了確保網路連線的安全性,組織必須強制執行網路政策,將通訊限制在必要的服務範圍內,偏好工作負載正常運作所需的最低限度。此建議適用於群集的入站和出站流量,以及群集中的流量。
使用虛擬私人網路路由 (VPN) 和 TLS 加密網路路由流量。 為了強化容器安全性,請在環境中部署防火牆,以增加另一個防護層,並實施網路分割和資源隔離,以減少攻擊面和遏制漏洞。
執行 Pod 安全准入 (PSA)
PSA 是 Pod 安全政策 (PSP) 的繼承者,可在 Kubernetes 內執行安全政策,稱為 Pod 安全標準 (PSS)。作為一項內建功能,PSA 不需要第三方工具,透過定義並遵守一套標準來簡化安全性。它對不安全的配置施加限制,減少攻擊面。
Pod Security Admission 強制執行的 PSS 定義了工作負載的三個安全設定檔。特權設定檔不執行任何限制,除非絕對必要,否則不應使用。Baseline設定檔為應用程式提供最低限度的安全性,而Restricted則強制執行最佳安全性實務。
PSA 會驗證 Pod 是否根據這些設定檔進行設定,強制執行合規。 一般而言,管理員應該為 Pod 設定 Baseline 或 Restricted 政策,以確保叢集的安全性。
保護控制平面
Kubernetes 控制平面負責控制群集。它管理群集的狀態、健康狀況和組態資料,確保容器在運行時擁有所有必要的資源。由於其重要性和複雜性,控制平面被視為較難設定,因此成為攻擊者的主要目標。
控制平面由下列元件組成:
- etcd:etcd 鍵值資料庫儲存組態資訊和群集狀態資料。確保已啟用 etcd 加密,除非絕對必要,否則通訊只限於應用程式開發介面伺服器,且用戶端使用基於憑證的驗證。
- kube-controller-manager:Controller Manager 守护进程运行群集并控制其功能。確保 Controller Manager 的安全包括限制網路存取、為所有應 用程式開發介面流量實施 TLS、限制群集上的資源使用量,以及盡量減少容器使用的權限。
- kube-scheduler: Scheduler 管理並提供新的容器。安全步驟包括停用其剖析功能,以減少其攻擊面,並驗證 Scheduler 的 IP 位址沒有綁定到不安全的 IP。
- kube-apiserver:應用程式開發介面伺服器作為前端,處理內部與外部的要求。 簡而言之,透過限制外部 IP 的存取、強制執行強大的驗證機制,以及應用 TLS 加密來保護應用程式開發介面伺服器。 詳情請參閱下面的「確保Kubernetes 應用程式開發介面」一節。
保護Kubernetes 應用程式開發介面伺服器
外部使用者透過應用程式開發介面存取Kubernetes 控制平面,因此確保其安全性並限制未經授權使用者的存取極為重要。
要保護Kubernetes 應用程式開發介面的安全,首先要管制以伺服器為目標的要求,以確保未經授權的應用程式開發介面要求無法成功存取群集。 考慮使用第三方 驗證供 應商,以啟用 多重身份驗證(MFA)。使用 OAuth 2.0 連接器或 OpenID Connect (OIDC) 提供者來確保叢集存取的安全性。
限制存取公共網路,並針對透過應用程式開發介面伺服器傳輸的資料,實施傳輸層安全性 (TLS) 加密。 此外,請確認Kubernetes 資料存放區 etcd (直接與應用程式開發介面伺服器通訊) 本身有適當的安全性。
映像安全掃描
影像是建立群組和 pod 的基礎。這些映像必須定期進行安全性掃描,以確保從映像建立的容器不會繼承映像的安全性缺陷。
影像掃描工具可用來識別建立容器所依據的基本影像中的弱性,以及容器影像中包含的函式庫的應 用程式。 這是透過掃描基本映像和所有套件,以對照弱性資料庫來完成的。
確保影像登錄的存取受到限制,以防止篡改,並在持續整合/持續部署 (CI/CD)管道階段中掃描所有影像。在 CI/CD 管道中加入掃描功能有助於確保容器配置正確、已更新且不含惡意軟體。
加密秘密和通訊
秘密是一種敏感資訊。在 Kubernetes 中,最常見的秘密通常是密碼、OAuth 令牌、SSH 金鑰或其他憑證。在 YAML 配置檔案、容器影像或容器上的文件中,以明文儲存的秘密代表著嚴重的風險,並會危及整個群集的安全性。
Kubernetes 提供內建物件 Kubernetes Secret 來安全地儲存這些資料。使用 Secret 物件,管理員可以將機密資訊與應用程式碼分開。
由於 Kubernetes Secrets 會處理特權資訊,因此經常成為駭客的攻擊目標。機密必須在靜止時加密,而且只有需要的元件和使用者才能存取這些機密。實施機密掃描作法或系統,以辨識和補救意外的機密暴露。
限制節點暴露
Kubernetes 節點有兩種主要類型:主節點和工作節點。Master 節點執行基本的群集服務,包括應用程式開發介面伺服器、排程器、控制器和 etcd 資料存放區。 工作節點在群集中執行應用程式。
Kubernetes 集群由執行 Linux 或 Windows 作業系統 (OS) 的節點組成。許多一般適用於加固這些作業系統的加固技術,在 Kubernetes 節點的情況下也是有效的:
- 只安裝群集正常運作所需的應用程式和程式庫,僅此而已。
- 限制對管理/root 帳戶的存取,僅在必要時使用。
- 部署即時監控工具以偵測正在發生的安全漏洞。
- Linux 節點可以使用 SELinux 或 AppArmor 等工具加固。
此外,網際網路安全中心 (Center for Internet Security, CIS) 也為主節點和工作節點提供了一套安全基準。使用 Kube-bench 等工具,管理員可以掃描其叢集,並根據 CIS 基準進行評估。這些掃描通常會提供建議,以修復不符合 CIS 最佳實務的配置。
啟用稽核記錄
稽核記錄對維護作業和安全性都很重要。這些日誌可提供群集活動的可行洞察力,並可迅速偵測異常活動。雖然 Kubernetes 內建了稽核記錄功能,但預設並未啟用。啟動時,所有動作都會記錄在群組內。
群集管理員必須設定稽核政策,定義要記錄的事件,以及儲存、管理和分析這些記錄的外部工具。這可確保快速偵測到安全問題,同時提供事件回應 (IR) 團隊所需的資訊,以調查任何發生的入侵事件。
以最低權限執行工作負載
Kubernetes 工作負載可能很複雜,而且難以充分保護。工作負載是動態的,會在內部部署和雲端環境之間轉換,每個環境都有自己的網路安全控制。此外,自動化 CI/CD 流程會經常在群集節點上部署新服務或新版本,因而增加了複雜性。
一般而言,管理員不應信任工作負載。套用細粒度的安全政策,以限制工作負載與第三方應用程式之間的通訊。這可降低威脅橫向移動的可能性,並有助於維持合規性。
網路安全定義應該內建到工作負載中,以確保它們可以在Kubernetes 發行版本和數據中心之間攜帶。 這樣,無論工作負載在哪裡執行,都會帶著安全定義。
最後,設定周邊安全工具,持續監控工作負載使用的 IP 位址和連接埠,以便即時識別可疑行為。
使用 Check Point 保護 Kubernetes
By following best practices, leveraging the right tools, and fostering a culture of security, organizations can minimize Kubernetes security risks and protect their cloud-native applications. Check Point offers the right tools through its comprehensive cloud security platform, Check Point.
Onboarding Kubernetes clusters into Check Point provides a range of workload protections, including:
- 跨雲端原生應用程式的零信任存取。
- 能夠定義並自動部署安全政策,降低錯誤配置的風險。
- 貨櫃影像掃描以辨識脆弱性。
- 即時事件偵測,以減輕 Kubernetes 攻擊的影響。
Check Point security capabilities are now also available with the Wiz CNAPP platform for unified cloud security. This combined solution leverages Wiz to identify and mitigate risks, and Check Point to secure network and application-layer traffic.
Upgrade your Kubernetes security and learn more about Check Point as well as our collaboration with Wiz by 今天預約示範。
