privileged로 실행되는 Kubernetes 컨테이너

Kubernetes의 특권 컨테이너는 노드 자원에 넓게 접근할 수 있어 격리를 크게 약화시킵니다.

설명

컨테이너의 securityContext.privileged: true는 일반적인 보안 제약을 완화하고 넓은 호스트 접근을 허용합니다. Linux에서는 모든 capability를 부여하며 seccomp나 AppArmor 같은 보호도 우회할 수 있습니다.

일반 애플리케이션에는 특권 모드를 사용하지 않는 것이 좋습니다. 특수한 시스템 작업에 필요하다면 일반 워크로드와 분리하고 접근을 엄격히 제한하세요.

잠재적 영향

  • 컨테이너가 노드의 장치나 커널 기능에 과도하게 접근할 수 있습니다.
  • 하나의 애플리케이션 침해가 노드와 다른 워크로드의 피해로 확대될 수 있습니다.

해결 방법

  • securityContext.privileged를 제거하거나 false로 설정하세요.
  • 필요한 기능에는 가능한 한 좁은 capability와 장치 접근만 허용하세요.
  • hostPath, hostNetwork와 추가 capability도 검토하고 배포 템플릿에 제한을 반영한 뒤 필요한 기능을 시험하세요.

예시

두 Pod는 설정 비교 예시입니다. 실제 배포에서는 사용하는 이미지와 워크로드 템플릿에 맞춰 적용하세요.

변경 전

yaml
apiVersion: v1
kind: Pod
metadata:
  name: privileged-pod
spec:
  containers:
    - name: app
      image: gcr.io/google-samples/node-hello:1.0
      securityContext:
        privileged: true

컨테이너를 특권 모드로 실행합니다.

변경 후

yaml
apiVersion: v1
kind: Pod
metadata:
  name: standard-pod
spec:
  containers:
    - name: app
      image: gcr.io/google-samples/node-hello:1.0
      securityContext:
        privileged: false

특권 모드를 사용하지 않습니다. 실행 사용자와 다른 권한을 제한하는 작업도 별도로 필요합니다.

참조