SYS_ADMIN capability가 추가된 Kubernetes 컨테이너

컨테이너에 불필요한 SYS_ADMIN capability를 부여하지 마세요.

설명

SYS_ADMIN은 마운트 등 광범위한 Linux 관리 작업을 허용하는 강력한 capability입니다. 애플리케이션에 추가하면 최소 권한 원칙을 벗어나고 컨테이너 침해의 영향을 키울 수 있습니다. 실제 권한 범위는 사용자 네임스페이스와 다른 보안 통제에도 달려 있습니다.

잠재적 영향

  • 불필요한 시스템 관리 기능이 컨테이너 안에서 악용될 수 있습니다.
  • 다른 호스트 접근 권한이나 취약점과 결합하면 노드와 다른 워크로드에 영향을 줄 수 있습니다.

해결 방법

  • security_context.capabilities.add에서 불필요한 SYS_ADMIN을 제거하세요.
  • 가능한 경우 기본 capabilities를 모두 제거한 뒤 실제 필요한 좁은 권한만 추가하세요.
  • privileged, hostPath와 호스트 네임스페이스 공유도 제한하세요. SYS_ADMIN을 유지한 채 allow_privilege_escalation = false만 설정하는 것으로 해결되지 않습니다.

예시

Capability 추가 여부를 비교합니다. 이미지 버전은 기존 예시 값이므로 실제 배포에는 지원되는 이미지를 사용하세요.

변경 전

hcl
resource "kubernetes_pod" "app_pod" {
  metadata {
    name = "terraform-example"
  }

  spec {
    container {
      image = "nginx:1.7.9"
      name  = "app-container"

      security_context {
        capabilities {
          add = ["SYS_ADMIN"]
        }
      }
    }
  }
}

SYS_ADMIN을 추가해 광범위한 관리 권한을 부여합니다.

변경 후

hcl
resource "kubernetes_pod" "app_pod" {
  metadata {
    name = "terraform-example"
  }

  spec {
    container {
      image = "nginx:1.7.9"
      name  = "app-container"
    }
  }
}

SYS_ADMIN 추가를 제거했습니다. 런타임의 기본 capabilities가 모두 없어지는 것은 아니므로 필요한 최소 권한인지 확인하세요.

참조