npm provenance로 패키지의 신뢰성 보장하기

2023년 05월 12일

npm의 자격 증명이 유출되면, 공격자는 npm 레지스트리에 조작된 패키지를 게시할 수 있습니다. 신뢰할 수 있는 패키지로 가장한 악성 패키지를 다운로드하고 사용하는 개발자는 악성 코드에 노출될 수 있습니다. 이러한 위협은 패키지를 사용하는 서비스에 큰 영향을 미칠 수 있으며, 신뢰성과 보안을 저해할 수 있습니다.

이를 방지하기 위해 npm은 패키지와 함께 출처를 게시할 수 있는 기능인 npm provenance를 제공합니다. 어디에서 빌드되고, 어떤 경로를 통하여 게시되는지에 대한 메타데이터를 담은 provenance를 함께 게시하여 패키지의 신뢰성을 보장할 수 있습니다.

npm package provenance badge

npm package provenance badge

이번 글에서는 GitHub Actions에서 패키지와 함께 출처를 게시하는 방법을 소개합니다.

TL;DR

npm 레지스트리에 패키지와 함께 출처를 게시하여 패키지의 신뢰성을 보장할 수 있습니다.

npm provenance로 패키지의 신뢰성 보장하기

GitHub Actions에서 provenance 기능을 사용하려면 아래의 권한이 필요합니다.

permissions:
  id-token: write # to mint an ID-token

또한, 워크플로우는 GitHub-hosted runner에서 구동되어야 합니다.

runs-on: ubuntu-latest # or windows-latest, macos-latest, etc.

기존 npm publish 명령에 --provenance 플래그를 추가하면 패키지와 함께 출처를 게시할 수 있습니다.

run: npm publish --provenance

워크플로우에 적용하기

아래의 예시는 npm 레지스트리에 패키지와 함께 출처를 게시하는 워크플로우입니다.

name: Publish Package to npmjs
on:
  release:
    types: [created]
jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      id-token: write
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: "18.x"
          registry-url: "https://registry.npmjs.org"
      - run: npm install -g npm
      - run: npm ci
      - run: npm publish --provenance --access public
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

마치며

GitHub Actions를 통하여 게시된 provenance

GitHub Actions를 통하여 게시된 provenance

npm provenance를 통하여 패키지의 출처를 게시함으로써, 개발자들은 출처 정보를 확인하고 신뢰할 수 있는 패키지를 선택할 수 있게 됩니다.

만약 GitHub Actions 상에서 패키지를 게시하고 있다면, 위의 예시를 참고하여 적용해보시는 것을 추천드립니다.

참고 링크


한종우

꾸준히 고민하고 해결해나가는 엔지니어 한종우입니다.

이전 글

Early Return은 과연 좋은가?

다음 글

워크플로우의 중복 줄이기