From 7d36f4fddb16a0714240041042719d27857a8e5a Mon Sep 17 00:00:00 2001 From: wbsong111 Date: Thu, 20 Aug 2026 16:55:55 +0900 Subject: [PATCH] =?UTF-8?q?SBOM=5FPIPELINE=5FIMAGE=20=EB=A5=BC=20docker.io?= =?UTF-8?q?/paasup=20=EC=9C=BC=EB=A1=9C=20=EC=98=AE=EA=B8=B4=EB=8B=A4=20(#?= =?UTF-8?q?30)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 파이프라인 실행 이미지가 개인 네임스페이스(docker.io/wbsong111)를 가리키고 있었다. 카탈로그의 다른 자체 빌드 이미지는 2026-08-03 에 전부 docker.io/paasup 으로 이전됐는데 이것만 남아 있었다 — "카탈로그가 배포하는 이미지가 아니라 CI 도구" 라 이전 대상에서 빠졌던 것이다. before docker.io/wbsong111/sbom-pipeline:latest after docker.io/paasup/sbom-pipeline:20260820 롤링 태그를 쓰지 않는다 --------------------- :latest 를 유지하지 않고 날짜 태그로 갔다. 이 Dockerfile 은 helm/trivy 를 **빌드 시점 최신으로 설치**하므로 같은 파일이 매번 다른 이미지를 낸다 — 태그가 "무엇으로 스캔했는지" 의 기록이어야 한다. Repo Variable 이 전체 ref 를 담으므로 고정 태그를 써도 워크플로 수정이 필요 없다. 이번 이미지가 담은 것: helm v3.21.4 · trivy 0.74.0 · python 3.13.5 · git 2.47.3 검증 ---- push docker.io/paasup/sbom-pipeline:20260820 (linux/amd64) 변수 갱신 gh variable set SBOM_PIPELINE_IMAGE CI 실제 동작 helm-catalog-sbom limit=3 실행 → 전체 success (Preflight 도구 확인 · 인벤토리 추출 · SBOM · 스캔 · 게이트 판정 전부 통과) 문서의 낡은 참조 4곳(doc/sbom-pipeline.md)과 Dockerfile 헤더 절차, sbom.yml 주석 예시를 고쳤다. Dockerfile 헤더에는 왜 :latest 를 쓰지 않는지도 적었다. Closes #30 Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/sbom.yml | 2 +- doc/sbom-pipeline.md | 8 ++++---- scripts/pipeline/Dockerfile | 8 ++++++-- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/.github/workflows/sbom.yml b/.github/workflows/sbom.yml index ab25cc3..174bbd8 100644 --- a/.github/workflows/sbom.yml +++ b/.github/workflows/sbom.yml @@ -32,7 +32,7 @@ jobs: timeout-minutes: 120 container: # helm+trivy+python3+bash+git 보유 이미지. scripts/pipeline/Dockerfile 로 빌드해 푸시한 뒤 - # Repo Variable SBOM_PIPELINE_IMAGE 에 그 태그를 지정한다. (예: docker.io/paasup/sbom-pipeline:latest — + # Repo Variable SBOM_PIPELINE_IMAGE 에 그 태그를 지정한다. (예: docker.io/paasup/sbom-pipeline:20260820 — # 재빌드/네임스페이스 전환은 별도 수동 작업, MEMORY.md 참고) image: ${{ vars.SBOM_PIPELINE_IMAGE }} env: diff --git a/doc/sbom-pipeline.md b/doc/sbom-pipeline.md index 9244285..32d78c4 100644 --- a/doc/sbom-pipeline.md +++ b/doc/sbom-pipeline.md @@ -90,7 +90,7 @@ SBOM 생성 실패는 대부분 **사설/미인증 레지스트리이거나 대 ```bash docker run --rm -v "$PWD:/repo" -w /repo \ -e TRIVY_CACHE_DIR=/repo/sbom-out/cache -e DOCKER_CONFIG=/repo/sbom-out/.docker \ - docker.io/wbsong111/sbom-pipeline:latest bash -c ' + docker.io/paasup/sbom-pipeline:20260820 bash -c ' bash scripts/pipeline/extract-helm-images.sh manifests/helm sbom-out bash scripts/pipeline/generate-sbom.sh sbom-out/images_final.tsv sbom-out # 인증: DOCKER_CONFIG/TRIVY_USERNAME bash scripts/pipeline/scan-sbom.sh sbom-out @@ -105,7 +105,7 @@ docker run --rm -v "$PWD:/repo" -w /repo \ | 베이스 | `debian:stable-slim` (**glibc**) | | 포함 도구 | `helm`(v3) · `trivy` · `python3` · `bash` · `git` | | 아키텍처 | **linux/amd64** (GitHub 러너와 일치) | -| 현재 이미지 | `docker.io/wbsong111/sbom-pipeline:latest` (public) — `paasup` 네임스페이스 이전 미완료(`MEMORY.md`) | +| 현재 이미지 | `docker.io/paasup/sbom-pipeline:20260820` (public) | > **glibc(debian) 필수**: GitHub Actions 의 `container:` 안에서 `actions/checkout`·`upload-artifact` > (node 기반)가 동작하려면 glibc 이거나 node 가 있어야 한다. `aquasec/trivy` 같은 **alpine(musl) @@ -113,7 +113,7 @@ docker run --rm -v "$PWD:/repo" -w /repo \ ```bash docker buildx build --platform linux/amd64 \ - -t docker.io/paasup/sbom-pipeline:latest \ + -t docker.io/paasup/sbom-pipeline:$(date -u +%Y%m%d) \ -f scripts/pipeline/Dockerfile --push scripts/pipeline ``` @@ -220,7 +220,7 @@ Repo Secret `CVE_API_KEY`). | 종류 | 이름 | 용도 | |------|------|------| -| **Variable** | `SBOM_PIPELINE_IMAGE` | 실행 이미지 태그 (예: `docker.io/wbsong111/sbom-pipeline:latest`) | +| **Variable** | `SBOM_PIPELINE_IMAGE` | 실행 이미지 태그 (예: `docker.io/paasup/sbom-pipeline:20260820`) | | Secret | `DOCKERHUB_USER` / `DOCKERHUB_TOKEN` | **docker.io + docker.getcollate.io rate limit 회피**. getcollate(openmetadata)는 Docker Hub 프록시라 익명 pull 시 rate limit(TOOMANYREQUESTS)에 걸림 → Docker Hub 자격증명으로 인증. `build-image.yml` 의 push 에도 같은 시크릿을 쓴다 | | Secret | `NGC_API_KEY` | **nvcr.io 인증**(NVIDIA nemo/nim — 없으면 pull 불가) | | Secret | `CVE_API_KEY` | `cve-edge-post.yml` 의 외부 엔드포인트 인증 | diff --git a/scripts/pipeline/Dockerfile b/scripts/pipeline/Dockerfile index b232fee..e5825fe 100644 --- a/scripts/pipeline/Dockerfile +++ b/scripts/pipeline/Dockerfile @@ -12,8 +12,12 @@ # # 빌드 & 푸시 (amd64 필수 — GitHub 러너가 amd64): # docker buildx build --platform linux/amd64 \ -# -t docker.io//sbom-pipeline:latest -f scripts/pipeline/Dockerfile --push scripts/pipeline -# # 이후: gh variable set SBOM_PIPELINE_IMAGE --body docker.io//sbom-pipeline:latest +# -t docker.io/paasup/sbom-pipeline:$(date -u +%Y%m%d) -f scripts/pipeline/Dockerfile --push scripts/pipeline +# # 이후: gh variable set SBOM_PIPELINE_IMAGE --body docker.io/paasup/sbom-pipeline:<태그> +# +# 롤링 태그(:latest)를 쓰지 않는다 — helm/trivy 를 빌드 시점 최신으로 설치하므로 같은 +# Dockerfile 이 매번 다른 이미지를 낸다. 날짜 태그가 "무엇으로 스캔했는지" 의 기록이다. +# 변수가 전체 ref 를 담으므로 고정 태그를 써도 워크플로 수정이 필요 없다. # ============================================================================= FROM debian:stable-slim