保護Kubernetes集群的三大要素
譯文隨著基于容器的技術迅速得到采用,組織日益關注Kubernetes集群的安全性。雖然云和企業(yè)發(fā)行版提供了可靠的安全功能,但它們需要根據組織的安全要求進行調整。
本文將介紹保護Kubernetes集群需要考慮的三個基本方面:
- 基于角色的訪問控制(RBA)
- 開放策略代理(OPA)
- 網絡策略
基于角色的訪問控制
假設一家組織有三個應用程序團隊(藍隊、綠隊和紅隊)。由于這些團隊開發(fā)不同的產品,應該授予它們訪問Kubernetes集群的不同權限。比如說,綠隊和紅隊不應查看、訪問或刪除藍隊部署的集群。
RBAC是一種控制用戶可以訪問哪些Kubernetes資源的方法。雖然RBAC在默認情況下啟用,但必須加以配置才能使用它。
RBAC有五個關鍵要素:
- 主題——用戶和進程
- 資源——應限制訪問的對象
- 動作——可以執(zhí)行的操作(常常名為動作)集合
- 角色——將API資源與動作連接起來的對象
- 角色綁定——將角色與主題連接起來的對象
不妨回到前面的那家組織,定義只有藍隊才能創(chuàng)建、刪除和列出Pod、部署(Deployment)和服務(Service)的策略。
我們先創(chuàng)建一個名為“role-blue”的角色對象,我們在其中定義可以對特定的Kubernetes資源執(zhí)行的操作。在這個特定情況下,角色允許對資源:Pod、部署和服務執(zhí)行“創(chuàng)建”、“刪除”和“列表”等操作。
接下來,我們創(chuàng)建一個名為“blue-rb”的角色綁定。這個角色綁定屬于“blue-ns”,它將上面創(chuàng)建的角色“role-blue”與名為“blue”的藍隊聯(lián)系起來。
一旦將這些資源運用到集群,“blue”團隊的用戶就能夠執(zhí)行“role-blue”中定義的操作。
開放策略代理
開放策略代理(OPA)是一種通用策略引擎,可以跨整個堆棧統(tǒng)一策略實施。它的高級聲明性語言提供了將策略指定為代碼的靈活性。您可以使用OPA在Kubernetes、CI/CD管道或API 網關中實施策略。不妨深入了解如何在Kubernetes中使用和實施它。
Kubernetes實施OPA的機制名為Gatekeeper。它被設計和部署成準入控制器,負責攔截請求、處理請求,并返回允許或拒絕的響應。
如果允許,對象會部署到集群上;否則,請求將被拒絕,并向用戶提供反饋。管理員可以定義策略,指示Kubernetes限制容器或命名空間可以消耗的內存或CPU等資源,僅批準基于來自特定注冊中心的鏡像的容器,限制NodePort服務創(chuàng)建,或執(zhí)行標準命名。
比如說,這是一個示例模板和約束策略,只有在命名空間中配置ResourceQuota后才允許創(chuàng)建Pod。
網絡策略
網絡策略與常規(guī)防火墻非常相似,不同之處在于它們以應用程序為中心。您為應用程序定義網絡策略后,Kubernetes會自動將這些規(guī)則運用于關聯(lián)的容器,這是由于容器會在高度動態(tài)的環(huán)境中不斷創(chuàng)建和終止。網絡策略控制進出這些容器的流量。
默認情況下,進出Pod的網絡流量不受限制。一個好的開頭是設置拒絕所有流量的規(guī)則,然后只允許必要的流量。
默認情況下,Kubernetes使用平面網絡結構,允許任何Pod與集群中的其他Pod或服務進行通信。在有多個應用程序或多級應用程序的集群中,縱深防御在保護通信層方面起到了關鍵作用。網絡策略使我們能夠做到這一點。
這是一個“app1-network-policy”,它在“blue”命名空間中為標簽為“role=db”的Pod運用以下規(guī)則:
- [Ingress] 允許通過端口6379的來自ipBlock 172.17.0.0/24的連接。
- [Ingress] 如果來自其他Pod的連接被標記為“role=frontend”,并且如果屬于端口6379上帶有標簽“project=myproject”的命名空間,允許這些連接。
- [Egress] Pod可以通過5978端口與IP范圍為10.0.0.0/24的其他Pod進行通信。
原文標題:??3 key elements to protect a Kubernetes cluster???,作者:Avinash Desireddy