
SBOM을 조회하고 osv.dev로 온디맨드 취약점 스캔을 수행하는 정적 웹 애플리케이션입니다. GitHub/GitLab Pages에 쉽게 배포할 수 있습니다.
SBOM(Software Bill of Materials) 파일의 소프트웨어 의존성을 표시하는 간단한 정적 웹 애플리케이션입니다. 정적 사이트이므로 GitLab Pages, GitHub Pages, Netlify와 같은 모든 정적 웹 호스팅 서비스에 쉽게 호스팅할 수 있습니다.
trivy image <image> --format=cyclonedx --output=sbom.json --scanners vulngrype <image> --output cyclonedx-json > sbom.json현재 BOM View는 JSON 형식의 CycloneDX 및 SPDX를 지원합니다. 이는 syft와 같은 도구로 생성할 수 있습니다.
이 애플리케이션은 런타임에 SBOM을 동적으로 로드하도록 설계되었습니다. 자체 SBOM을 추가하려면 프로젝트를 다시 빌드할 필요가 없습니다. 배포된 정적 사이트의 루트 디렉터리(예: 페이지 작업이 제공하는 dist 또는 public 폴더)에서 다음 단계를 따르세요.
sboms 디렉터리 생성: 아직 존재하지 않는 경우 sboms라는 디렉터리를 만듭니다.
SBOM 추가: CycloneDX/SPDX JSON 파일을 sboms 디렉터리에 복사합니다.
인덱스 파일 업데이트: sboms 디렉터리 안에 index.json이라는 파일을 생성하거나 업데이트합니다. 이 파일은 애플리케이션에 사용 가능한 SBOM을 알려줍니다. 파일은 문자열의 단일 JSON 배열을 포함해야 하며, 각 문자열은 해당 디렉터리에 있는 SBOM의 파일 이름입니다.
예를 들어, my-app.json과 another-lib.json이 있는 경우 index.json 파일은 다음과 같아야 합니다.
[
"my-app.json",
"another-lib.json"
]
그러면 애플리케이션이 index.json을 가져와 SBOM 선택 드롭다운을 채우고 선택 시 해당 파일을 로드합니다.
다음은 사전 빌드된 릴리스를 가져오고, SBOM을 추출하며, 배포를 위해 동적으로 index.json을 생성하는 .gitlab-ci.yml 구성 예시입니다.
stages:
- sbom
- deploy
create_sbom:
stage: sbom
image: alpine:3.23.2
before_script:
- apk add syft
script:
- mkdir sboms
- syft alpine:3.19 -o cyclonedx-json=sboms/alpine-cyclone.json
artifacts:
paths:
- sboms
pages:
stage: deploy
image: alpine:3.23.2
before_script:
- apk add curl jq
script:
- curl -L https://github.com/hristiy4n/bom-view/releases/download/v0.4.0/bom-view-v0.4.0-dist.tar.gz | tar zx
- mv dist public
- mkdir public/sboms
- cp sboms/* public/sboms
- |
find sboms -maxdepth 1 -type f -name '*.json' ! -name 'index.json' \
| sed 's|.*/||' \
| sort \
| jq -R . | jq -s . > public/sboms/index.json
needs:
- job: create_sbom
artifacts:
paths:
- public
이 구성의 실제 예시는 다음에서 확인할 수 있습니다: https://security-dashboard-a9b4f8.gitlab.io/
최종 배포 디렉터리의 구조는 다음과 같아야 합니다.
dist/
├── assets/
│ └── ... (CSS 및 JS 파일)
├── index.html
└── sboms/
├── index.json
├── sbom1.json
├── sbom2.json
└── ...