Docker Buildx Bake SSH 사용법 완벽 가이드! Private Git Repository 안전하게 연결하기

Docker 이미지를 빌드할 때 외부 공개 Repository가 아닌 Private Git Repository의 코드를 가져와야 하는 경우가 있습니다.

예:

  • 사내 Git Repository
  • Private GitHub Repository
  • Private GitLab Repository
  • SSH 인증이 필요한 소스 코드
  • Private Dependency 설치

일반적인 방식으로 SSH Key를 Docker Image 내부에 복사하면 심각한 보안 문제가 발생할 수 있습니다.

잘못된 예:

Dockerfile

FROM ubuntu:22.04

COPY id_rsa /root/.ssh/id_rsa

RUN git clone git@github.com:company/private.git

문제:

SSH Key 복사

↓

Docker Layer 저장

↓

Image 분석 시 노출 위험

Docker Buildx Bake에서는 SSH Forwarding 기능을 사용하여 SSH Key를 Image에 저장하지 않고 Build 과정에서만 사용할 수 있습니다.

예:

docker-bake.hcl

target "app" {

  ssh = [
    "default"
  ]

}

Dockerfile:

FROM alpine

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

실행:

docker buildx bake app

결과:

SSH Key 전달

↓

Private Repository 접근

↓

Build 완료

↓

SSH Key 제거

이번 글에서는 Docker Buildx Bake SSH의 개념부터 SSH Agent 연결, Private Repository 접근, CI/CD 활용, 보안 관리 방법까지 자세히 알아보겠습니다.

Docker Buildx Bake SSH란 무엇인가?

Docker Buildx Bake SSH는 Docker Build 과정에서 SSH 인증 정보를 안전하게 전달하는 기능입니다.

일반 방식:

SSH Key

↓

Dockerfile 복사

↓

Image 포함 가능

SSH Forwarding 방식:

SSH Agent

↓

Build 과정 전달

↓

최종 Image 저장 없음

즉, Private Repository 접근은 가능하지만 SSH Key는 Image에 남지 않습니다.

Docker Buildx Bake SSH가 필요한 이유

Private Git Repository를 사용하는 프로젝트에서는 인증이 필요합니다.

예:

Private GitHub

↓

git clone 필요

↓

SSH 인증 필요

기존 방식:

COPY ~/.ssh/id_rsa /root/.ssh/

문제:

  • 개인 Key 노출 위험
  • Image Layer에 기록
  • 보안 취약점 발생

SSH 사용:

SSH Agent

↓

Build Container 연결

↓

Key 노출 없음

장점:

  • 안전한 인증
  • Private Repository 접근
  • Secret 관리 단순화
  • Image 보안 향상

Docker Buildx Bake SSH 기본 설정

docker-bake.hcl:

target "app" {

  context = "."

  ssh = [
    "default"
  ]

}

Dockerfile:

FROM alpine

RUN apk add git openssh

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

빌드:

docker buildx bake app

동작:

SSH Agent 연결

↓

Git 인증

↓

Repository Clone

↓

Key 제거

Docker Buildx Bake SSH 실행 방법

SSH Agent 활성화:

eval $(ssh-agent)

SSH Key 추가:

ssh-add ~/.ssh/id_rsa

확인:

ssh-add -l

Build:

docker buildx bake app

SSH 인증이 Build 과정에 전달됩니다.

Docker Buildx Bake SSH Private GitHub 사용 예제

Dockerfile:

FROM node:20

RUN apt update && apt install -y git openssh-client

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

docker-bake.hcl:

target "production" {

  tags = [
    "company/app:v1"
  ]

  ssh = [
    "default"
  ]

}

실행:

docker buildx bake production

결과:

GitHub SSH 인증

↓

Private Repository 다운로드

↓

Image 생성

Docker Buildx Bake SSH와 GitLab Private Repository 활용

GitLab Private Repository도 동일하게 사용할 수 있습니다.

Dockerfile:

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

Bake 설정:

target "app" {

  ssh = [
    "default"
  ]

}

활용:

  • 사내 GitLab
  • Private Package Repository
  • 내부 코드 공유

Docker Buildx Bake SSH와 Private Package 설치

SSH 인증이 필요한 Package 설치에도 활용할 수 있습니다.

예:

RUN --mount=type=ssh \
    npm install git+ssh://git@github.com/company/package.git

사용:

  • Private npm Package
  • Private Python Package
  • 내부 Library

Docker Buildx Bake SSH와 CI/CD 활용

CI 환경에서는 SSH Key를 직접 저장하지 않고 Secret 관리 기능을 사용합니다.

GitHub Actions 예:

- name: Setup SSH

  uses: webfactory/ssh-agent@v0.9.0

  with:

    ssh-private-key: ${{ secrets.SSH_KEY }}


- name: Build

  run: |

    docker buildx bake app

흐름:

GitHub Secret

↓

SSH Agent 실행

↓

Buildx Bake

↓

Private Repository 접근

Docker Buildx Bake SSH GitLab CI 활용

GitLab CI Variables 사용:

before_script:

  - eval $(ssh-agent)

  - ssh-add $SSH_PRIVATE_KEY

Build:

script:

  - docker buildx bake app

SSH Key를 Repository에 저장하지 않습니다.

Docker Buildx Bake SSH 실무 예제

프로젝트 구조:

project/

├── Dockerfile

├── docker-bake.hcl

└── .github/workflows/

docker-bake.hcl:

target "production" {

  context = "."

  tags = [
    "company/app:v1"
  ]

  ssh = [
    "default"
  ]

}

Dockerfile:

FROM ubuntu:22.04

RUN apt update && apt install -y git openssh-client

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

실행:

docker buildx bake production

결과:

SSH 인증

↓

Private Code 다운로드

↓

Docker Image 생성

Docker Buildx Bake SSH 문제 해결

Permission denied 오류

오류:

Permission denied (publickey)

확인:

ssh-add -l

SSH Key가 등록되어 있는지 확인합니다.

SSH Agent 연결 오류

확인:

echo $SSH_AUTH_SOCK

Agent 환경 변수를 확인합니다.

Git Clone 실패

확인:

  • Repository 권한
  • SSH Key 권한
  • Git 주소

Docker Buildx Bake SSH 사용 시 주의사항

첫 번째는 SSH Key를 Dockerfile에 COPY하지 않아야 합니다.

두 번째는 CI/CD Secret 기능을 사용하는 것이 좋습니다.

세 번째는 최소 권한 SSH Key를 사용하는 것이 안전합니다.

네 번째는 사용하지 않는 SSH Key는 삭제해야 합니다.

Best Practice

Docker Buildx Bake SSH 활용 방법:

  • SSH Forwarding 사용
  • Dockerfile COPY 금지
  • CI/CD Secret 연결
  • Private Repository 접근 활용
  • Deploy Key 사용
  • 최소 권한 관리

자주 묻는 질문

Docker Buildx Bake SSH는 무엇인가요?

Docker Build 과정에서 SSH 인증을 안전하게 전달하는 기능입니다.

SSH Key가 Image에 저장되나요?

아닙니다.

Build 과정에서만 사용되고 최종 Image에는 포함되지 않습니다.

Private GitHub Repository를 사용할 수 있나요?

가능합니다.

SSH 인증을 통해 접근할 수 있습니다.

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

가능합니다.

GitHub Actions, GitLab CI, Jenkins 등에서 활용할 수 있습니다.

마무리

Docker Buildx Bake SSH는 Private Repository와 안전하게 연결하기 위한 중요한 기능입니다.

SSH Key를 Image 내부에 저장하지 않고 Build 과정에서만 전달하기 때문에 보안성을 유지하면서 Private Code를 가져올 수 있습니다.

특히 기업 환경, CI/CD Pipeline, Private Package 관리 환경에서는 Docker Buildx Bake SSH를 활용하면 더욱 안전한 Docker 빌드 시스템을 구축할 수 있습니다.

댓글 남기기