설명
Pod와 컨테이너의 security_context는 실행 사용자, 권한 상승, 파일 시스템 및 capability 제한을 설정하는 제어점입니다. 필요한 제한을 정하지 않고 환경 기본값에만 의존하면 워크로드의 실행 권한이 의도보다 넓어질 수 있습니다.
명시적인 블록이 없더라도 이미지, 런타임, 상위 Pod 설정이나 입장 정책이 적용될 수 있습니다. 블록의 존재만 확인하지 말고 실제 적용된 값을 검토하세요.
잠재적 영향
- 컨테이너가 필요한 범위보다 큰 권한으로 실행될 수 있습니다.
- 환경마다 다른 기본값 때문에 보안 기준이 일관되지 않을 수 있습니다.
해결 방법
- 지원되는 위치에 security_context를 설정하고 비루트 실행, 최소 capability, 읽기 전용 루트 파일 시스템 등 워크로드에 필요한 제한을 적용하세요.
- run_as_non_root는 Pod 또는 컨테이너에서, allow_privilege_escalation은 컨테이너에서 설정하세요. 공유 필드의 컨테이너 설정은 Pod 설정을 덮어쓸 수 있으므로 최종 값을 확인하세요.
- 이미지의 실행 사용자와 파일·포트 권한을 맞추고 정상 시작과 동작을 시험하세요.
예시
변경 후 var.non_root_image에는 0이 아닌 숫자형 USER로 실행되고 해당 파일·포트 권한에 맞는 유지보수 이미지를 지정하세요. 기존 nginx:1.7.9는 기본 루트 실행과 오래된 버전 때문에 변경 후 보호 설정의 실행 이미지로 적합하지 않습니다.
변경 전
hcl
resource "kubernetes_pod" "example" {
metadata {
name = "terraform-example"
}
spec {
container {
image = "nginx:1.7.9"
name = "example"
}
}
}
변경 후
hcl
resource "kubernetes_pod" "example" {
metadata {
name = "terraform-example"
}
spec {
security_context {
run_as_non_root = true
}
container {
image = var.non_root_image
name = "example"
security_context {
allow_privilege_escalation = false
}
}
}
}
설명:
- 변경 전: 명시적인 보안 컨텍스트가 없습니다. 실제 권한은 이미지와 적용된 정책도 확인해야 합니다.
- 변경 후: Pod에서 비루트 실행을 요구하고 컨테이너의 권한 상승을 제한합니다. 호환되는 이미지를 별도로 제공해야 합니다.