자체 빌드 드리프트 스캔·재빌드 트리거를 제거하고 CI 파이프라인을 정리한다
hardened-containers가 이미 rescan.yml로 매일 자율 재스캔·재빌드하고, sbom.yml이 custom-values.yaml 기준으로 자체 빌드 이미지를 다른 카탈로그 이미지와 동일하게 스캔하고 있어 self-build-drift-check.yml의 트리거·전용 스캔이 순수 중복이었다 (SECURITY_IMAGES_DISPATCH_TOKEN도 등록된 적 없어 트리거 스텝은 항상 실패하던 죽은 코드). check-rebuild-needed.py가 더하던 fixable/no-fix 구분도 cve-gate.py 리포트에 이미 있어 흡수할 필요 없이 삭제했다. 근거는 ADR 0005. 곁들여 CI 위생 문제(trivy DB 캐시 없음, concurrency 없음, catalog-tag-update.yml의 브랜치 누적)를 함께 고치고, hardened-containers의 docs/image-authoring.md가 docs/image-authoring/ 로 분할된 것을 반영해 관련 링크를 정정했다. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+13
-7
@@ -12,8 +12,8 @@ GitHub Actions([.github/workflows/sbom.yml](../.github/workflows/sbom.yml))로
|
||||
|---|---|---|
|
||||
| 질문 | 우리가 배포하는 이미지에 무엇이 있는가 | 그 이미지를 어떻게 만드는가 |
|
||||
| 실행 위치 | 이 레포 | 별도 레포 `hardened-containers` |
|
||||
| 워크플로 | `sbom.yml` · `cve-edge-post.yml` | `hardened-containers` 의 `build-image.yml`(이 레포에서는 `self-build-drift-check.yml` 이 필요할 때 그것을 부른다) |
|
||||
| 단일 출처 | **이 문서** | `hardened-containers` 레포의 `docs/image-authoring.md` |
|
||||
| 워크플로 | `sbom.yml` · `cve-edge-post.yml` | `hardened-containers` 의 `build-image.yml`·`rescan.yml`(이 레포는 트리거하지 않는다) |
|
||||
| 단일 출처 | **이 문서** | `hardened-containers` 레포의 `docs/image-authoring/README.md` |
|
||||
|
||||
**카탈로그 values 가 자체 빌드 이미지(`docker.io/paasup/*`)를 가리키므로 그 이미지도 이 문서의
|
||||
스캔 대상이다** — 축이 갈린 것은 "누가 만들고 결정하는가" 이고 "누가 스캔되는가" 가 아니다.
|
||||
@@ -137,6 +137,12 @@ docker buildx build --platform linux/amd64 \
|
||||
> python 으로 갖고 있어 **승인 예외(`cve-exceptions.json`)도 실효 등급(`max(벤더,NVD)`)도
|
||||
> 적용하지 않는다.** 같은 스캔 데이터에서 다른 숫자가 나올 수 있다.
|
||||
|
||||
두 워크플로 모두 날짜 단위 키(`trivy-db-<YYYYMMDD>`)로 trivy 취약점 DB를 `actions/cache`에
|
||||
캐싱한다 — 실패해도 워크플로를 막지 않는다(`continue-on-error`, 캐시는 최적화일 뿐 정확성
|
||||
요건이 아니다). `concurrency` 그룹도 있다 — `sbom.yml`은 `sbom-${{ github.ref }}`(PR은
|
||||
새 커밋이 오면 이전 실행 취소, 스케줄은 취소 안 함), `cve-edge-post.yml`은 `cve-edge-post`
|
||||
(항상 직렬화, 외부 POST 잡이라 취소 대신 대기).
|
||||
|
||||
**PR 을 실제로 막는 게이트는 이 축에 없다** — `sbom.yml` 은 warn-only 다. 강제 게이트는
|
||||
자체 빌드 축(`hardened-containers` 레포의 `images/**` PR)에만 있다.
|
||||
|
||||
@@ -208,11 +214,11 @@ Repo Secret `CVE_API_KEY`).
|
||||
## 자체 빌드 축은 이 문서가 다루지 않는다
|
||||
|
||||
게이트가 상위 태그 교체·베이스 OS 교체로 해소되지 않는 차단 CVE 를 찾으면 자체 빌드로 간다.
|
||||
그 축은 **별도 레포 `hardened-containers`** 가 갖는다 — 빌드·검증·게이트·push 전부 그 레포
|
||||
안에서 이루어지고, 단일 출처는 그 레포의 `docs/image-authoring.md` 다. 이 카탈로그에는
|
||||
"어느 차트가 그 이미지를 가리키는가"(`catalog/image-map/`)와 드리프트 탐지
|
||||
(`scripts/build/check-rebuild-needed.py`, 주간 `self-build-drift-check.yml`)만 남아 있다 —
|
||||
이관 배경은 [doc/migrations/](migrations/self-build-images-to-hardened-containers.md).
|
||||
그 축은 **별도 레포 `hardened-containers`** 가 갖는다 — 빌드·검증·게이트·push·드리프트 재빌드
|
||||
전부 그 레포 안에서 이루어지고(`rescan.yml`이 매일 자율 재스캔·재빌드), 단일 출처는 그
|
||||
레포의 `docs/image-authoring/README.md` 다. 이 카탈로그에는 "어느 차트가 그 이미지를
|
||||
가리키는가"(`catalog/image-map/`)만 남아 있다 — 이관 배경은
|
||||
[doc/migrations/](migrations/self-build-images-to-hardened-containers.md).
|
||||
|
||||
이 문서가 알아야 할 것은 하나뿐이다: **자체 빌드 이미지도 카탈로그가 가리키는 한 위 스캔·게이트
|
||||
대상이다.** 실제로 `docker.io/paasup/*` 가 게이트 리포트에 등장한다.
|
||||
|
||||
Reference in New Issue
Block a user