쿠버네티스 환경에서 admission controller와 함께 쓰여 클러스터 자원을 보호할 수 있습니다.
admission controller는 Kubernetes API 서버에 대한 요청을 가로채고 규칙에 따라 검사한 뒤 클러스터에 반영할지 여부를 결정합니다.
하지만 이 모든 검사는 포드가 시작되기 전에 완료됩니다. 클러스터 내부에 위협이 있는 경우 보호를 보장하지 않습니다.
KuberArmor는 내부로부터 포드를 보호합니다. daemon set으로 실행되며 시스템 레벨에서 컨테이너의 동작을 제한합니다.
KubeArmor를 사용하면 포드/컨테이너 내의 리소스에 대한 보안 정책을 정의하고 런타임에 적용할 수 있습니다.
또한 정책 위반을 탐지하고 컨테이너 ID가 포함된 감사 로그를 생성합니다. 컨테이너 외에도 KuberArmor는 호스트 자체를 보호할 수도 있습니다.
오픈소스 버전과 accuknox의 제품버전이 있습니다.
오픈소스버전에서는 멀티클러스터, gitops, 3rd party 연동 지원을 제외한 거의 모든 기능을 제공합니다.
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
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) 대해 별도로 구성할 수 있습니다. 프로세스는 파일리소스에서 처리가능합니다.
예시 코드
karmor recommend -n NAMESPACE
예시 코드
karmor discover -n NAMESPACE
karmor discover -n NAMESPACE -f yaml -p NetworkPolicy
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"
}
https://github.com/kubearmor/KubeArmor/blob/main/getting-started/workload_visibility.md
discovery engine이 kubearmor 의 타겟 리소스(네트워크, 프로세스, 파일, capabilities)에 대해 스캔을 합니다.
정보를 요약/집계하고 보고서 형태로 제공하여 응용프로그램 동작을 파악합니다.
https://github.com/kubearmor/kubearmor-prometheus-exporter
exporter를 제공해 alert 기반으로 발생한 metric을 Prometheus에서 수집합니다.
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