[k8s] KubeArmor 2. 소개

Seunghyun Moon·2023년 5월 8일
0

KubeArmor

목록 보기
2/3


간단소개

쿠버네티스 환경에서 admission controller와 함께 쓰여 클러스터 자원을 보호할 수 있습니다.

admission controller는 Kubernetes API 서버에 대한 요청을 가로채고 규칙에 따라 검사한 뒤 클러스터에 반영할지 여부를 결정합니다.

하지만 이 모든 검사는 포드가 시작되기 전에 완료됩니다. 클러스터 내부에 위협이 있는 경우 보호를 보장하지 않습니다.

KuberArmor는 내부로부터 포드를 보호합니다. daemon set으로 실행되며 시스템 레벨에서 컨테이너의 동작을 제한합니다.

KubeArmor를 사용하면 포드/컨테이너 내의 리소스에 대한 보안 정책을 정의하고 런타임에 적용할 수 있습니다.

또한 정책 위반을 탐지하고 컨테이너 ID가 포함된 감사 로그를 생성합니다. 컨테이너 외에도 KuberArmor는 호스트 자체를 보호할 수도 있습니다.

오픈소스 버전과 accuknox의 제품버전이 있습니다.

오픈소스버전에서는 멀티클러스터, gitops, 3rd party 연동 지원을 제외한 거의 모든 기능을 제공합니다.


Kubearmor 용어

https://github.com/kubearmor/KubeArmor/blob/main/getting-started/security_policy_examples.md

예시 policy

apiVersion: security.kubearmor.com/v1
kind: KubeArmorPolicy
metadata:
  name: ksp-group-1-proc-path-block
  namespace: multiubuntu
spec:
  selector:
    matchLabels:
      group: group-1
  process:
    matchPaths:
    - path: /bin/sleep
  action:
    Block
  • security posture(= actions) : allow / block / audit
    • block 모드는 정책에서 허용되지 않는 모든 작업을 차단합니다. audit은 차단하지 않고 telemetry 이벤트를 생성합니다.
    • karmor logs 로 확인가능합니다.
  • resource(= targets) : process / file / network / capabilities

allow, block이 평가되는 방법

https://github.com/kubearmor/KubeArmor/blob/main/getting-started/consideration_in_policy_action.md

https://github.com/kubearmor/KubeArmor/blob/main/getting-started/default_posture.md


blacklist 기반 정책과 whitelist 기반 정책이 동시에 적용되는 경우 해당 pod의 정책은 whitelist로 바뀌게 됩니다.

그리고 클러스터/네임스페이스 단위의 Default posture를 기반으로 다른 모든 행위는 block 혹은 audit 으로 인식됩니다.

default posture는 프로세스를 제외한 각 리소스에(파일, 네트워크, capabilities) 대해 별도로 구성할 수 있습니다. 프로세스는 파일리소스에서 처리가능합니다.


스캐닝 기능

hardening infrastructure

  • https://github.com/kubearmor/KubeArmor/blob/main/getting-started/hardening_guide.md
  • KubeArmor는 워크로드의 컨텍스트를 스캐닝하고 하드닝 폴리시를 제공합니다. 정책이 어떻게 적용될 수 있고 시스템에 어떤 영향을 미치는지 확인할 수 있습니다.
  • CIS, MITRE, NIST, STIGs 와 같은 표준 컴플라이언스 기반의 KubeArmor Policy Templates 라는 latest hardening 폴리시를 제공하고 바로 적용할 수 있습니다.

예시 코드

karmor recommend -n NAMESPACE

discover

  • https://github.com/accuknox/discovery-engine
  • Discovery Engine은 워크로드의 보안 상태를 검색하고 워크로드를 최소 허용 모드로 전환하는 데 필요한 정책 세트를 자동으로 검색합니다. 이 엔진은 KubeArmor 및 Cilium에서 제공하는 풍부한 가시성을 활용하여 시스템 및 네트워크 보안 상태를 자동으로 검색합니다.

예시 코드

karmor discover -n NAMESPACE
karmor discover -n NAMESPACE -f yaml -p NetworkPolicy


로깅&모니터링

visibility(logs)

https://github.com/kubearmor/KubeArmor/blob/main/getting-started/kubearmor_visibility.md

pod, node 에 annotation을 붙여 사용

kubectl annotate node <node-name> "kubearmor-visibility=process,file,network,capabilities" 

policy violation에 대해 log 를 stdout으로 보내거나 파일로 저장합니다.

== Alert / 2023-01-04 04:58:37.689182 ==
ClusterName: default
HostName: sibashi-asus
NamespaceName: wordpress-mysql
PodName: wordpress-787f45786f-mm2bm
Labels: app=wordpress
ContainerName: wordpress
ContainerID: 9af5246810fd0a732e74d391b32b95f65e4c08e655d1ab10b49b04b148cc1c24
ContainerImage: docker.io/library/wordpress:4.8-apache@sha256:6216f64ab88fc51d311e38c7f69ca3f9aaba621492b4f1fa93ddf63093768845
Type: MatchedPolicy
PolicyName: ksp-wordpress-block-process
Severity: 3
Source: /bin/bash
Resource: /usr/bin/apt update
Operation: Process
Action: Block
Data: syscall=SYS_EXECVE
Enforcer: AppArmor
Result: Permission denied
HostPID: 17462
HostPPID: 17293
PID: 199
PPID: 193
ParentProcessName: /bin/bash
ProcessName: /usr/bin/apt
{
"Timestamp":1672808328,
"UpdatedTime":"2023-01-04T04:58:48.838991Z",
"ClusterName":"default","HostName":"sibashi-asus",
"NamespaceName":"wordpress-mysql","PodName":"wordpress-787f45786f-mm2bm",
"Labels":"app=wordpress",
"ContainerID":"9af5246810fd0a732e74d391b32b95f65e4c08e655d1ab10b49b04b148cc1c24",
"ContainerName":"wordpress",
"ContainerImage":"docker.io/library/wordpress:4.8-apache@sha256:6216f64ab88fc51d311e38c7f69ca3f9aaba621492b4f1fa93ddf63093768845",
"HostPPID":17293,
"HostPID":17526,
"PPID":193,
"PID":200,
"ParentProcessName":"/bin/bash",
"ProcessName":"/usr/bin/apt",
"PolicyName":"ksp-wordpress-block-process",
"Severity":"3",
"Type":"MatchedPolicy",
"Source":"/bin/bash",
"Operation":"Process",
"Resource":"/usr/bin/apt update",
"Data":"syscall=SYS_EXECVE",
"Enforcer":"AppArmor",
"Action":"Block",
"Result":"Permission denied"
}

application behavior

https://github.com/kubearmor/KubeArmor/blob/main/getting-started/workload_visibility.md

discovery engine이 kubearmor 의 타겟 리소스(네트워크, 프로세스, 파일, capabilities)에 대해 스캔을 합니다.

정보를 요약/집계하고 보고서 형태로 제공하여 응용프로그램 동작을 파악합니다.

kubearmor exporter

https://github.com/kubearmor/kubearmor-prometheus-exporter

exporter를 제공해 alert 기반으로 발생한 metric을 Prometheus에서 수집합니다.

kubearmor-elk-stack

https://github.com/kubearmor/kubearmor-elk-stack

$ cd kubearmor-elk-stack
~/kubearmor-elk-stack$ kubectl apply -f elasticsearch.yaml
~/kubearmor-elk-stack$ kubectl apply -f kibana.yaml
~/kubearmor-elk-stack$ kubectl apply -f logstash.yaml

profile
I live fullest

0개의 댓글