설명
Seccomp는 컨테이너가 사용할 수 있는 시스템 호출을 제한하는 보안 기능입니다. 실제 적용된 프로파일이 없거나 Unconfined이면 컨테이너가 더 넓은 시스템 호출 범위를 사용할 수 있습니다.
일반 워크로드는 securityContext.seccompProfile.type: RuntimeDefault를 우선 검토하세요. 파드 설정과 컨테이너별 재정의, 노드의 기본 프로파일을 함께 확인해야 합니다. 노드의 SeccompDefault가 활성화되어 있으면 필드가 생략되어도 런타임 기본값을 적용할 수 있습니다.
잠재적 영향
- 컨테이너 탈취 시 더 많은 시스템 호출이 악용될 수 있습니다.
- 런타임 격리 수준이 낮아질 수 있습니다.
- 워크로드별 보안 기준이 제각각이 되어 운영 통제가 어려워질 수 있습니다.
해결 방법
- 파드 또는 컨테이너의
securityContext.seccompProfile에RuntimeDefault를 명시하고 실제 적용을 확인하세요. - 특수한 요구가 있으면 검토한
Localhost프로파일을 해당 노드에 제공하고 정상 동작을 시험하세요. - 구형 annotation 대신 현재 필드를 사용하세요. privileged 컨테이너는 Seccomp 제한을 우회하므로 해당 권한도 별도로 제거하세요.
예시
첫 예제의 annotation 키는 지원되는 Seccomp 설정이 아닙니다. 이미지 이름은 예시이며 실제 애플리케이션 이미지로 바꿔 프로파일 호환성을 시험하세요.
변경 전
yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-test-3
annotations:
seccomp.security.alpha.kubernetes.io/defaultProfileName: "rntim/dfl"
spec:
containers:
- name: foobar
image: foo/bar:latest
변경 후
yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-test-1
spec:
securityContext:
seccompProfile:
type: RuntimeDefault
containers:
- name: foobar
image: foo/bar:latest
설명:
- 변경 전: 지원되지 않는 annotation 키와 오타가 있는 값으로는 원하는 프로파일이 적용되지 않습니다. 실제 적용 상태와 노드 기본값을 확인하세요.
- 변경 후: 현재 파드 securityContext 필드로 런타임 기본 프로파일을 지정합니다. 컨테이너별 설정으로 재정의하지 않는지도 확인하세요.