설명
seccomp는 컨테이너 프로세스가 사용할 수 있는 시스템 호출을 제한해 커널 공격 표면을 줄입니다. Unconfined로 실행하면 이 제한을 사용하지 않습니다. 명시적 설정이 없더라도 kubelet이나 런타임 기본값에 따라 프로파일이 적용될 수 있으므로 실제 적용 상태를 확인해야 합니다.
잠재적 영향
- 불필요한 시스템 호출을 허용하면 침해된 프로세스가 악용할 수 있는 기능이 늘어날 수 있습니다.
- 애플리케이션에 맞지 않는 프로파일은 정상 작업을 차단할 수 있습니다.
해결 방법
- 지원되는 Linux 워크로드의
security_context.seccomp_profile에type = "RuntimeDefault"를 지정하거나 검토한 Localhost 프로파일을 사용하세요. 컨테이너별 재정의와 특권 실행도 확인하세요. - 프로파일 적용 후 필요한 기능을 시험하고 거부 기록을 점검하세요. seccomp와 함께 비 root 실행, 최소 capability와 보안 업데이트를 유지하세요.
예시
잘못된 과거 annotation 대신 지원되는 seccomp_profile 블록을 사용한 비교입니다. Linux 노드와 호환되는 공급자가 필요하며, 실제 배포에는 유지보수되는 이미지를 사용하세요.
변경 전
hcl
resource "kubernetes_pod" "pod" {
metadata {
name = "terraform-example"
}
spec {
security_context {
seccomp_profile {
type = "Unconfined"
}
}
container {
image = "nginx:1.7.9"
name = "example"
}
}
}
변경 후
hcl
resource "kubernetes_pod" "pod" {
metadata {
name = "terraform-example"
}
spec {
security_context {
seccomp_profile {
type = "RuntimeDefault"
}
}
container {
image = "nginx:1.7.9"
name = "example"
}
}
}
설명:
- 변경 전: Unconfined로 seccomp 제한을 사용하지 않습니다.
- 변경 후: 런타임의 기본 seccomp 프로파일을 명시적으로 요청합니다.