Snyk導入(SCA + SAST)についてまとめたメモです。
目的
PR 作成時に以下を自動チェックする。
- SCA: 依存関係の脆弱性チェック(
snyk test) - SAST: ソースコード静的解析(
snyk code test)
Snyk アカウント作成
- https://app.snyk.io/ にアクセスする。
Sign upからアカウントを作成する(GitHubアカウントで作成するとrepo連携が楽です)。- ログイン後、Organizationを作成または選択する。
GitHub 連携(repo アクセス設定)
- Snyk 側で GitHub Integration を有効化する。
- アクセス対象リポジトリを選択する。
- Snyk の対象 Organization でリポジトリを Import する。
- Snyk Code(SAST)を Organization 設定で有効化する。
補足:
- 今回の CI は GitHub Actions +
SNYK_TOKENで実行しているため、Snyk 側の分析有効化に加えて GitHub Secrets 設定が必要。 SNYK_ORG_IDは Snyk Organization の ID を指定する。
現在の Workflow 挙動
トリガー:
pull_requestのopened,synchronize,reopened,ready_for_review
実行条件:
- Draft PR はスキップ(
if: github.event.pull_request.draft == false)
ジョブ内ステップ:
actions/checkout@v5pnpm/action-setup@v4actions/setup-node@v5(Node24.14.1)pnpm install --frozen-lockfilesnyk/actions/node@master+command: test(SCA)snyk/actions/node@master+command: code test(SAST)
.github/workflows/snyk-pr.yml
name: Snyk PR Check
on:
pull_request:
types:
- opened
- synchronize
- reopened
- ready_for_review
permissions:
contents: read
jobs:
snyk:
name: Snyk Dependency Scan
if: github.event.pull_request.draft == false
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Setup pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v5
with:
node-version: 24.14.1
cache: pnpm
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Run Snyk test
uses: snyk/actions/node@master
with:
command: test
args: --org=${{ secrets.SNYK_ORG_ID }}
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
- name: Run Snyk Code test
uses: snyk/actions/node@master
with:
command: code test
args: --org=${{ secrets.SNYK_ORG_ID }}
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
必要な GitHub Secrets
現在のWorkflow設定では以下が必要です。
SNYK_TOKENSNYK_ORG_ID
補足:
- Workflow では
args: --org=${{ secrets.SNYK_ORG_ID }}を SCA/SAST の両方で指定している。 SNYK_ORG_IDが未設定だとSnyk実行時に失敗する可能性がある。
参考: 現在のWorkflow
- SCA:
command: testargs: --org=${{ secrets.SNYK_ORG_ID }}
- SAST:
command: code testargs: --org=${{ secrets.SNYK_ORG_ID }}
運用メモ
- SCA は OSS 依存関係(
package.json/lockfile)を対象にする。 - SAST はアプリケーションコードを対象にする。
- どちらも PR 時に同時実行されるため、セキュリティ観点の回帰を早期検知できる。
確認手順
- GitHubの対象リポジトリに
SNYK_TOKENとSNYK_ORG_IDを登録 - 任意のブランチでPRを作成
- Actionsで
Snyk PR Checkを確認 Run Snyk test(SCA)とRun Snyk Code test(SAST)が実行されることを確認