歡迎光臨
每天分享高質量文章

Kubernetes基礎設施的安全

 

在我們開始保護Kubernetes平臺安全的任務之前,《Securing Kubernetes for Cloud Native Applications》系列的第一篇文章中,討論了為什麼很難保護Kubernetes,以及需要我們註意的各個層的概述。
堆棧中的第一層是基礎架構層。我們可以通過許多不同的方式對此進行定義,但出於討論的目的,它是基於Kubernetes部署的基礎架構組件的總和。 它是用於計算,儲存和網絡目的的物理或抽象硬體層,以及這些資源所處的環境。它還包括操作系統(很可能是Linux)和容器運行時環境(如Docker)。
我們將要討論的大部分內容同樣適用於支持Kubernetes以外的系統的基礎設施組件,但我們將特別關註那些可以增強Kubernetes安全性的因素。

 

機器、資料中心和公共雲

 

採用雲平臺作為工作負載部署的工具,無論是公共,私有還是混合組合,都在繼續快速發展。雖然對專業裸機服務器配置的需求尚未完全消失,但支撐當今大部分計算資源的基礎設施是虛擬機。但是,如果我們部署的機器是虛擬的(基於雲的或其他)或物理的,物體將駐留在由我們自己的組織或選定的第三方托管的資料中心,例如公共雲提供商,這並不重要。
資料中心很複雜,在考慮安全性方面需要考慮很多。它是托管整個組織的資料處理要求的一般資源,甚至是來自不同行業和地區的眾多獨立組織的共同租用工作負載。出於這個原因,在這個級別上對基礎設施的許多不同方面應用安全性,往往是一個成熟的公司或供應商的責任。它將根據諸如國家或國際法規(HIPAA,GDPR),行業合規要求(PCI DSS)等因素進行管理,並且通常會獲得認證標準認證(ISO 27001,FIPS)。
在公共雲環境的情況下,供應商可以並且將在基礎設施層提供必要的遵守法規和合規標準,但在某些時候,它會下沉到服務消費者(您和我),以進一步構建這個安全的基礎。 這是一項共同的責任。這引出了一個問題,作為一個公共雲服務消費者,“我應該保護什麼,我該怎麼做呢?”有很多人對這個話題有很多不同的看法,但是真正可靠的物體是互聯網安全(CIS),一個致力於保護公共和私人物體免受惡意網絡活動威脅的非營利組織。

 

CIS基準測試

 

CIS提供了一系列工具,技術和信息,用於對抗我們所依賴的系統和資料的潛在威脅。例如,CIS基準是安全專業人員和主題專家共同編製的針對每個平臺安全的最佳實踐配置指南。為了鼓勵越來越多的組織開始實施轉型計劃,其中包括遷移到公共和/或混合雲基礎架構,CIS開展了對應的業務,為主要的公共雲提供商提供基準。 CIS Amazon Web Services Foundations Benchmark[1]就是一個例子,其他主要公共雲提供商也有類似的基準。
這些基準測試提供基礎安全配置建議,包括身份和訪問管理(IAM),入口和出口,以及日誌和監視最佳實踐等。實施這些基準建議是一個很好的開始,但它不應該是旅程的終點。每個公共雲提供商都有自己的一套詳細的推薦最佳實踐,並且可以從相關領域中的其他專家聲音中獲得很多好處,例如雲安全聯盟。
讓我們花一點時間來看一下典型的基於雲的場景,需要從安全角度進行一些仔細的規劃。

 

雲場景:專用網 vs 公有網

 

我們如何通過限制訪問來平衡保持Kubernetes集群安全的需求,同時通過Internet以及我們自己的組織內部外部客戶端實現所需的訪問?
  • 對托管Kubernetes的計算機使用專用網絡:確保代表集群節點的主機沒有公共IP地址。 移除與任何主機直接連接的能力,顯著減少了可被用來攻擊的選項。 例如,這種簡單的預防措施提供了顯而易見的好處,可以防止可能導致利用加密貨幣挖礦的種種妥協。

  • 使用堡壘主機訪問專用網絡:應通過適當配置的堡壘主機提供管理集群所需的對主機專用網絡的外部訪問。 Kubernetes API通常也會暴露在堡壘主機後面的專用網絡中。 當然,它也可能公開發佈,但建議至少通過組織內部網絡和/或其VPN服務器的白名單IP地址來限制訪問。

  • 將VPC peering與內部負載均衡/DNS一起使用 – 其中在具有專用網絡的Kubernetes集群中運行的工作負載需要由其他私有的集群外客戶端訪問,工作負載可以通過呼叫內部負載均衡的服務公開。 例如,要在AWS環境中創建內部負載均衡,該服務需要以下註釋:service.beta.kubernetes.io/aws-load-balancer-internal:0.0.0.0/0。 如果客戶端駐留在另一個VPC中,則需要VPC peering。

  • 使用具有Ingress的外部負載均衡 – 工作負載通常設計為由來自Internet的匿名外部客戶端使用;當部署到專用網絡時,如何允許流量在集群中查找工作負載?我們可以通過幾種不同的方式實現這一標的,具體取決於手頭的要求。第一種選擇是使用Kubernetes服務物件公開工作負載,這將導致在公有子網上創建外部雲負載平衡器服務(例如,AWS ELB)。這種方法可能非常昂貴,因為每個公開的服務都會呼叫專用的負載均衡,但可能是非HTTP服務的首選解決方案。對於基於HTTP的服務,更具成本效益的方法是將ingress controller部署到集群,前面是Kubernetes服務物件,後者又創建了負載均衡器。在進一步路由到匹配規則中的服務端點之前,尋址到負載均衡的DNS名稱的流量被路由到ingress controller端點,該端點評估與任何定義的Ingress物件相關聯的規則。

此方案表明需要仔細考慮如何保證基礎架構配置的安全,同時提供向其標的受眾提供服務所需的功能。 這不是一個特殊的場景,還有其他情況需要類似的處理。

 

鎖定標的:操作系統和容器運行時

 

假設我們已經調查並應用了必要的安全配置以使機器級基礎架構及其環境安全,那麼下一個任務是鎖定每台機器的主機操作系統(OS),以及負責管理容器生命周期的容器運行時。 
Linux OS
雖然可以將Microsoft Windows Server作為Kubernetes工作節點的操作系統運行,但控制平面和工作節點通常會運行Linux操作系統的變體。可能有許多因素決定使用Linux發行版(商業、內部技能、操作系統成熟度),但如果可能的話,請使用專為運行容器而設計的最小發行版。比如CoreOS Container Linux,Ubuntu Core和Atomic Host變體。這些操作系統已經被剝離到最低限度以便於大規模地運行容器,因此具有顯著減小的攻擊面。
同樣,CIS為不同風格的Linux提供了許多不同的基準,為保護操作系統提供了最佳實踐建議。這些基準涵蓋了可能被認為是Linux的主流發行版,例如RHEL,Ubuntu,SLES,Oracle Linux和Debian。如果未涵蓋您的首選發行版,則存在獨立發行版的CIS基準測試,並且通常存在特定發行版的準則,例如CoreOS容器Linux強化指南[2]。
Docker Engine
基礎結構中的最後一個組件是容器運行時。在Kubernetes的早期,沒有選擇;容器運行時必然是Docker引擎。然而,隨著Kubernetes容器運行時接口的出現,可以刪除Docker引擎依賴性,轉而使用CRI-O,containerd或Frakti等運行時。事實上,從Kubernetes 1.12開始,這是一個alpha功能(運行時),允許在集群中並行運行多個容器運行時。無論部署哪個容器運行時,它們都需要被保護。
儘管選擇多種多樣,但Docker引擎仍然是Kubernetes的預設容器運行時(儘管在不久的將來可能會改變為containerd),我們將在此考慮其安全性含義。它是使用大量可配置的安全設置構建的,其中一些預設情況下是打開的,但可以在每個容器的基礎上繞過它們。其中一個例子是在創建時應用於每個容器的Linux內核功能的白名單,這有助於減少正在運行的容器內的可用權限。
CIS再一次為Docker平臺CIS Docker Benchmark保留了基準。它提供了有關配置Docker守護程式以獲得最佳安全性的最佳實踐建議。 甚至還有一個方便的開源工具(腳本),名為Docker Bench for Security,可以針對Docker引擎運行,該引擎評估系統是否符合CIS Docker Benchmark。 可以定期運行該工具以暴露所需配置的任何漂移。
Docker被用作Kubernetes的容器運行時,在考慮和測量Docker引擎的安全配置時,需要註意一些事項。 Kubernetes忽略了Docker守護程式的許多可用功能,而是更喜歡自己的安全控制元件。例如,Docker守護程式配置為使用seccomp配置檔案將可用Linux內核系統呼叫的預設白名單應用於每個創建的容器。除非另有說明,否則Kubernetes將指示Docker從seccomp角度創建Pod容器“unconfined”,使容器可以訪問每個可用的系統呼叫。換句話說,可以在較低的“Docker層”配置的內容可能會在平臺堆棧中的更高級別被撤消。我們將在以後的文章中介紹如何通過安全背景關係緩解這些差異。

 

總結

 

將所有註意力集中在平臺的Kubernetes組件安全配置上可能很誘人。 但正如我們在本文中看到的那樣,較低層的基礎架構組件同樣重要,並且非常危險的是它們往往被被忽略。實際上,提供安全的基礎架構層甚至可以緩解我們可能在集群層本身中引入的問題。例如,保持我們的節點私密性將防止不充分安全的kubelet被用於惡意目的。基礎設施組件應該與Kubernetes組件本身一樣受到關註。
在下一篇文章中,我們將繼續討論安全堆棧中下一層的含義,即Kubernetes集群組件。
相關鏈接:
  1. https://www.cisecurity.org/benchmark/amazon_web_services/

  2. https://coreos.com/os/docs/latest/hardening-guide.html

原文鏈接:https://blog.giantswarm.io/securing-the-base-infrastructure-of-a-kubernetes-cluster/

赞(0)

分享創造快樂