Docker Buildx Bake Secrets 사용법 완벽 가이드! 민감한 정보 안전하게 전달하기

Docker Image를 Build하는 과정에서는 다양한 민감한 정보가 필요할 수 있습니다.

예:

  • Private Repository Token
  • API Key
  • SSH Key
  • Package 인증 정보
  • Cloud Access Key

일반적인 방식으로 정보를 전달하면 문제가 발생할 수 있습니다.

예:

ARG TOKEN

RUN git clone https://$TOKEN@github.com/private/repository

문제:

Build Layer 저장

↓

Token 정보 노출 가능

↓

보안 위험 발생

Docker Buildx Bake에서는 Secrets 기능을 사용하여 민감한 정보를 안전하게 Build 과정에 전달할 수 있습니다.

예:

docker-bake.hcl

target "production" {

  secret = [

    "id=mytoken,src=token.txt"

  ]

}

실행:

docker buildx bake production

결과:

Secret 전달

↓

Build 과정 사용

↓

Image Layer 저장 안 됨

이번 글에서는 Docker Buildx Bake Secrets의 개념부터 Secret 전달 방법, SSH 인증, Private Repository 접근, CI/CD 보안 관리까지 자세히 알아보겠습니다.

Docker Buildx Bake Secrets란 무엇인가?

Docker Buildx Bake Secrets는 Build 과정에서 필요한 민감한 데이터를 안전하게 전달하는 기능입니다.

기본 구조:

Secret 저장

↓

Build 실행

↓

임시 전달

↓

Build 종료 후 제거

중요한 특징:

  • Image Layer에 저장되지 않음
  • Docker History에 노출되지 않음
  • Build 과정에서만 사용

Docker Buildx Bake Secrets가 필요한 이유

일반적인 환경 변수 전달:

ENV PASSWORD=my-password

문제:

Image 생성

↓

환경 변수 저장

↓

정보 노출 가능

Secret 사용:

Secret 전달

↓

RUN 명령 실행

↓

자동 제거

장점:

  • 인증 정보 보호
  • Token 노출 방지
  • 보안 Build 가능

Docker Buildx Bake Secret 기본 사용법

Secret 파일 생성:

echo "my-secret-token" > token.txt

Bake 설정:

target "app" {

  secret = [

    "id=token,src=token.txt"

  ]

}

실행:

docker buildx bake app

Build 과정에서 Secret을 사용할 수 있습니다.

Docker Buildx Bake Secret Dockerfile 사용법

Dockerfile:

FROM alpine

RUN --mount=type=secret,id=token \
    cat /run/secrets/token

동작:

Secret Mount

↓

파일 접근

↓

명령 실행

↓

Secret 제거

Secret 파일은 Image에 포함되지 않습니다.

Docker Buildx Bake Secret 환경 변수 사용

파일 대신 환경 변수를 사용할 수 있습니다.

예:

export API_KEY="abcdef12345"

Bake:

target "app" {

  secret = [

    "id=apikey,env=API_KEY"

  ]

}

실행:

docker buildx bake app

환경 변수 Secret을 Build에 전달합니다.

Docker Buildx Bake Secret Private Repository 활용

Private Repository에서 코드를 가져오는 경우 Secret이 필요합니다.

예:

Private Git Repository

↓

Access Token 필요

↓

Source Download

설정:

target "app" {

  secret = [

    "id=git_token,src=token.txt"

  ]

}

Dockerfile:

RUN --mount=type=secret,id=git_token \
    git clone private-repository

인증 정보를 안전하게 사용할 수 있습니다.

Docker Buildx Bake Secret SSH Key 활용

SSH 인증도 Secret 방식으로 처리할 수 있습니다.

예:

target "app" {

  ssh = [

    "default"

  ]

}

Dockerfile:

RUN --mount=type=ssh \
    git clone git@github.com:company/project.git

활용:

  • Private Git
  • SSH 인증
  • 내부 Repository

Docker Buildx Bake Secret CI/CD 활용

CI/CD에서는 Secret 관리가 매우 중요합니다.

예:

GitHub Actions:

- name: Build Image

  run: |

    docker buildx bake production

Secret 설정:

env:

  TOKEN: ${{ secrets.TOKEN }}

Bake:

target "production" {

  secret = [

    "id=token,env=TOKEN"

  ]

}

흐름:

GitHub Secret

↓

Buildx Bake

↓

Docker Build

↓

Secret 제거

Docker Buildx Bake Secret과 Image 보안

일반 ARG 사용:

ARG PASSWORD

문제:

History 기록 가능

Secret 사용:

RUN --mount=type=secret

결과:

Build 과정만 사용

↓

Image 저장 없음

Production 환경에서 권장되는 방식입니다.

Docker Buildx Bake Secret 실무 예제

프로젝트:

project/

├── Dockerfile

├── docker-bake.hcl

└── secrets/

    └── token.txt

docker-bake.hcl:

target "production" {

  tags = [

    "registry.company.com/app:v1"

  ]

  secret = [

    "id=token,src=secrets/token.txt"

  ]

  output = [

    "type=image,push=true"

  ]

}

Dockerfile:

FROM alpine

RUN --mount=type=secret,id=token \
    echo "Using Secret"

실행:

docker buildx bake production

결과:

Secret 사용

↓

Image 생성

↓

Secret 미포함

Docker Buildx Bake Secret 확인 방법

Build 설정 확인:

docker buildx bake production --print

Secret 설정 확인:

secret

↓

id 확인

↓

src 확인

Image 확인:

docker history image-name

Secret 정보가 저장되지 않았는지 확인합니다.

Docker Buildx Bake Secret 문제 해결

Secret 파일을 찾지 못하는 경우

확인:

ls secrets/

파일 경로를 확인합니다.

Secret Mount 오류

확인:

Dockerfile:

RUN --mount=type=secret,id=name

Bake:

secret = [
"id=name,src=file"
]

ID가 동일해야 합니다.

CI/CD Secret 전달 실패

확인:

  • GitHub Secret 등록
  • 환경 변수 이름
  • 권한 설정

Docker Buildx Bake Secret 사용 시 주의사항

첫 번째는 Secret 값을 Dockerfile ARG나 ENV로 전달하지 않는 것이 좋습니다.

두 번째는 Secret 파일을 Git Repository에 업로드하면 안 됩니다.

세 번째는 CI/CD Secret 관리 기능을 사용하는 것이 안전합니다.

네 번째는 최소한의 권한만 가진 Token을 사용하는 것이 좋습니다.

Best Practice

Docker Buildx Bake Secrets 활용 방법:

  • Token 보호
  • API Key 보호
  • SSH 인증 관리
  • CI/CD Secret 활용
  • Private Repository 접근
  • Image Layer 보안 유지

자주 묻는 질문

Docker Buildx Bake Secrets는 무엇인가요?

Build 과정에서 민감한 정보를 안전하게 전달하는 기능입니다.

Secret이 Image에 저장되나요?

아닙니다.

Build 과정에서만 사용되고 Image Layer에는 저장되지 않습니다.

ARG와 Secret의 차이는 무엇인가요?

ARG는 Build 정보로 남을 가능성이 있지만 Secret은 임시 전달 방식입니다.

CI/CD에서도 사용할 수 있나요?

가능합니다.

GitHub Actions Secret 등과 함께 사용할 수 있습니다.

마무리

Docker Buildx Bake Secrets는 안전한 Docker Image Build 환경을 만들기 위한 필수 기능입니다.

API Key, Token, SSH Key 같은 민감한 정보를 일반적인 환경 변수나 ARG로 전달하면 보안 위험이 발생할 수 있습니다.

Secret 기능을 활용하면 필요한 순간에만 정보를 전달하고 Build 결과에는 남기지 않아 더욱 안전한 Container 환경을 구축할 수 있습니다.

특히 Production 환경과 CI/CD Pipeline에서는 Docker Buildx Bake Secrets를 활용하는 것이 안전한 Image 관리의 핵심입니다.

댓글 남기기