설명
AppArmor는 Linux 컨테이너의 파일 접근과 일부 작업을 프로파일로 제한합니다. 지원되는 노드에서 적절한 프로파일을 사용하면 침해된 프로세스의 영향을 줄이는 데 도움이 됩니다. annotation이 없다는 사실만으로 보호가 전혀 없다고 단정하지 말고 런타임 기본값과 실제 적용 프로파일을 확인하세요.
잠재적 영향
- 불필요한 파일·시스템 접근이 허용되면 침해 영향이 커질 수 있습니다.
- 프로파일이 노드에 없거나 애플리케이션과 맞지 않으면 컨테이너 실행이나 정상 기능이 실패할 수 있습니다.
해결 방법
- AppArmor가 활성화된 노드에서 RuntimeDefault 또는 검토한 Localhost 프로파일을 사용하세요. 현재 Kubernetes에서는 securityContext.appArmorProfile과 이를 지원하는 공급자 구성을 사용하세요.
- Localhost 프로파일은 실행 가능한 모든 대상 노드에 먼저 로드하세요. 적용 결과와 거부 기록을 확인하고 필요한 동작을 시험하세요.
예시
Kubernetes 1.30 이전의 annotation 방식을 보여 주는 기존 예제입니다. 현재 API에는 appArmorProfile 필드를 사용하세요. 변경 후의 로컬 프로파일은 노드에 미리 준비해야 하며 예제 이름만 지정한다고 설치되지 않습니다. 실제 배포에는 유지보수되는 이미지를 사용하세요.
변경 전
hcl
resource "kubernetes_pod" "pod" {
metadata {
name = "terraform-example"
}
spec {
container {
image = "nginx:1.7.9"
name = "example"
}
}
}
변경 후
hcl
resource "kubernetes_pod" "pod" {
metadata {
name = "terraform-example"
annotations = {
"container.apparmor.security.beta.kubernetes.io/example" = "localhost/k8s-apparmor-example-allow-write"
}
}
spec {
container {
image = "nginx:1.7.9"
name = "example"
}
}
}
설명:
- 변경 전: 명시적인 AppArmor annotation이 없습니다. 런타임의 실제 기본 프로파일을 확인해야 합니다.
- 변경 후: 컨테이너 example에 미리 로드한 로컬 프로파일을 요청합니다. 프로파일 내용과 지원 여부도 검토해야 합니다.