Kubernetes的安全性怎么解?从4个方面为你列出方案清单
導語
Kubernetes中的安全性是一個多維問題,必須從各個不同的角度來解決才算完善,這篇文章將從4個方面為讀者列出安全清單。
正文
Kubernetes,經過更快的采用和社區的更多貢獻,正日益攀登到新的高度。不過,安全性仍然是Kubernetes的重要方面之一,最初使早期采用者望而卻步。與虛擬機相比,許多人懷疑容器和Kubernetes的安全性,隨后注銷了容器。但是人們逐漸和穩定地開始相信容器和Kubernetes現在和物理機和虛擬機一樣安全。
Kubernetes中的安全性是一種實踐,而不僅僅是一項功能。安全是一個多維問題,必須從許多不同的角度來解決。Kubernetes中的安全性無法在一篇文章中涵蓋,但是以下清單涵蓋了應該在整個堆棧中進行審查的主要安全性領域。
安全必須是任何組織的DevOps流程(通常稱為DevSecOps)的一等公民。使用DevSecOps,從一開始就將安全問題作為DevOps管道的一部分嵌入其中。DevSecOps實踐可實現大多數安全問題的自動化,并在開發過程中提供一系列安全檢查。
由空軍首席軟件官Nicolas M. Chaillan牽頭的DevSecOps開放計劃是在組織中采用DevSecOps及其重要性的一個很好的例子。詳細信息已發布在
空軍網站上,以便其他組織深入DevSecOps使用。這些DevSecOps做法可以為組織提供在其Kubernetes基礎架構中嵌入安全保護措施的途徑。
Kubernetes的安全性可以定義為以下4個方面:基礎設施、Kubernetes、容器和應用程序,見下圖所示。
圖1. Kubernetes安全的4個方面
一.保護基礎設施
基礎結構級的安全性通常是最基本的任務,但也是最大的任務。但是,在開發過程中經常會忽略它。在構建應用程序時,請務必牢記基礎架構的安全性,因為它會影響應用程序的架構方式。
基礎結構安全本身具有許多方面:
1.聯網
Kubernetes部署主要是微服務,所有微服務都在彼此對話或與外部應用程序和服務通信。重要的是,僅將網絡流量限制為必需的流量,同時要了解微服務可能是短暫的,并且可以在集群中的節點之間移動。您需要考慮網絡設計的各個方面,以開發安全的網絡。
(1)控制流量的隔離:Kubernetes控制平面流量必須與數據平面流量隔離。這不僅出于安全原因,而且還避免數據流量影響Kubernetes控制平面流量。如果沒有隔離,來自數據平面的流量可能會使來自控制平面的流量蒙上陰影,并導致臨時服務中斷。
(2)隔離存儲流量:類似地,需要將存儲流量與常規數據隔離開來并控制流量,以使基礎結構的存儲服務不會消耗或關閉應用程序網絡,反之亦然。
(3)網絡細分:Kubernetes對用戶隱藏了基礎架構。開發人員在設計網絡時應牢記這一事實以及多租戶。底層網絡基礎結構必須同時支持基于第2層
VLAN的分段和基于第3層VXLAN的分段,以隔離各種租戶或應用程序之間的流量。兩種分割技術都可以根據需要使用。
(4)服務質量:在共享網絡基礎結構中,嘈雜的“鄰居”是一個大問題。重要的是,基礎網絡基礎結構可以保證為每個Pod或租戶指定的服務水平,同時
確保一個Pod的流量不會影響其他Pod。諸如SR-IOV之類的網絡虛擬化技術有助于在共享基礎架構上提供虛擬化隔離。
(5)網絡策略,防火墻和ACL:我們將在后面更詳細地討論應用程序級別的網絡訪問控制,但是網絡應在硬件級別上具有較低級別的訪問控制,并應更好地控制共享環境中的流量。
2.存儲
對于任何組織來說,存儲都是安全性的關鍵部分。黑客通常會尋找保存在應用程序存儲中的機密數據,例如信用卡信息或個人身份信息(PII)。使用Kubernetes的開發人員應考慮以下形式的存儲級安全性實現。
(1)自加密驅動器:存儲安全性的一種基本形式是自加密驅動器。使用這些驅動器,加密就轉移到磁盤本身上,在那里數據在寫入磁盤時得到加密。這樣可以確保如果有人可以物理訪問磁盤驅動器,則他們將無法訪問數據。
(2)卷加密:在共享基礎架構中,Kubernetes CSI管理卷的生命周期。這樣可以將用戶與基礎存儲基礎架構隔離開。卷加密可確保保護各個卷,以防止來自不需要的元素的訪問。
(3)服務質量:在共享存儲基礎結構中,大量I / O應用程序可能會影響其他應用程序的性能。重要的是,基礎存儲基礎架構應具有確保為每個Pod或
租戶提供保證的服務水平的能力。同樣,SR-IOV有助于在PCI級別提供存儲隔離,每個租戶使用單獨的隊列。
3.主機和操作系統(OS)
基礎架構的下一個層次是物理或虛擬主機本身。運營商將希望通過以下方式保護基礎:
(1)加強操作系統:站點可靠性工程師(SRE)應遵循一般安全準則保護主機操作系統,并加強操作系統以避免任何進一步的更改。SRE還應該應用防
火墻,端口阻止和其他標準最佳實踐安全措施。常規安全更新和修補程序在可用后必須立即應用。黑客和入侵者經常利用已知漏洞。
(2)啟用內核安全性:SELinux和AppArmor之類的內核安全性模塊定義了系統上的應用程序,進程和文件的訪問控制。
(3)審核日志記錄:使用Kubernetes的組織應該實施審核日志記錄,不僅可以幫助監視系統,還可以幫助調試和查找安全漏洞的蹤跡。
(4)輪換憑證:用戶憑證必須經常輪換,并且必須遵循嚴格的安全準則,以免被破解或被盜。
(5)鎖定節點:在Kubernetes集群中配置并設置節點后,應刪除操作系統。除了補丁和升級外,無需安裝或配置任何新內容。所有節點都必須鎖定,并且只能由超級管理員訪問。
(6)CIS一致性:CIS(Internet安全中心)提供了一致性測試,以確保已實施所有最佳實踐。查看您的主機設置,并通過一致性測試以確保符合要。
4.主機級訪問管理
進入Kubernetes集群的最薄弱點是節點本身。由于Kubernetes極大地將用戶與基礎節點隔離開來,因此控制對節點的訪問非常重要。
(1)嚴格訪問:組織應謹慎將對節點的root / admin訪問限制為一組非常有限的受信任用戶。
(2)建立鎖定:即使對于非root用戶,理想情況下也應限制對開發人員的直接登錄并將其限制為通過Kubernetes API服務器進行訪問。為了避免對運行在節點上的Kubernetes服務造成任何威脅,應鎖定所有節點。
(3)隔離Kubernetes節點:Kubernetes節點必須位于隔離的網絡上,并且絕對不能直接暴露給公共網絡。如果可能的話,它甚至不應直接暴露于公司網絡。僅當Kubernetes控制和數據流量隔離時才有可能。否則,兩個業務流都流經同一管道,并且對數據平面的開放訪問意味著對控制平面的開放訪問。理想情況下,應該將節點配置為僅接受來自指定端口上主節點的連接(通過網絡訪問控制列表)。
(4)主節點:主節點訪問必須由網絡訪問控制列表控制,僅限于管理集群所需的IP地址集。
二. 保護Kubernetes
在鎖定基礎架構的情況下,確保安全的下一層是Kubernetes安裝本身。在典型的開源Kubernetes安裝中,由于默認情況下它們并未全部打開,因此其中許多需要手動配置。
1.安全etcd
etcd是高度可用的鍵值存儲,用作所有集群數據的Kubernetes的后備存儲。它包含了Kubernetes的所有狀態,秘密和信息,這意味著保護etcd非
常重要。
(1)如前所述,etcd中的節點應該以最小的訪問權限被鎖定。
(2)理想情況下,應加密包含etcd數據的驅動器。
(3)對etcd的訪問必須僅限于母版。
(4)理想情況下,etcd通信應通過TLS。
2.確保對Kubernetes集群的訪問
Kubernetes允許企業使用標準的身份和訪問控制解決方案,但是它們需要與環境集成,并且默認情況下不提供。訪問控制可以細分為以下組件。
(1)身份驗證:用戶必須先經過身份驗證,然后才能訪問Kubernetes API。Kubernetes提供了各種身份驗證模塊-包括客戶端證書,密碼,普通令牌,引導令牌和JWT令牌(用于服務帳戶)。但是,實際的用戶管理和身份驗證不是Kubernetes的一部分。對于生產環境,組織將需要支持這些功能的外部用戶管理和身份驗證插件或Kubernetes平臺。與LDAP,Active Directory或其他身份提供程序解決方案集成非常重要。
圖2. Kubernetes中基于角色的訪問控制
(2)授權:驗證用戶身份(即允許其連接到Kubernetes集群)后,下一步是授權,以確定對所請求資源的訪問權限。Kubernetes支持多種授權模塊,例如基于屬性的訪問控制(ABAC),基于角色的訪問控制(RBAC)和Webhooks。RBAC是最受歡迎的授權插件之一,因為它允許在多租戶環境中對單個Kubernetes資源進行精細控制。
(3)準入控制:準入控制掛鉤允許組織在用戶經過身份驗證并被授權訪問所請求的資源之后,攔截和控制Kubernetes請求。準入控制的最佳示例是資源配額,該配額使組織可以控制資源消耗。還必須通過TLS保護對Kubernetes API服務器的訪問。
3.安全政策
Kubernetes提供了一些可由用戶定義的可配置策略。這些應符合企業慣例,但默認情況下未啟用。
一個吊艙安全策略是一個準入控制插件,確保遵循一定的安全準則時艙體只承認。可以定義的策略包括限制特權Pod的創建,阻止容器作為root用戶運行或限制對某些名稱空間,網絡或卷的使用。網絡策略由容器網絡接口(CNI)插件實現,該插件控制如何允許Pod組與彼此以及其他網絡端點進行通信。設置網絡策略非常重要,因為默認情況下,pod是非隔離的(它們接受來自任何來源的流量)。
Kubernetes為計算資源(CPU和內存)提供服務質量(QoS)保證,以避免鄰居過多或資源匱乏的問題,但它不為I / O(存儲和網絡)提供QoS。Diamanti等超融合平臺增加了對I / O QoS的支持。
4.工作負載隔離和多租戶
在多租戶環境中,每個租戶或租戶組必須具有單獨的名稱空間,以使工作負載和數據彼此隔離。CNI,CSI和身份驗證插件需要支持這些分隔和邊界,以便它們在整個堆棧中保持一致。
三. 保護容器
容器在開發過程中和運行時都需要加以保護。有很多很棒的資源可用于保護容器,包括本文,但這里有一些關鍵要素:
1.容器映像安全
所有正在運行的容器均基于映像文件,該映像文件可以從諸如Docker Hub之類的開放庫中下載,也可以從一個團隊傳遞給另一個團隊。重要的是要知道圖像的來源和內部內容。所有這些舉措都應該成為組織DevOps流程的一部分,以實現自動化并確保安全。
(1)圖像漏洞掃描:必須使用Aqua,Twistlock,Sysdig和Clair等工具對正在構建的容器映像進行掃描以查找已知漏洞。這些工具解析映像中的程序包和依賴項,以查找已知的漏洞。
(2)圖像簽名:組織還應執行嚴格的準入控制政策,僅允許通過公司公證人簽名的圖像。TUF和Notary是用于簽名容器映像和維護容器內容信任系統的有用工具。
(3)限制特權:此外,組織應避免在容器映像中使用root用戶,并防止特權升級。容器內部的用戶必須具有必需的最低級別的操作系統特權,才能實現容器的目標。
2.容器運行時
容器運行時是安裝在操作系統中的程序。今天,大多數環境都使用Docker,而CIS基準可用。Seccomp可用于減少攻擊面,而更新的運行時(如CRI-O)具有附加的內置安全功能。
3.運行容器
Twistlock,Aqua和Sysdig等許多工具還通過監視網絡和系統調用,為運行時漏洞提供連續監視和威脅預防。這些工具還具有攔截和阻止這些不需要的呼叫或通信并執行安全策略的能力。
四. 保護應用程序
最后,在保護了基礎架構,Kubernetes和容器之后,保護應用程序本身仍然很重要。
1.應用程序訪問
(1)用于Kubernetes入口的TLS:將您的應用程序暴露在集群外部的最常見做法是使用入口控制器,例如Envoy或NGINX。所有對入口控制器的外部訪問都必須通過TLS,并且入口控制器與應用程序容器之間的通信也應使用TLS,盡管在某些情況下不需要使用TLS,具體取決于網絡設計和公司安全策略。
(2)加密傳輸中的所有內容:除少數情況外,默認行為應是加密傳輸中的所有內容。即使在公司防火墻后面,也建議對容器之間的網絡流量進行加密。Istio和Linkerd等許多服務網格提供了mTLS選項,以自動加密Kubernetes集群中的流量。
2.通訊
(1)網絡:Istio,Linkerd和Consul等服務網格提供了許多第7層網絡功能,從而可以限制和控制多個租戶之間的流量。
(2)端口:僅在應用程序/容器上公開對于與該應用程序通信絕對必要的端口,這一點很重要。
3.應用強化
CI / CD管道中應內置許多DevOp實踐,以確保應用程序安全并遵循最佳實踐。一些例子是:
(1)定期分析源代碼,以確保其遵循最佳實踐,以避免漏洞和威脅。有許多可用的工具,例如Veracode和Synopsys。
(2)大多數開發人員都依賴第三方應用程序和庫來構建其應用程序和微服務。定期掃描代碼依賴項以查找新漏洞,以確保它們不會威脅到應用程序的安全。
(3)持續測試您的應用程序是否受到常見攻擊實踐的影響,例如SQL注入,DDoS攻擊等。這里有各種動態分析工具可為您提供幫助。
綜上所述
安全始終是組織的頭等大事。但是從傳統上講,安全性是組織中一個獨立的團隊,該組織在獨立于開發過程的孤島中工作。開發人員通常專注于應用程序,并且安全團隊會在開發周期結束時介入其中。但是,由于開發團隊忽略了關鍵的安全策略,因此安全團隊拖延了流程,這可能會使部署脫軌。安全和開發團隊之間的這種不健康的互動不僅導致脆弱的軟件開發,而且還導致許多最新的錯誤以及生產中意外的延遲。
在容器和Kubernetes的新時代,擁有強大的安全實踐自動化非常重要。從一開始就應該將安全性納入開發周期。隨著安全性在DevOps流程中根深蒂固,DevSecOps現在成為焦點。挑戰在于,必須在多個域中手動配置以上清單中概述的許多項目。缺少其中一項可能會使整個應用程序和公司面臨風險。
應用程序安全性仍然是開發人員的責任。但是與基礎設施,平臺和Kubernetes相關的其他安全功能可以通過Diamanti平臺等現代超融合方法解決。Diamanti平臺是Kubernetes的全棧硬件和軟件平臺,它內置了本文中提到的許多安全功能,從而減輕了為組織自己實施這些功能的痛苦。這可以幫助您輕松設置DevSecOps管道,以便您可以專注于應用程序開發。
總結
以上是生活随笔為你收集整理的Kubernetes的安全性怎么解?从4个方面为你列出方案清单的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 程序员过关斩将--为微服务撸一个简约而不
- 下一篇: Magicodes.SwaggerUI
