설명
컨테이너 이미지를 다이제스트 없이 태그만으로 지정하면 같은 태그가 다른 이미지 내용을 가리킬 수 있습니다. 이 경우 배포 시점마다 실제로 실행되는 이미지가 달라질 수 있어 재현성이 떨어집니다.
운영 환경에서는 검증한 이미지의 다이제스트를 고정해 실행할 내용을 분명히 하세요. 다이제스트 고정만으로 이미지가 신뢰할 수 있거나 취약점이 없다는 사실이 보장되지는 않습니다.
잠재적 영향
- 같은 구성에서도 의도하지 않은 이미지 내용이 배포될 수 있습니다.
- 검증되지 않은 이미지가 실행되거나 보안 점검과 사고 분석이 어려워질 수 있습니다.
해결 방법
- 컨테이너 이미지에 실제 저장소 경로와 검증한
@sha256:...다이제스트를 지정하세요. 필요한 플랫폼의 이미지 또는 이미지 인덱스를 확인하세요. - 이미지 서명과 출처, 취약점을 확인하고 보안 업데이트를 검토한 뒤 고정한 다이제스트를 갱신하세요.
예시
변경 후의 image_repository에는 실제 저장소 경로를, verified_image_digest에는 해당 이미지에서 확인한 SHA-256의 64자리 16진수 값을 지정하세요. 유지보수되는 이미지를 사용하세요.
변경 전
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 {
container {
image = "${var.image_repository}@sha256:${var.verified_image_digest}"
name = "example"
}
}
}
설명:
- 변경 전: nginx 태그만 지정합니다. 태그가 가리키는 내용이 바뀔 수 있습니다.
- 변경 후: 실제 저장소와 검증한 다이제스트를 입력받아 이미지 내용을 고정합니다. 이미지의 안전성 검토는 별도로 필요합니다.