kube-bench란?
CIS(Center for Internet Security)에서 채택한 보안권장수준이 있다.
해당 보안권장 수준을 Kubernetes에도 적용시켜 보안 감사를 통해 취약점을 사용자에게 알려주는 솔루션이 kube-bench이며, 해당 솔루션을 통해 사용자는 클러스터 내 해당 취약점을 보완하여 한층 강화된 클러스터를 운용할 수 있다.
CIS: https://www.cisecurity.org/cis-benchmarks
설치하기
설치방법은 매우 간단하다
git clone https://github.com/aquasecurity/kube-bench.git
cd kube-bench/
root@k8s-m:~/kube-bench# ls
CONTRIBUTING.md Dockerfile.ubi OWNERS check control-plane.log fipsonly.go hack internal job-eks-asff.yaml job-gke.yaml job-node.yaml main.go node.log
Dockerfile LICENSE README.md cmd docs go.mod hooks job-ack.yaml job-eks-stig.yaml job-iks.yaml job-tkgi.yaml makefile
Dockerfile.fips.ubi NOTICE cfg codecov.yml entrypoint.sh go.sum integration job-aks.yaml job-eks.yaml job-master.yaml job.yaml mkdocs.yml
job-eks, job-aks, job-gke등 yaml 파일들이 있지만, 직접 구축한 클러스터의 경우 job-master.yaml, job-node.yaml을 apply한다.
실행하고나면 아래와 같이 COMPLETED상태가 되는 것이 확인된다.
default kube-bench-master-554sr 0/1 Completed 0 26m
default kube-bench-node-pvthw 0/1 Completed 0 26m
설치 끝
취약점 보완 및 조치하기
k logs kube-bench-master-554sr
Pod의 log를 확인해보면 [PASS], [FAIL], [WARN] 태그와 함께 내용들이 확인된다.
[PASS]: 보안검사 조건들이 충족한 상태를 의미한다.
[FAIL]: 보안검사에서 결함이 발견되었으며, 굉장히 취약한 상태를 의미한다
[WARN]: 해당 보안 검사에서 경고가 발생했으며, 클러스터의 보안에 대한 주의가 필요함을 의미한다.
여러 로그 중 아래 취약점에 대해서 조치해보도록 한다.
[FAIL] 1.2.18 Ensure that the --audit-log-maxage argument is set to 30 or as appropriate (Automated)
root@k8s-m:~# cd /etc/kubernetes/manifests/
root@k8s-m:/etc/kubernetes/manifests# vi kube-apiserver.yaml
# 아래와 같이 --audit-log-maxage=30 필드를 새로 넣어준다.
spec:
containers:
- command:
- kube-apiserver
- --audit-log-maxage=30
root@k8s-m:/etc/kubernetes/manifests# k get pod -A
E0320 14:51:24.317341 2965867 memcache.go:265] couldn't get current server API group list: Get "https://10.20.0.48:6443/api?timeout=32s": dial tcp 10.20.0.48:6443: connect: connection refused
E0320 14:51:24.318495 2965867 memcache.go:265] couldn't get current server API group list: Get "https://10.20.0.48:6443/api?timeout=32s": dial tcp 10.20.0.48:6443: connect: connection refused
root@k8s-m:/etc/kubernetes/manifests# k get pod -A
kube-system kube-apiserver-k8s-m 1/1 Running 0 73s
그럼 api-server가 재시작되면서 잠시동안 api-server와 연결이 안될거다.
api-server가 재기동 되면 kube-bench job오브젝트를 모두 삭제하고 다시 실행시킨다.
root@k8s-m: # k delete jobs.batch kube-bench-master kube-bench-node
job.batch "kube-bench-master" deleted
job.batch "kube-bench-node" deleted
root@k8s-m:~/kube-bench# k apply -f job-master.yaml
job.batch/kube-bench-master created
root@k8s-m:~/kube-bench# k apply -f job-node.yaml
job.batch/kube-bench-node created
root@k8s-m:~/kube-bench# k get pod
NAME READY STATUS RESTARTS AGE
kube-bench-master-kj8t6 0/1 Completed 0 13s
kube-bench-node-jx64r 1/1 Running 0 10s
root@k8s-m:~/kube-bench# k logs kube-bench-master-kj8t6
[PASS] 1.2.18 Ensure that the --audit-log-maxage argument is set to 30 or as appropriate (Automated)
기존 FAIL이었던 취약점 항목이 조치 이후 PASS로 변경된 것이 확인된다.
'Kubernetes' 카테고리의 다른 글
Kubernetes에서 App Armor를 활용하여 Container 내부 디렉토리 Write 제한하기 (0) | 2024.03.23 |
---|---|
gVisor 및 runsc를 활용한 Host와의 컨테이너 커널 격리 (0) | 2024.03.21 |
kubesec install 및 사용법 (1) | 2024.03.19 |
Kubernetes Network Study #2(Service to Pod) (0) | 2023.11.23 |
Kubernetes Network Study #1 (Pod to Pod, CNI. Calico) (0) | 2023.11.22 |