Falco
Falco는 노드와 컨테이너 활동에 대한 런타임 탐지를 제공합니다. 저장소는 이를 모든 노드의 DaemonSet으로 배포하고, modern_ebpf 드라이버 모드를 사용하며, 무거운 기본 규칙 세트를 비활성화하고, Falcosidekick을 통해 이벤트를 Loki로 전달합니다.
책임
- 모든 노드의 런타임 이벤트 관찰
- 해당 이벤트에 대해 Lumie 전용 커스텀 규칙 평가
- Falcosidekick을 통해 보안 이벤트를 JSON 형식으로 Loki로 전달
- Falco와 Falcosidekick 메트릭을 Prometheus에 노출
소스 경로
| 경로 | 역할 |
|---|---|
lumie-infra/security/falco/argocd.yaml | falco 네임스페이스를 대상으로 하는 ArgoCD Application |
lumie-infra/security/falco/helm-values.yaml | 드라이버 모드, 이미지, 커스텀 규칙, Falcosidekick, metrics, controller 종류 |
런타임 계약
| 표면 | 계약 |
|---|---|
| Controller 종류 | daemonset |
| Driver 모드 | modern_ebpf |
| 기본 출력 | Falco의 stdout, Falcosidekick의 Loki |
| 메트릭 | serviceMonitor.create: true |
| Web UI | Falcosidekick Web UI 비활성화 |
규칙 집합
체크인된 규칙 계약은 기본 Falco rules 파일을 비활성화하고 falco_rules.local.yaml과 rules.d 아래 로컬 규칙만 유지합니다. 현재 커스텀 규칙은 다음에 초점을 맞춥니다.
- 컨테이너 내부의 민감 파일 접근,
/etc/shadow와 root SSH key 포함 - 컨테이너 밖 클러스터 노드에서
sshd가 시작한 대화형 break-glass shell
런타임 흐름
장애 동작과 운영 리스크
- 노드 커널이
modern_ebpf를 지원하지 않으면 Falco는 규칙 평가 전에 실패합니다. - 기본 규칙을 비활성화하면 노이즈와 CPU 비용은 줄지만, 로컬 규칙으로만 커버리지가 좁아집니다.
- Loki 장애는 런타임 탐지를 멈추지 않지만, 하류 이벤트 전달을 막아 보안 이벤트 조회를 어렵게 만듭니다.
- Falco는 Kyverno security-context 정책에서 명시적으로 예외 처리된 privileged 접근 패턴이 필요합니다.
관측성
- Falco는 클러스터 로그 수집을 위해 구조화된 JSON을 stderr에 기록합니다.
- Falcosidekick은 모든 우선순위를 JSON 형식으로 Loki에 전달합니다.
- Prometheus는 활성화된 service monitor 설정을 통해 Falco와 Falcosidekick을 모두 스크레이프합니다.
검증
kubectl get applications.argoproj.io -n argocd falco
kubectl get daemonset -n falco -l app.kubernetes.io/name=falco
kubectl get deploy -n falco -l app.kubernetes.io/name=falcosidekick
kubectl get pods -n falco
kubectl logs -n falco -l app.kubernetes.io/name=falco --all-containers --tail=200
kubectl logs -n falco -l app.kubernetes.io/name=falcosidekick --all-containers --tail=200
성공 신호:
falcoArgo CD application이Healthy및Synced상태입니다.- Falco DaemonSet이 클러스터 노드 전체에서
READY가DESIRED와 동일하게 보고됩니다. - 같은 네임스페이스에 Falcosidekick deployment가 가용 상태입니다.
- Falco 로그에 반복적인
modern_ebpf드라이버 초기화 실패가 없고, Falcosidekick 로그에 반복적인 Loki 전달 오류가 없습니다.