K8s安全配置:CIS基準與kube-bench工具
01、概述
K8s集群往往會因為配置不當導致存在入侵風險,如K8S組件的未授權訪問、容器逃逸和橫向攻擊等。為了保護K8s集群的安全,我們必須仔細檢查安全配置。
CIS Kubernetes基準提供了集群安全配置的最佳實踐,主要聚焦在兩個方面:主節點安全配置和工作節點安全配置。主節點安全配置涵蓋了控制平面節點配置文件、APIServer、Controller Manager、Scheduler、etcd等關鍵組件,而工作節點安全配置則專注于Kubelet和相關配置文件。通過遵循CIS Kubernetes基準,確保集群安全,降低入侵風險,保護敏感數據和業務連續性。
CIS Kubernetes基準包含了一百多個檢查項,手動逐項檢測效率較低,因此我們需要相應的工具來簡化這個過程。kube-bench是一個主要用于檢查Kubernetes集群是否符合CIS Kubernetes基準中列出的安全配置建議的工具。它能夠自動化地進行檢查,幫助我們快速發現并解決潛在的安全問題,提高集群的安全性和符合性。這樣,我們可以更高效地確保Kubernetes集群的安全可靠。
02、Kube-bench部署使用
(1)安裝部署
Ubuntu下,最簡單的方式就是使用dpkg命令安裝軟件包。
wget https://github.com/aquasecurity/kube-bench/releases/download/v0.6.17/kube-bench_0.6.17_linux_amd64.deb
dpkg -i kube-bench_0.6.17_linux_amd64.deb
(2)安全檢測
檢測master組件:
kube-bench run --targets=master --benchmark=cis-1.24
圖片
03、自定義檢測規則
(1)kube-bench的規則文件是用YAML文件配置,提供了自定義檢測規則的能力。例如,我們可以通過編寫CIS自定義規則文件,用于檢查集群中是否有容器在特權模式下運行。
root@master01:/etc/kube-bench/cfg/cis-1.24# vi controlplane.yaml
- id: 3.2.3
text: "Ensure that the container does not use privileged mode (Manual)"
audit: "if test -z $(kubectl get pods --all-namespaces -o jsnotallow='{.items[*].spec.containers[?(@.securityContext.privileged==true)].name}'|sed 's/calico-node//g'|sed 's/kube-proxy//g');then echo ok;else echo err;fi;"
tests:
test_items:
- flag: "ok"
remediation: "If you do not need to use a container in privileged mode, turn off privileged mode"
scored: true
(2)使用特權模式運行pod,添加privileged參數為true。
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: pod1
name: pod1
spec:
containers:
- image: busybox
name: pod1
command: ['/bin/sh','-c','sleep 24h']
securityContext:
privileged: true
(3)使用kube-bench檢測,存在特權容器,檢測狀態為FAIL。
圖片
刪除對應的特權容器,再次檢測,檢測狀態為PASS。