Unmasked proc mount를 허용하는 Kubernetes 구성

Unmasked proc mount를 허용하면 컨테이너 런타임의 기본 경로 보호가 해제될 수 있습니다.

설명

레거시 PodSecurityPolicy의 allowedProcMountTypes에 Unmasked를 허용하면 컨테이너가 /proc 등의 기본 마스킹과 읽기 전용 보호를 해제하도록 요청할 수 있습니다. 민감한 커널 정보를 노출하거나 보호된 경로에 대한 접근 범위를 넓힐 수 있으므로 일반 워크로드에서는 Default를 사용해야 합니다.

이 설정만으로 호스트의 모든 프로세스나 파일에 접근할 수 있는 것은 아닙니다. 실제 범위는 네임스페이스, 권한과 런타임에 따라 달라집니다. PSP는 Kubernetes 1.21에서 사용 중단되고 1.25에서 제거되었으므로 현재 클러스터에서는 Pod Security Admission이나 대체 정책으로 기본 경로 보호를 적용하세요.

잠재적 영향

  • 기본적으로 숨겨진 시스템 정보가 컨테이너에 노출될 수 있습니다.
  • 추가 권한과 결합하면 커널 인터페이스를 악용하거나 시스템 동작에 영향을 줄 위험이 커집니다.

해결 방법

  • 레거시 정책의 allowedProcMountTypes에서 Unmasked를 제거하고 Default만 허용하세요.
  • 실제 워크로드의 procMount도 기본 설정으로 유지하고, 불필요한 특권과 호스트 네임스페이스 공유를 제거하세요.
  • 정책 전환 후 필요한 애플리케이션 기능이 정상 동작하는지 확인하세요.

예시

다음은 PSP를 지원하던 클러스터의 정책 발췌입니다. 다른 필수 정책 필드는 생략했으며 Kubernetes 1.25 이상에는 적용할 수 없습니다.

변경 전

yaml
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: restricted
spec:
  allowedProcMountTypes:
    - Unmasked

Unmasked를 요청하는 컨테이너를 허용합니다. 정책이 허용한다는 사실과 실제 컨테이너가 그 옵션을 사용하는지는 구분해야 합니다.

변경 후

yaml
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: restricted
spec:
  allowedProcMountTypes:
    - Default

Default만 허용해 기본 마스킹과 읽기 전용 경로 보호를 유지합니다. 다른 권한과 격리 설정도 함께 제한해야 합니다.

참조