Kubernetes AppArmor 보호 설정 점검

지원되는 Linux 노드에서 워크로드에 맞는 AppArmor 프로파일을 적용하세요.

설명

AppArmor는 Linux 프로세스가 접근할 수 있는 파일과 일부 시스템 기능을 제한하는 보안 기능입니다. 필요한 프로파일이 적용되지 않으면 애플리케이션 침해 시 사용할 수 있는 동작 범위가 넓어질 수 있습니다.

명시적인 annotation이 없다는 이유만으로 AppArmor 보호가 전혀 없다고 판단하지 마세요. 노드 지원 여부와 런타임 기본값, 실제 적용된 프로파일을 확인해야 합니다.

잠재적 영향

  • 불필요한 파일이나 시스템 기능에 대한 접근이 허용될 수 있습니다.
  • 호환되지 않거나 로드되지 않은 프로파일은 파드 시작이나 정상 동작을 막을 수 있습니다.

해결 방법

  • 현재 Kubernetes에서는 지원되는 Pod 또는 컨테이너 securityContext.appArmorProfile로 RuntimeDefault 또는 필요한 Localhost 프로파일을 지정하세요.
  • AppArmor가 활성화된 노드를 사용하고 Localhost 프로파일을 파드가 실행될 노드에 미리 로드하세요. 정상 작업과 거부 로그를 시험하고 다른 보안 컨텍스트와 함께 관리하세요.

예시

기존 예제는 Kubernetes 1.30 이전의 annotation 방식이며 현재는 appArmorProfile 설정을 사용하세요. 변경 후의 localhost 프로파일은 노드에 별도로 정의하고 로드해야 합니다. 실제 배포에는 유지보수되는 이미지를 사용하세요.

변경 전

yaml
resources:
  pod:
    type: kubernetes:core/v1:Pod
    properties:
      metadata:
        annotations:
      spec:
        containers:
          - image: nginx:1.14.2
            name: nginx

변경 후

yaml
resources:
  pod:
    type: kubernetes:core/v1:Pod
    properties:
      metadata:
        annotations:
          container.apparmor.security.beta.kubernetes.io/nginx: localhost/k8s-apparmor-example-allow-write
      spec:
        containers:
          - image: nginx:1.14.2
            name: nginx

설명:

  • 변경 전: 명시적인 AppArmor annotation이 없습니다. 실제 보호는 노드와 런타임 설정을 확인해야 합니다.
  • 변경 후: nginx 컨테이너에 로컬 프로파일을 요청합니다. 프로파일 이름만으로 제한 내용이나 적용 성공이 보장되지는 않습니다.

참조