Docker Buildx Bake Provenance 사용법 완벽 가이드! 빌드 출처 검증 및 공급망 보안 관리하기

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 공급망 보안 체계를 구축할 수 있습니다.

댓글 남기기