Docker 이미지를 운영 환경에서 사용할 때 중요한 것은 단순히 이미지가 정상적으로 실행되는 것만이 아닙니다.
최근 서버 환경에서는 다음과 같은 질문에 답할 수 있어야 합니다.
- 이 이미지는 어디서 만들어졌는가?
- 어떤 소스 코드에서 빌드되었는가?
- 어떤 명령으로 생성되었는가?
- 신뢰할 수 있는 빌드 과정인가?
이러한 문제를 해결하기 위해 사용하는 기능이 Provenance(빌드 출처 증명) 입니다.
Docker Buildx Bake에서는 Attestation 기능을 활용하여 이미지와 함께 Provenance 정보를 생성할 수 있습니다.
예:
docker-bake.hcl
target "app" {
tags = [
"company/app:v1"
]
attest = [
"type=provenance"
]
}
실행:
docker buildx bake app --push
결과:
Docker Image 생성
↓
Build Provenance 생성
↓
Registry 저장
이번 글에서는 Docker Buildx Bake Provenance의 개념부터 생성 방법, 설정 옵션, SBOM과 차이점, CI/CD 활용, 공급망 보안 적용 방법까지 자세히 알아보겠습니다.
Docker Buildx Bake Provenance란 무엇인가?
Provenance는 Docker Image가 어떻게 만들어졌는지 기록하는 빌드 증명 정보입니다.
쉽게 말하면 Docker Image의 “제작 과정 기록”입니다.
일반적인 Image:
Docker Image
↓
Container 실행
Provenance 적용:
Docker Image
+
Build 정보
+
Source 정보
+
Builder 정보
+
생성 과정
이미지가 어떤 과정을 거쳐 만들어졌는지 검증할 수 있습니다.
Docker Buildx Bake Provenance가 필요한 이유
기존 Docker Image는 내부적으로 실행은 가능하지만 제작 과정을 확인하기 어렵습니다.
기존 방식:
Docker Image
↓
누가 만들었는지 확인 어려움
문제:
- 악성 Image 위험
- 출처 확인 어려움
- 공급망 공격 대응 어려움
- 보안 감사 어려움
Provenance 사용:
Image
↓
Build 기록 확인
↓
신뢰성 검증
장점:
- 이미지 출처 확인
- 빌드 과정 추적
- 보안 감사 지원
- Supply Chain Security 강화
Docker Buildx Bake Provenance 기본 설정
docker-bake.hcl:
target "production" {
context = "."
tags = [
"company/app:v1"
]
attest = [
"type=provenance"
]
}
빌드:
docker buildx bake production --push
동작:
Dockerfile
↓
Build 실행
↓
Provenance 생성
↓
Registry 저장
Docker Buildx Bake Provenance 생성 정보
Provenance에는 다양한 빌드 정보가 포함됩니다.
Build 정보
포함 내용:
- 빌드 시간
- Build 명령
- Builder 정보
예:
Build Time
Builder Version
Build Configuration
Source 정보
포함 내용:
- Git Repository
- Commit 정보
- Source 위치
예:
Repository
↓
Commit Hash
↓
Build Result
환경 정보
포함 내용:
- Build Platform
- Docker Version
- Build Engine
빌드 환경을 추적할 수 있습니다.
Docker Buildx Bake Provenance와 SBOM 차이
Provenance와 SBOM은 함께 사용하지만 목적이 다릅니다.
Provenance
확인 내용:
“어떻게 만들어졌는가?”
예:
Source Code
↓
Build Process
↓
Docker Image
SBOM
확인 내용:
“무엇이 들어있는가?”
예:
Image
├── Ubuntu
├── OpenSSL
├── Python
└── Library
비교:
| 기능 | 목적 |
|---|---|
| Provenance | 빌드 과정 검증 |
| SBOM | 내부 구성 확인 |
둘을 함께 사용하면 이미지 보안을 강화할 수 있습니다.
Docker Buildx Bake Provenance 옵션 설정
기본:
attest = [
"type=provenance"
]
더 자세한 정보 생성:
attest = [
"type=provenance,mode=max"
]
차이:
mode=min
기본 정보 중심
간단한 Build 정보
mode=max
상세 정보 포함
전체 Build 과정 정보
운영 환경에서는 보안 요구사항에 따라 선택합니다.
Docker Buildx Bake Provenance와 Registry 저장
Provenance는 일반 Image Layer처럼 저장되지 않습니다.
OCI Artifact 형태로 Registry에 함께 저장됩니다.
구조:
Registry
├── Docker Image
├── Provenance
└── SBOM
Push:
docker buildx bake app --push
Registry에서 Image와 함께 관리됩니다.
Docker Buildx Bake Provenance 확인 방법
Image 정보를 확인합니다.
명령:
docker buildx imagetools inspect company/app:v1
확인:
Manifest
↓
Attestation
↓
Provenance 정보
빌드 출처와 Metadata를 확인할 수 있습니다.
Docker Buildx Bake Provenance CI/CD 활용
CI/CD 환경에서는 자동으로 Provenance를 생성하는 것이 좋습니다.
GitHub Actions 예:
- name: Build Image
run: |
docker buildx bake production --push
docker-bake.hcl:
target "production" {
attest = [
"type=provenance,mode=max"
]
}
자동 과정:
Code Push
↓
CI 실행
↓
Docker Build
↓
Provenance 생성
↓
Registry 저장
Docker Buildx Bake Provenance Kubernetes 활용
Kubernetes 환경에서는 많은 Container Image를 운영합니다.
문제:
수많은 Image
↓
출처 확인 어려움
Provenance 적용:
Container Image
↓
Build 정보 확인
↓
배포 승인
기업 Kubernetes 환경에서 Image 신뢰성 검증에 활용됩니다.
Docker Buildx Bake Provenance 실무 예제
프로젝트:
project/
├── Dockerfile
├── docker-bake.hcl
└── deployment.yaml
docker-bake.hcl:
target "production" {
tags = [
"registry.company.com/app:v1"
]
platforms = [
"linux/amd64",
"linux/arm64"
]
attest = [
"type=provenance,mode=max",
"type=sbom"
]
}
실행:
docker buildx bake production --push
결과:
Docker Image
+
Build Provenance
+
SBOM
↓
Secure Container Image
Docker Buildx Bake Provenance 보안 활용
Provenance는 Software Supply Chain Security에서 중요한 역할을 합니다.
활용:
- Image 검증
- CI/CD 보안 강화
- 배포 승인
- 감사 기록
예:
Image 요청
↓
Provenance 확인
↓
신뢰 가능한 Build인지 판단
↓
배포 진행
Docker Buildx Bake Provenance 문제 해결
Provenance가 생성되지 않는 경우
확인:
docker buildx version
최신 Buildx 사용이 필요합니다.
Registry에서 보이지 않는 경우
확인:
- Registry OCI Artifact 지원 여부
- Push 완료 여부
- Image Manifest 확인
정보가 너무 많은 경우
설정:
mode=min
사용하여 Metadata 양을 줄일 수 있습니다.
Docker Buildx Bake Provenance 사용 시 주의사항
첫 번째는 Provenance 정보에 빌드 환경 정보가 포함될 수 있습니다.
두 번째는 공개 Registry 사용 시 노출 범위를 확인해야 합니다.
세 번째는 운영 환경에서는 보안 정책과 함께 사용하는 것이 좋습니다.
네 번째는 SBOM과 함께 적용하면 더 효과적입니다.
Best Practice
Docker Buildx Bake Provenance 활용 방법:
- Production Image 적용
- mode=max 활용
- SBOM과 함께 사용
- CI/CD 자동 생성
- Registry 저장
- Image 검증 프로세스 구축
자주 묻는 질문
Docker Buildx Bake Provenance는 무엇인가요?
Docker Image가 어떤 과정으로 생성되었는지 기록하는 빌드 증명 정보입니다.
SBOM과 다른 점은 무엇인가요?
Provenance는 생성 과정을 기록하고 SBOM은 Image 내부 소프트웨어 목록을 제공합니다.
Kubernetes에서도 사용할 수 있나요?
가능합니다.
Container Image 검증과 보안 관리에 활용할 수 있습니다.
CI/CD에서 자동 생성할 수 있나요?
가능합니다.
GitHub Actions, GitLab CI, Jenkins 등에서 자동 생성할 수 있습니다.
마무리
Docker Buildx Bake Provenance는 Docker Image의 신뢰성을 높이는 핵심 보안 기능입니다.
단순히 Image를 생성하는 것을 넘어 어떤 소스와 환경에서 만들어졌는지 확인할 수 있어 현대적인 DevOps 환경에서 중요하게 활용됩니다.
특히 Kubernetes, CI/CD, Private Registry 환경에서는 Provenance와 SBOM을 함께 적용하면 안전한 Docker 공급망 보안 체계를 구축할 수 있습니다.