Cloud/Kubernetes
[Kubernetes] CIS 벤치마크 #설치
Piracoon
2021. 4. 19. 18:30
CIS 벤치마크 사용
인터넷 보안 센터(CIS)는 보안 권장 수준을 위한 벤치마크입니다. CIS Kubernetes 벤치마크는 강력한 보안 수준 지원을 위한 Kubernetes 구성 권장 수준 집합이며, 범용 적용이 가능하도록 고안되었습니다.
관리형 클러스터의 마스터 노드(GKE, EKS, AKS etc.)를 검사하는 것은 불가능 합니다.
Kubernetes CIS 벤치마크 사용 (Kube-bench)
명령 줄에서 직접 kube-bench를 실행하는 경우 모든 구성 파일에 액세스 하려면 root/sudo 권한이어야 합니다.
기본적으로 kube-bench는 실행중인 kubernetes 버전을 자동 감지하고 이를 해당 CIS 벤치 마크 버전에 매핑합니다.
설치 참고
github.com/aquasecurity/kube-bench#download-and-install-binaries
1. Container 내부에서 실행
docker run --pid=host -v /etc:/etc:ro -v /var:/var:ro -t aquasec/kube-bench:latest --version 1.13 |
위와 같이 실행을 하는 경우 Kubernetes 버전을 자동 감지 하지 않기 때문에 kubelet 또는 kubectl 바이너리가 필요 하므로 추가적인 정보(~./kube)를 마운트 해준다.
docker run --pid=host -v /etc:/etc:ro -v /var:/var:ro -v $(which kubectl):/usr/local/mount-from-host/bin/kubectl -v ~/.kube:/.kube -e KUBECONFIG=/.kube/config -t aquasec/kube-bench:latest |
2. Kubernetes 클러스터에서 실행
# vi job.yaml --- 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:latest 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/" |
# kubectl apply -f job.yaml # kubectl get pods # kubectl logs {kube_bench_pods_name} |
3. 바이너리 다운로드 및 설치
kube-bench 릴리스 바이너리를 수동으로 설치하고 실행할 수 있습니다. 이를 수행하려면 Kubernetes 클러스터 노드에 대한 액세스 권한이 있어야합니다.
# curl -L https://github.com/aquasecurity/kube-bench/releases/download/v0.3.1/kube-bench_0.3.1_linux_amd64.rpm -o kube-bench_0.3.1_linux_amd64.rpm # sudo yum install kube-bench_0.3.1_linux_amd64.rpm -y # kube-bench |