참고:

Tetragon을 설치하고 Oracle Container Engine for Kubernetes에서 TracingPolicies 구성

소개

eBPF 기반 툴이 클라우드 전용 애플리케이션에 더 많이 사용됨에 따라 이 사용지침서에서는 OCI(Oracle Cloud Infrastructure)에서 보안 관찰성 및 적용을 위한 eBPF 기반 툴인 Tetragon을 실행하는 방법에 대해 설명합니다.

운영 체제 커널은 일반적으로 기능을 수행하는 도구와 관찰하고 영향력을 발휘하려는 작업 사이에 장애물이 거의 없으므로 시스템을 관찰하고 영향을 미치는 가장 좋은 장소입니다. 커널 공간 내에서 실행하면 프로그램에서 오버헤드가 매우 낮지만 보안 및 유지 관리 비용이 발생하는 경우가 많습니다.

eBPF는 커널 소스 코드를 변경하거나 커널 모듈을 로드하지 않고도 샌드박스 및 권한 있는 컨텍스트에서 실행할 수 있는 새로운 기능을 도입하는 방법을 제공합니다. 가상 머신 기반 프로그래밍 언어와 유사한 패러다임을 생성하면 기본적으로 작동합니다. 최신 Java 프로그램이 바이트 코드로 컴파일되는 방식과 유사한 방식으로 JVM(Java Virtual Machine)이 고유 성능을 얻기 위해 JIT 컴파일러를 사용하여 고유 코드로 컴파일되는 방식에서 eBPF 프로그램은 바이트 코드 표현을 가집니다. BPF는 Linux 커널에 깊이 연결되어 있으며 커널 내 JIT 컴파일러는 eBPF 바이트 코드를 커널 공간에서 실행할 수 있는 고유 코드로 컴파일합니다.

eBPF는 이벤트 기반 모델을 사용하여 프로그램을 로드하며 eBPF 프로그램은 "후크"에 네트워크 이벤트, 시스템 호출 등으로 기록됩니다. eBPF 프로그램이 호출된 이벤트가 발생하면 확인 및 JIT 컴파일 후 eBPF 프로그램이 커널에 로드됩니다. 확인 단계는 프로그램을 안전하게 실행하고, 올바른 권한을 가지며, 완료 시까지 실행할 수 있도록 하는 반면, JIT 컴파일은 기본 성능을 보장합니다. 대부분의 경우 eBPF 프로그램은 상위 레벨 언어로 작성되어 바이트 코드 표현으로 컴파일됩니다. 그런 다음 프로그램이 연결되는 이벤트를 기반으로 JIT 컴파일 후 실행 중인 커널에 로드됩니다.

Tetragon - eBPF 기반의 보안 관찰 및 시행

Tetragon은 보안 관찰 및 시행을 수행하는 클라우드 네이티브 eBPF 기반 도구입니다. Cilium 프로젝트의 구성요소입니다. eBPF를 사용하여 Tetragon은 커널 외부에서 실행되는 에이전트에 이벤트를 전송하지 않고 이벤트를 필터링 및 관찰하고 실시간으로 정책을 적용할 수 있습니다. Tetragon은 네트워크 연결을 열고 파일에 액세스하거나 컨테이너 내부에서 프로세스를 시작하는 워크로드와 같은 이벤트를 필터링하여 수많은 보안 및 관찰 사용 사례를 해결할 수 있습니다. 예를 들어, 응용 프로그램 컨테이너 내에서 시작되는 셸 프로세스는 보안 이벤트로 간주될 수 있습니다. 문제를 해결하려는 사람이거나 어떤 방식으로든 시스템에 대한 공격을 배제하기 위해 보안 검사를 트리거해야 하는 악의적인 작업이 될 수 있습니다. 열려 있는 네트워크 연결이나 파일을 읽을 때도 마찬가지입니다. Tetragon은 이러한 활동을 추적 및 필터링하면서 오버헤드가 거의 또는 전혀 발생하지 않으며 일반적으로 이러한 이벤트를 소프트웨어에서 감지할 수 있는 가장 빠른 단계에 도입할 수 있습니다.

Tetragon은 Kubernetes 워크로드에 적합하며 클러스터의 각 노드에서 daemonset로 실행됩니다. 그런 다음 Tetragon은 Kubernetes API 서버에서 메타데이터를 가져와 각 노드의 커널에서 관찰된 이벤트와 메타데이터를 상관시킬 수 있습니다. Tetragon을 사용하면 TracingPolicies을 사용하여 이러한 활동에 대한 실시간 필터를 손쉽게 설정할 수 있습니다. TracingPolicy는 Tetragon에서 만든 사용자 정의 리소스로, 관리자 및 DevSecOps가 커널 이벤트에 대한 필터를 Kubernetes 리소스로 만들고 배포할 수 있습니다. TracingPolicy는 시스템 호출, 프로세스 속성 및 인수를 일치시키고 일치에 대한 작업을 트리거할 수 있습니다.

목표

필요 조건

Oracle Linux 필요 조건

OKE는 Oracle Linux를 사용하고 Tetragon은 커널에서 BTF(BPF Type Format) 지원을 사용합니다. 최근 Oracle Linux 커널에는 이러한 미리 정의된 커널이 포함되어 있으므로 사용자는 5.4.17-2136.305.3.el7uek 이상의 커널을 사용해야 합니다. 또한 Tetragon은 Arm(linux/arm64) 아키텍처를 지원하지 않으며 작성 시 x86(linux/amd64)만 지원합니다. OKE 클러스터에 암 노드가 있는 경우 데몬 세트가 Init:CrashLoopBackOff 상태로 유지됩니다.

: OKE 노드 이미지의 최근 버전은 BTF 지원을 포함하는 커널을 기반으로 합니다. BTF 지원을 위한 이 주의 사항은 노드 OS가 잠시 업데이트되지 않았으며 새로 생성된 클러스터가 아닌 클러스터에만 적용됩니다. 확실하지 않은 경우 BTF 지원이 있는지 확인하는 가장 좋은 방법은 노드에 SSH로 접속하여 ls /sys/kernel/btf를 실행하는 것입니다. 여기에 나열된 모듈과 커널(vmlinux)이 표시되어야 합니다. 일반적으로 이 배치에서는 Oracle Linux 8 기반 노드가 선호됩니다.

노드가 실행 중인 커널의 버전을 확인하려면 노드에서 uname -a를 실행합니다. 이전 버전의 커널을 실행 중인 경우 노드 풀 구성에서 버전을 업그레이드할 수 있습니다. 그러나 새로 만든 노드에만 영향을 미치며 기존 노드가 자동으로 업그레이드되지 않아 실행 중일 수 있는 작업 부하의 연속성을 보장합니다. 노드 풀 업그레이드 프로세스에 따라 기존 노드를 최신 커널 버전으로 가져올 수 있습니다.

JSON 출력으로서의 이벤트 스트림은 상세하고 이해하기 어렵지만 정보 밀도가 높습니다. 이 JSON 데이터를 수집하고 분석 정보를 가져오는 방법에는 여러 가지가 있습니다. 명백한 방법은 tetragon CLI 도구를 사용하는 것입니다. Cilium과 Tetragon의 뒤에있는 Isovalent는 또한이 데이터를 분석하고 시각화하여 더 실행 가능하고 쉽게 동화 할 수있는 완전한 기능을 갖춘 상업용 제품을 제공합니다.

작업 1: tetra CLI 설치

작업 2: FileAccess 및 네트워크 관찰성을 위해 TracingPolicies 구성

TracingPolicies는 커널 이벤트에 대한 실시간 필터를 쉽게 설정할 수 있는 사용자 정의 리소스입니다. TracingPolicy는 관찰 가능성에 대한 시스템 호출을 일치시키고 필터링하며 이러한 일치에 대한 작업을 트리거합니다. Tetragon은 이 기능을 소개하는 몇 가지 예를 제공하며 TracingPolicies를 구성하는 시작점으로 사용할 수 있습니다.

이러한 이벤트는 커널 내에서 직접 모니터링되므로 이러한 호출 추적 작업에 약간의 오버헤드가 추가되며 악의적인 배우가 거의 난독 처리하거나 마스킹할 수 없습니다.

이 접근 방식의 주된 단점은 파일을 읽는 프로세스를 죽일 수 있는 조치가 반동적이라는 것입니다. 즉, 이벤트가 일어나고 있고 이전이 아니라는 사실을 알고 있습니다. 여전히 커널 레벨에서 이벤트를 필터링하고 일치시키는 데 필요한 오버헤드가 적고 이를 관찰하고 이에 대한 조치를 취할 수 있는 정책을 만들 수 있는 것은 매우 강력합니다.

문제 해결

오류: Tetragon pods가 CrashLoopBackOff 상태인 것으로 확인되면 두 가지 이유가 발생할 수 있습니다.

가능한 원인: 클러스터에 있을 경우 Arm 기반 노드에서 이 문제가 발생하기 때문입니다. 테트라곤은 아직 팔에서 뛰지 않는다.

문제 해결:

두번째 이유는 노드에 이전 커널이 있고 BTF 지원이 포함되지 않았기 때문일 수 있습니다. 이것이 실제로 문제인지 확인하려면 위에 설명된 대로 Pod에서 실패한 컨테이너에 대한 컨테이너 로그를 가져옵니다. 커널에서 BTF 지원이 부족한 경우 다음과 유사한 오류 메시지가 표시될 수 있습니다.

aborting. kernel autodiscovery failed: Kernel version BTF search failed kernel is not included in supported list.
Use --btf option to specify BTF path and/or '--kernel' to specify kernel version

이는 OS가 최근에 업데이트되거나 이전 버전의 OS가 업데이트되지 않은 노드에서 발생합니다. 이를 해결하려면 작업자 노드에 대한 최신 Oracle Linux 8 기반 OKE 또는 플랫폼 이미지로 전환할 수 있습니다. 노드 풀 구성을 이 선택 항목으로 업데이트하고 표준 노드 풀 업그레이드 프로세스에 따라 노드를 업그레이드해야 합니다.

승인

추가 학습 자원

docs.oracle.com/learn에서 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하십시오. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer을 방문하십시오.

제품 설명서는 Oracle Help Center를 참조하십시오.