[System Hardening] Kubernetes에서 AppArmor 프로필을 사용하는 방법

IMKUNYOUNG·2024년 6월 21일
0

CKS

목록 보기
42/70

Kubernetes는 애플리케이션 배포 및 관리에 강력한 도구입니다. 보안이 중요한 환경에서는 애플리케이션이 할 수 있는 작업을 제한하는 것이 필요합니다. 이번 글에서는 Kubernetes에서 AppArmor 프로필을 사용하여 컨테이너의 보안을 강화하는 방법에 대해 알아보겠습니다.

AppArmor란?

AppArmor(Application Armor)는 Linux 커널 보안 모듈 중 하나로, 프로그램이 수행할 수 있는 작업을 제어합니다. AppArmor 프로필을 통해 프로그램이 액세스할 수 있는 파일, 네트워크 리소스, 시스템 호출 등을 제한할 수 있습니다. 이를 통해 애플리케이션이 악의적인 동작을 하거나 침해 사고가 발생할 경우 피해를 최소화할 수 있습니다.

Kubernetes와 AppArmor

Kubernetes 1.4 버전부터 AppArmor 지원이 추가되었으며, 현재 버전 1.20 기준으로 베타 단계에 있습니다. Kubernetes에서 AppArmor를 사용하려면 다음 조건을 충족해야 합니다.

  • 모든 노드에서 AppArmor 커널 모듈이 활성화되어 있어야 합니다.
  • AppArmor 프로필이 모든 노드에 로드되어 있어야 합니다.
  • 사용하는 컨테이너 런타임이 AppArmor를 지원해야 합니다 (Docker, Cryo, Containerd 등).

예제: Ubuntu 컨테이너에 AppArmor 적용하기

이번 예제에서는 메시지를 출력하고 한 시간 동안 잠드는 'sleeper' pod을 실행합니다. 이 컨테이너는 파일 시스템에 대한 쓰기 액세스가 필요하지 않으므로, 'deny-write' AppArmor 프로필을 적용하여 보호하겠습니다.

1. AppArmor 프로필 확인

먼저, 'aa-status' 명령어를 실행하여 프로필이 로드되어 있는지 확인합니다.

클러스터의 모든 노드에서 이 명령어를 실행하여 'apparmor-deny-write' 프로필이 로드되어 있는지 확인합니다.

2. Pod 정의

다음은 'sleeper' pod의 정의 파일입니다. 이 파일에서는 'ubuntu-sleeper' 컨테이너에 'apparmor-deny-write' 프로필을 적용합니다.

3. Pod 생성

위의 YAML 파일을 사용하여 pod을 생성합니다.

kubectl apply -f ubuntu-sleeper.yaml

4. 로그 확인

Pod이 실행 상태가 되면 로그를 확인하여 컨테이너에서 출력된 메시지를 봅니다.

$ kubectl logs ubuntu-sleeper
Hello from the sleeper pod!

5. 프로필 테스트

컨테이너에 셸을 열고 파일을 생성하려고 시도하여 'deny-write' 프로필이 제대로 적용되었는지 확인합니다. 'deny-write' 프로필이 루트 파일 시스템의 파일 및 디렉터리에 대한 쓰기를 거부하므로 파일 생성이 실패할 것입니다.

$ kubectl exec -it ubuntu-sleeper -- touch /tmp/test
touch: cannot touch '/testfile': Permission denied
command terminated with exit code 1

마무리

이 예제를 통해 Kubernetes에서 AppArmor 프로필을 사용하여 컨테이너의 보안을 강화하는 방법을 알아보았습니다. AppArmor를 활용하면 애플리케이션이 수행할 수 있는 작업을 세밀하게 제어할 수 있어, 보안 사고 발생 시 피해를 최소화할 수 있습니다.

0개의 댓글