한 번의 명령으로 JS/TS 공급망 보안을 해결하기 위해 forgeseal을 만든 방법

발행: (2026년 3월 13일 오후 11:02 GMT+9)
5 분 소요
원문: Dev.to

Source: Dev.to

Cover image for How I built forgeseal to solve JS/TS supply chain security in one command

문제

EU 사이버 복원력 법안(EU Cyber Resilience Act)이 2026년 9월에 발효되며, 유럽에 배포되는 모든 소프트웨어 제품에 대해 소프트웨어 자재 명세서(SBOM)를 요구합니다. JavaScript와 TypeScript 팀에게 공급망 보안 툴체인은 조각조각 나뉘어 있습니다: SBOM 생성, 아티팩트 서명, 출처 증명서, 취약점 관리 각각을 위한 별도 도구가 필요합니다. 각 도구는 자체 설정과 전제를 가지고 있으며, 많은 도구가 다양한 lockfile 형식(npm v2/v3, Yarn classic, Yarn Berry v2‑v4, pnpm v6/v9, Bun)을 처리하는 데 어려움을 겪습니다.

forgeseal가 하는 일

forgeseal은 전체 공급망 보안 워크플로를 처리하는 단일 Go 바이너리입니다:

forgeseal pipeline --dir ./my-project --output-dir ./artifacts --vex-triage

이 한 줄 명령은:

  • Lockfile을 감지하고 파싱합니다(6가지 JS/TS 형식 모두 지원)
  • CycloneDX SBOM을 생성하고 올바른 PURL, 무결성 해시, 의존성 그래프를 포함합니다
  • Sigstore 키‑없는 서명으로 SBOM에 서명합니다(GPG 키 불필요)
  • CI 환경 메타데이터가 포함된 SLSA v1 출처 증명서를 생성합니다
  • OSV.dev를 조회하고 취약점 트리아지 스텁이 포함된 VEX 문서를 생성합니다

시작하기

# Install
go install github.com/sn45/forgeseal/cmd/forgeseal@latest

# Generate an SBOM
forgeseal sbom --dir ./my-project

# Full pipeline
forgeseal pipeline --dir . --output-dir ./forgeseal-output --vex-triage

각 서브‑커맨드는 독립적으로 사용할 수 있습니다:

  • SBOM만: forgeseal sbom
  • 서명만: forgeseal sign
  • VEX 트리아지만: forgeseal vex triage

Lockfile 파서 도전 과제

여섯 가지 lockfile 형식을 모두 정확히 파싱하는 것이 가장 흥미로운 엔지니어링 과제였습니다. 주요 포인트:

  • npmpackage-lock.json의 서로 다른 키 구조를 가진 v2와 v3 스키마를 모두 처리합니다.
  • Yarn Classic – 상태 머신 파서를 사용해 커스텀 텍스트 형식을 파싱합니다.
  • Yarn Berry – 자체 규칙을 가진 YAML‑유사 파일을 해석하고, 해시와 해결 정보를 추출합니다.
  • pnpm v9packagessnapshots 맵에 분산된 데이터를 교차 참조합니다.
  • Bun – 주석이 포함된 JSON(JSONC)을 처리하며, base64 해시 안에 //가 포함돼 주석처럼 보이는 경우도 올바르게 인식합니다.

검증은 10개의 주요 오픈소스 프로젝트(예: socket.io, jest, storybook, vue, astro, nuxt, svelte, next.js, elysia, hono)를 대상으로 수행했으며, 총 15 000개 이상의 컴포넌트를 모든 형식에 걸쳐 테스트했습니다. PURL, 의존성 엣지, 무결성 해시 모두 원본 lockfile과 일치했습니다.

CI 통합

forgeseal은 GitHub Action으로도 제공됩니다:

- uses: sn45/forgeseal@v1
  with:
    command: pipeline
    dir: '.'
    sign: 'true'
    attest: 'true'
    vex-triage: 'true'

GitHub Actions에서는 Sigstore 서명을 위한 OIDC 토큰이 자동으로 획득됩니다; 워크플로에 permissions: id-token: write를 설정하기만 하면 됩니다.

앞으로의 계획

핵심 파이프라인은 안정화되었습니다. 향후 추가될 기능은 다음과 같습니다:

  • 컨테이너 이미지 SBOM 지원
  • 보다 풍부한 취약점 데이터를 위한 Grype/Trivy 연동
  • CRA 요구사항에 맞춰 프로젝트의 공급망 보안 상태를 평가하는 forgeseal audit 커맨드

리포지토리:
Apache 2.0 라이선스. 기여 환영합니다.

0 조회
Back to Blog

관련 글

더 보기 »

트라비고

Gemini와 함께 말하는 속도만큼 빠르게 여행하세요! 라이브 에이전트가 몰입형 스토리텔링 및 3D 내비게이션과 만나는 곳. 이 프로젝트는 Gemini Live Ag...에 진입하기 위해 만들어졌습니다.