Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Study_note

[kubernetes] kubescape, polaris api 연결 및 컨트롤러 스캔 본문

Kubernetes

[kubernetes] kubescape, polaris api 연결 및 컨트롤러 스캔

Study_note 2023. 3. 6. 20:38

보안은 운영환경에서 제일 중요한 요소 중 하나이다

하지만 쿠버네티스에서는 다양한 리소스와 노드 등에 대한 보안을 신경써야할 부분들이 많아 그 요소에 맞게 구축하는것은 생각보다 어렵다

 

이러한 보안적인 불편함을 해결하려 나온 툴들이 kubescape, polaris 이다.

 

직접 설치해보고 둘에 차이를 한번 느껴보려한다.

 

kubescape

 

우선 kubescape 공식 git hub를 들어가면 해당 툴에 대해 이해할 수 있다.

https://github.com/kubescape/kubescape

 

GitHub - kubescape/kubescape: Kubescape is an open-source Kubernetes security platform for your IDE, CI/CD pipelines, and cluste

Kubescape is an open-source Kubernetes security platform for your IDE, CI/CD pipelines, and clusters. It includes risk analysis, security, compliance, and misconfiguration scanning, saving Kubernet...

github.com

- Kubescape는 IDE, CI/CD 파이프라인 및 cluster를 위한 오픈 소스 Kubernetes 보안 플랫폼입니다. 여기에는 위험 분석, 보안, 규정 준수 및 잘못된 구성 검색이 포함되어 있어 Kubernetes 사용자와 관리자의 귀중한 시간, 노력 및 리소스를 절약할 수 있습니다.

- Kubescape는 클러스터, YAML 파일 및 조타 차트를 검색합니다. 그것은 여러 프레임워크에 따라 잘못된 구성을 감지한다.

- Kubescape는 ARMO에 의해 개발되었으며 CNCF(클라우드 네이티브 컴퓨팅 재단) 샌드박스 프로젝트이다.

 

설치

공식 문서를 보면 Kubescape는 helm을 사용하지 않고 curl로 해당 실행 파일을 가져오는 형식이다.

curl -s https://raw.githubusercontent.com/kubescape/kubescape/master/install.sh | /bin/bash

 

해당 명령어를 실행하면 helm에 Kubescape 차트와 플러그인이 설치되어있는것을 확인 가능하다.

 

그 외 제공하는 보안 프레임 워크는 아래와 같다.

 

 

쿠버네티스 클러스터를 스캔하는 명령어를 실행하면 아래와 같은 결과값 얻을 수 있다.

kubescape scan --enable-host-scan --verbose

클러스터를 스캔하면 꽤 많은 결과 값이 나오기 때문에 공식 github 보고 원하는 리소스 스캔하는것이 좋아보인다

 

추가로 Kubescape를 cli로 사용하면 직관성이 조금 떨어지기 때문에 gui로 로그인하여 클러스터를 로그인할 수 있다 

portal.armo.cloud 주소로 접근한 후 회원 가입하고 대시보드로 들어가면 아래와 같은 코드를 줘서 클러서터에 입력 후 ‘I ran the script’ 누름 연동 되어진다.

 

 

아래와 같이 compliance 들어가면 컨트롤러별 리소스별 스캔을 가능하면 fix 선택 시 취약한 부분을 수정할 수 있도록 도와준다.

 

또한 vulnerability(취약성)을 선택하여 어떤 부분이 취약한지 얼마나 어는 정도가 취약한지 한번에 확인 가능하다.

 

 

---

다음으로는 polaris를 찾아봤다.

 

polaris는 Kubescape와 비슷하게 클러스터를 스캔하는 도구지만 필자는 polaris가 webhook을 지원하기 때문에 더 편해보인다.

 

 Kubescape와 다른 특징

-30개 이상의 기본 제공 구성 정책과 JSON Schema를 사용하여 사용자 지정 정책을 구축할 수 있는 기능이 포함되어 있습니다.
- Polaris는 명령줄에서 실행되거나 webhook으로 변환할 때 정책 기준에 따라 자동으로 문제를 해결할 수 있습니다.

 

polaris는 helm 통해 쉽게 설치 가능하다.(설치 외 다양한 정보들 얻을 수 있다.)

https://artifacthub.io/packages/helm/fairwinds-stable/polaris

 

polaris 5.7.2 · fairwinds/fairwinds-stable

Validation of best practices in your Kubernetes clusters

artifacthub.io

 

필자는 아래와 같이 polaris-values.yaml 파일 만들어 오버라이딩 시켜 로드벨런서도 한번에 설치했다.

dashboard:
  replicas: 1
  service:
    type: LoadBalancer
    
---
helm repo add fairwinds-stable https://charts.fairwinds.com/stable
helm install polaris fairwinds-stable/polaris --namespace polaris --version 5.7.2 -f polaris-values.yaml

 

로드벨런서로 접속하면 아래와 같이 클러스터를 스캔하여 취약점을 찾아준다.

 

아래 네임스페이스별로 리소스를 선택 가능하며 아래와 같은 디플로이먼틀르 배포한다면 polaris는 취약점을 안내한다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: netshoot-pod
spec:
  replicas: 1
  selector:
    matchLabels:
      app: netshoot-pod
  template:
    metadata:
      labels:
        app: netshoot-pod
    spec:
      containers:
      - name: netshoot-pod
        image: nicolaka/netshoot:v0.9
        command: ["tail"]
        args: ["-f", "/dev/null"]
      terminationGracePeriodSeconds: 0

 

polaris가 안내한대로 디플로이먼트를 수정하면 warning, dangerous 체크가 확연하게 줄어든것이 확인 가능하다.

cat <<EOF | kubectl create -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: netshoot-pod
spec:
  replicas: 1
  selector:
    matchLabels:
      app: netshoot-pod
  template:
    metadata:
      labels:
        app: netshoot-pod
    spec:
      containers:
      - name: netshoot-pod
        image: nicolaka/netshoot:v0.9
        command: ["tail"]
        args: ["-f", "/dev/null"]
      terminationGracePeriodSeconds: 0

 

또한 polaris는 webhook을 걸어 취약한 리소스를 생성할때 제약을걸 수도 있다.

 

아래와 같이 webhook을 걸고 보안이 취약한 디플로이먼트를 생성하면 생성자체가 막아지는것을 확인 가능하다.

helm upgrade polaris fairwinds-stable/polaris --namespace polaris --version 5.7.2 --reuse-values --set webhook.enable=true 

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: netshoot-pod
spec:
  replicas: 1
  selector:
    matchLabels:
      app: netshoot-pod
  template:
    metadata:
      labels:
        app: netshoot-pod
    spec:
      containers:
      - name: netshoot-pod
        image: nicolaka/netshoot:v0.9
        command: ["tail"]
        args: ["-f", "/dev/null"]
      terminationGracePeriodSeconds: 0

 

Comments