반응형
kube-bench
목표
kubernetes 취약점 점검 tool은 kube-bench 사용법에 대해 알아봄
kube-bench란?
Aqua security에서 개발한 것으로
kube-bench는 kubernetes cluster가 보안적으로 안전하게 구성되어있는지 검사해주는 tool임.
CIS Kubernetes Benchmark 문서를 기반으로 kubernetes cluster의 취약점을 확인해줌.
취약점 scan 결과를 PASS, FAIL, WARN 3가지로 출력해주고
FAIL, WARN 항목에 대해서는
Remediations 항목에서 어떻게 하면 개선되는지 가이드까지 해줌.
CIS Benchmark 란?
CIS(Center for Internet Security, 비영리 조직)에서 배포하는 보안 취약점 점검 문서.
IT에서 사용되는 다양한 OS, Application 등 범위를 가리지 않고
안전하게 사용할 수 있도록 보안 가이드 문서를 제공하고 있음.
kubernetes 이외에 linux, windows, db was 등 다양한 OS와 Application에 대한
보안 가이드가 작성되어있음.
kube-bench 사용법 1
(kubernetes cluster에 배포해서 scan하는 방법)
해당 방법은 kube-bench container를 kubernetes cluster에 배포해서
cluster 전체를 scan하는 방법임.
cluster 전체라 하면 master(control) node, worker node, etcd, policies 등을 한번에 검사할 수 있음.
kubebench.yml 파일 생성
---
apiVersion: batch/v1
kind: Job
metadata:
name: kube-bench
spec:
template:
metadata:
labels:
app: kube-bench
spec:
hostPID: true
containers:
- name: kube-bench
image: aquasec/kube-bench:v0.6.8
command: ["kube-bench"]
volumeMounts:
- name: var-lib-etcd
mountPath: /var/lib/etcd
readOnly: true
- name: var-lib-kubelet
mountPath: /var/lib/kubelet
readOnly: true
- name: var-lib-kube-scheduler
mountPath: /var/lib/kube-scheduler
readOnly: true
- name: var-lib-kube-controller-manager
mountPath: /var/lib/kube-controller-manager
readOnly: true
- name: etc-systemd
mountPath: /etc/systemd
readOnly: true
- name: lib-systemd
mountPath: /lib/systemd/
readOnly: true
- name: srv-kubernetes
mountPath: /srv/kubernetes/
readOnly: true
- name: etc-kubernetes
mountPath: /etc/kubernetes
readOnly: true
# /usr/local/mount-from-host/bin is mounted to access kubectl / kubelet, for auto-detecting the Kubernetes version.
# You can omit this mount if you specify --version as part of the command.
- name: usr-bin
mountPath: /usr/local/mount-from-host/bin
readOnly: true
- name: etc-cni-netd
mountPath: /etc/cni/net.d/
readOnly: true
- name: opt-cni-bin
mountPath: /opt/cni/bin/
readOnly: true
restartPolicy: Never
volumes:
- name: var-lib-etcd
hostPath:
path: "/var/lib/etcd"
- name: var-lib-kubelet
hostPath:
path: "/var/lib/kubelet"
- name: var-lib-kube-scheduler
hostPath:
path: "/var/lib/kube-scheduler"
- name: var-lib-kube-controller-manager
hostPath:
path: "/var/lib/kube-controller-manager"
- name: etc-systemd
hostPath:
path: "/etc/systemd"
- name: lib-systemd
hostPath:
path: "/lib/systemd"
- name: srv-kubernetes
hostPath:
path: "/srv/kubernetes"
- name: etc-kubernetes
hostPath:
path: "/etc/kubernetes"
- name: usr-bin
hostPath:
path: "/usr/bin"
- name: etc-cni-netd
hostPath:
path: "/etc/cni/net.d/"
- name: opt-cni-bin
hostPath:
path: "/opt/cni/bin/"
|
kubebench.yml 배포
kubectl apply -f kubebench.yml
생성된 pod의 STATUS 상태가 Completed인지 확인
결과 확인
[명령어]
kubectl logs [kube-bench pod name]
결과를 확인해보면 아래와 같이
CIS benchmark 항목 당 결과를 알 수 있음 (PASS, FAIL, WARN)
FAIL, WARN 항목에 대해서는
Remediations 항목에서 어떻게 하면 개선되는지 가이드까지 해줌.
Summary 항목에서는 (PASS, FAIL, WARN) count를 확인할 수 있음
항목 개선 Test로 FAIL 상태인 1.2.20 항목을 PASS로 변경해보겠음.
Remediations 을 확인해보니 아래와 같이 가이드함
가이드대로
/etc/kubernetes/manifests/kube-apiserver.yaml 파일을 아래와 같이 편집함.
--audit-log-maxage=30
설정을 추가
해당 apiserver static pod를 수정하면
항목이 반영되는 동안 잠시 apiserver에 접속하지 못하다가
수정이 완료되면 apiserver가 되살아남.
이후 kube-bench를 삭제하고 다시 재배포해서 scan을 다시 하면
다음과 같이 1.2.20 항목이 FAIL 에서 PASS로 변경된 것을 확인할 수 있음
kube-bench 사용법 2
(host에 kube-bench를 설치해서 사용하는 방법)
kube-bench를 host에 설치해서 사용하게 되면
해당 host가 kubernetes control node라면 control 항목만 scan이 가능하고
worker node라면 worker node 항목만 scan이 가능함.
kube-bench install 가이드 문서 링크 : https://github.com/aquasecurity/kube-bench/blob/main/docs/installation.md
CentOS의 경우 kube-bench 설치 방법
curl -L https://github.com/aquasecurity/kube-bench/releases/download/v0.6.2/kube-bench_0.6.2_linux_amd64.rpm -o kube-bench_0.6.2_linux_amd64.rpm
sudo yum install kube-bench_0.6.2_linux_amd64.rpm -y
설치 확인
kube-bench version
controller node scan 명령어
[명령어]
kube-bench run --targets master
[결과]
항목 1개만 Scan 하는 명령어
[명령어]
kube-bench run --targets master --check 1.2.20
[결과]
반응형
'Kubernetes > Kubernetes 보안' 카테고리의 다른 글
Kubernetes 보안 설정 --anonymous-auth=false (1) | 2022.05.05 |
---|---|
Kubernetes 보안 설정 automountServiceAccountToken: false (0) | 2022.05.05 |
Portieris (v0.12.2) (0) | 2022.02.23 |
Kubernetes ImagePolicyWebhook (0) | 2021.04.05 |
Kubernetes image인증 - Portieris (0) | 2020.12.22 |