Docker Buildx provenance는 이미지를 OCI Index로 만들어 SageMaker와 Lambda에서 깨진다
·수정 2026.05.04·수정 1회
요약
- Provenance는 이미지의 빌드 출처(소스, 빌더, 입력, 시각)를 기록하는 SLSA 공급망 보안 메타데이터.
- Buildx v0.10+부터 기본 활성화되어 이미지를 단일 manifest가 아닌 OCI Image Index 형식으로 푸시한다.
- SageMaker/Lambda는 OCI Index를 못 읽기 때문에
Unsupported manifest media type application/vnd.oci.image.index.v1+json에러가 발생 —provenance: false로 꺼야 한다.
본문
Provenance란
이미지의 "출처 증명서". 이미지가 언제, 어디서, 무엇으로, 어떻게 빌드되었는지를 기록한 메타데이터.
기록되는 항목:
- 소스: 어떤 Git 저장소의 어떤 커밋에서 빌드됐는지
- 빌더: BuildKit 버전, 빌드 머신(GitHub Actions runner 등)
- 입력: base image, build args, 환경변수
- 빌드 명령: Dockerfile의 어떤 instruction이 실행됐는지
- 시각: 빌드 시작/종료 시간
왜 만들어졌나 — SLSA
소프트웨어 공급망 공격(SolarWinds, npm 악성 패키지 등)을 막기 위해 Google이 주도한 SLSA (Supply-chain Levels for Software Artifacts) 프레임워크의 일부. "이 바이너리가 정말 우리가 의도한 소스에서 나온 것인가?"를 검증할 수 있게 함.
무엇이 문제인가 — OCI Image Index
Buildx v0.10부터 provenance attestation이 자동으로 첨부되며, 이미지가 단일 manifest가 아니라 OCI Image Index 형식으로 푸시된다.
provenance: true (Buildx v0.10+ 기본값) — OCI Index
sha256:xxx (OCI Image Index)
├── sha256:aaa (linux/amd64 이미지)
├── sha256:bbb (provenance attestation, JSON)
└── sha256:ccc (SBOM attestation)
provenance: false — 단일 Docker manifest
sha256:xxx (Docker manifest v2)
└── (단일 이미지)
호환성 매트릭스
| 형식 | Media Type | SageMaker | Lambda | ECS/Fargate | K8s |
|---|---|---|---|---|---|
| OCI Index | application/vnd.oci.image.index.v1+json |
❌ | ❌ | ✅ | ✅ |
| Docker v2 | application/vnd.docker.distribution.manifest.v2+json |
✅ | ✅ | ✅ | ✅ |
증상 (SageMaker):
Unsupported manifest media type application/vnd.oci.image.index.v1+json for image
해결: provenance: false
docker/build-push-action에서 명시적으로 끄기:
- name: Build and push image
uses: docker/build-push-action@v5
with:
context: ${{ inputs.context }}
push: true
tags: ${{ steps.tags.outputs.full-tags }}
provenance: false # SageMaker/Lambda 호환을 위해
CLI로 직접 빌드하는 경우:
docker buildx build --provenance=false --push -t my-image:latest .
검증 방법
# 이미지에 붙은 provenance 확인
docker buildx imagetools inspect my-image:latest --format '{{ json .Provenance }}'
# 매니페스트 형식 확인
docker buildx imagetools inspect my-image:latest --raw
서명까지 추가하려면 cosign으로 in-toto attestation 서명/검증.
트레이드오프
| 측면 | 의미 |
|---|---|
| 목적 | 공급망 보안 (이 이미지를 믿어도 되는가?) |
| 비용 | 이미지가 OCI Index 형식 → 일부 런타임이 못 읽음 |
| 선택 | OCI Index 지원 환경(ECS/K8s) → 켜두기 / SageMaker·Lambda 배포 → 끄기 |