본문 바로가기
Kubernetes

kube-bench 사용법 및 Install

by beann 2024. 3. 20.
반응형

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로 변경된 것이 확인된다.

 

반응형