Kubernetes는 애플리케이션 배포 및 관리에 강력한 도구입니다. 보안이 중요한 환경에서는 애플리케이션이 할 수 있는 작업을 제한하는 것이 필요합니다. 이번 글에서는 Kubernetes에서 AppArmor 프로필을 사용하여 컨테이너의 보안을 강화하는 방법에 대해 알아보겠습니다.
AppArmor(Application Armor)는 Linux 커널 보안 모듈 중 하나로, 프로그램이 수행할 수 있는 작업을 제어합니다. AppArmor 프로필을 통해 프로그램이 액세스할 수 있는 파일, 네트워크 리소스, 시스템 호출 등을 제한할 수 있습니다. 이를 통해 애플리케이션이 악의적인 동작을 하거나 침해 사고가 발생할 경우 피해를 최소화할 수 있습니다.
Kubernetes 1.4 버전부터 AppArmor 지원이 추가되었으며, 현재 버전 1.20 기준으로 베타 단계에 있습니다. Kubernetes에서 AppArmor를 사용하려면 다음 조건을 충족해야 합니다.
이번 예제에서는 메시지를 출력하고 한 시간 동안 잠드는 'sleeper' pod을 실행합니다. 이 컨테이너는 파일 시스템에 대한 쓰기 액세스가 필요하지 않으므로, 'deny-write' AppArmor 프로필을 적용하여 보호하겠습니다.
먼저, 'aa-status' 명령어를 실행하여 프로필이 로드되어 있는지 확인합니다.
클러스터의 모든 노드에서 이 명령어를 실행하여 'apparmor-deny-write' 프로필이 로드되어 있는지 확인합니다.
다음은 'sleeper' pod의 정의 파일입니다. 이 파일에서는 'ubuntu-sleeper' 컨테이너에 'apparmor-deny-write' 프로필을 적용합니다.
위의 YAML 파일을 사용하여 pod을 생성합니다.
kubectl apply -f ubuntu-sleeper.yaml
Pod이 실행 상태가 되면 로그를 확인하여 컨테이너에서 출력된 메시지를 봅니다.
$ kubectl logs ubuntu-sleeper
Hello from the sleeper pod!
컨테이너에 셸을 열고 파일을 생성하려고 시도하여 '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를 활용하면 애플리케이션이 수행할 수 있는 작업을 세밀하게 제어할 수 있어, 보안 사고 발생 시 피해를 최소화할 수 있습니다.