쿠버네티스 교육

23. Kube 교육 - Polaris(보안 취약점 확인)

Jerry_이정훈 2021. 6. 4. 16:53
728x90

실습

  • Polaris 설치
  • Polaris 통한 보안 취약점 확인 및 취약점 개선(Redis Helm Chart)

Why Polaris
직접 작성한 Kube YAML 파일 또는 Helm Chart를 이용하여 현재 클러스터에 적용된 YAML 파일이 보안 또는 고가용성 측면에서 최적화된 구성이 맞는지 궁금합니다. 물론, 사람들이 많이 사용하는 공식 Helm Chart는 아무래도 더 믿음(?)이 가기도 합니다.

Polaris는 보안 및 고가용성을 고려한 자체 체크 리스트 DB를 가지고 있어 현재 실행 중인 Kube Object를 Best-Practice 기준으로 검사합니다. 그리고 그 결과를 웹화면에서 대쉬보드 형태로 제공합니다. 운영자는 해당 권고 사항에 따라 적절히 수정하시면 됩니다.

Polaris : Best Practices for Kubernetes Workload Configuration
(Fairwinds 사 제품입니다. Fairwinds 사 제품 중 Kube 보안 관련 괜찮은 오픈소스 툴(kube-hunter, kube-bench, trivy 등)들이 있습니다.)
https://github.com/FairwindsOps/polaris

FairwindsOps/polaris

Validation of best practices in your Kubernetes clusters - FairwindsOps/polaris

github.com

참고로 (아마도 가장 많이 사용하는) Bitnami Redis Helm Chart를 Default 설정으로 설치하면 보안 권고 위반 사항이 있습니다. Polaris를 사용하여 해당 취약점을 수정해 보겠습니다.

Polaris 설치
Polaris 설치는 Helm 통해서 간단히 가능합니다. (공홈 참조)

[spkr@erdia22 12.Polaris (kspray:metallb-system)]$ helm repo add fairwinds-stable https://charts.fairwinds.com/stable [spkr@erdia22 12.Polaris (kspray:metallb-system)]$ helm pull fairwinds-stable/polaris

VSCode에서 my-values.yml 의 service type을 NodePort(혹은 LoadBalancer)로 변경합니다.

[spkr@erdia22 polaris-4.0.2 (kspray:metallb-system)]$ k create ns polaris namespace/polaris created [spkr@erdia22 polaris-4.0.2 (kspray:metallb-system)]$ kns polaris Context "kspray" modified. Active namespace is "polaris". [spkr@erdia22 polaris-4.0.2 (kspray:polaris)]$ helm install polaris -f my-values.yaml . NAME: polaris LAST DEPLOYED: Wed Jun 2 15:10:28 2021 NAMESPACE: polaris STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: ** Please be patient while the chart is being deployed ** Enjoy Polaris and smooth sailing! [spkr@erdia22 polaris-4.0.2 (kspray:polaris)]$ kgp NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES polaris-dashboard-5dc95d45bb-vk49l 1/1 Running 0 26s 10.233.127.5 ksp1 <none> <none> [spkr@erdia22 polaris-4.0.2 (kspray:polaris)]$ k get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE polaris-dashboard NodePort 10.233.41.94 <none> 80:30125/TCP 41s

SVC 설정된 NodePort(30125) 로 접속하면 아래와 유사한 형태의 Dashboard를 확인 하실 수 있습니다.

이제 현재 사용 중인 전체 Application의 보안 취약점 점검 레포트를 확인 하실 수 있습니다. (저는 D+, 67% 뿐이 안되네요 -.-)


Bitnami Redis Helm 사례
그럼, 실 Application 사례로 알아 보겠습니다. Bitnami Helm Redis를 Default 세팅으로 설치 하면 아래와 같은 보안 취약점이 확인됩니다.

1ea Danger, 2ea Warning 취약점

비슷한 사례로 이미지 보안 취약점 체크 툴인 Trivy로 취약점 스캔하면 벤더가 제공하는 기본 이미지(nginx 등)가 보안 취약점이 많은 걸 확인 하실 수 있습니다. (아마도 가장 많이 사용하는) Bitnami Redis Helm Chart도 default 설정은 역시 보안 취약점이 있습니다.

이에 반하여, (어떻게 보면 당연하겠지만) Polaris POD는 아래와 같이 깨끗합니다.

Polaris YAML 파일을 참고하여 redis helm chart의 보안 취약점을 수정해 보겠습니다. (약간 번거롭습니다.)

먼저 Polaris 설정을 YAML 파일로 export 합니다.

[spkr@erdia22 ~ (dz-saas:polaris)]$ k get deployments.apps polaris-dashboard -o yaml | k neat > polaris-deploy.yml (k neat tool을 사용하면 좀 더 편리하게 yaml 파일 확인이 가능합니다.)

해당 취약점 관련 부문은 아래 securityContext 부문인데, Polaris YAML 파일을 참고해 보겠습니다.

securityContext 부문의 allowPrivilegeEscalation이 false 이며 capabilities이 drop ALL 등으로 설정되어 있습니다. 관련 사항을 Redis Helm Chart에도 반영 합니다. redis Helm Chart의 my-values.yml에서 containerSecurityContext 부문을 찾아서 해당 사항을 추가합니다. (allowPrivilegedEscalation 부터 추가)

이제 Redis Helm chart를 재시작(helm upgrade) 합니다. Polaris에서 다시 확인하면 아래와 같이 취약점 부문이 개선된 걸 확인하실 수 있습니다.

Polaris Redis 레포트

이상 오픈 소스 Kube 보안 툴인 Polaris를 이용하여 Redis Application 보안 취약점 개선 방안을 Demo를 통하여 알아 보았습니다. 반복 작업을 통하여 다른 Application 등도 각 회사의 정책에 맞게 수정이 가능합니다. (이걸 자동으로 하면 참 좋을텐데… 그건 아마도 유료 같습니다.)

그럼, 감사합니다.

Kubernetes 교육 및 기술 지원 문의 : leejunghoon@spkr.co.kr

반응형