performing-sca-dependency-scanning-with-snyk について
Snyk でオープンソース依存関係の既知の脆弱性とライセンスリスクを調べるワークフローガイドです。コマンドラインや CI/CD でのスキャン、ポリシー設定、継続監視、自動修正プルリクエストを扱います。
主な機能
- 01複数言語の依存関係をスキャン
- 02Snyk CLI によるスキャン実行
- 03脆弱性ポリシーの設定
- 04新たな脆弱性情報の継続監視
- 05自動修正プルリクエストの生成
- 06オープンソースライセンスリスクの確認
活用シーン
- 01CI/CD ビルド中の依存関係チェック
- 02脆弱な推移的依存関係のトリアージ
- 03デプロイ済みプロジェクトの新規脆弱性監視
- 04依存関係のライセンス適合性確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill performing-sca-dependency-scanning-with-snykインストール後、Claude Code で/performing-sca-dependency-scanning-with-snykを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEassets/template.mdreferences/api-reference.mdstandards.mdworkflows.mdscripts/agent.pyprocess.py詳細
Snyk による SCA 依存関係スキャンの実施
使用する場面
- 既知の脆弱性が含まれている可能性のあるオープンソースパッケージをアプリケーションで使用している場合
- コンプライアンス要件により、脆弱な依存関係の追跡と修正が必要な場合(PCI DSS、SOC 2)
- CI/CD で脆弱な依存関係に対する修正 PR の自動作成が必要な場合
- ライセンスコンプライアンスのために、オープンソースライセンスの義務を把握する必要がある場合
- デプロイ済みの依存関係で新たに公開された脆弱性を継続的に監視する必要がある場合
使用しないでください。ロジックの脆弱性を含む独自アプリケーションコードのスキャンには使用しないでください(SAST を使用してください)。実行時の脆弱性検出には使用しないでください(DAST を使用してください)。コンテナの OS パッケージのみをスキャンする場合にも使用しないでください(無料の代替ツールとして Trivy を使用してください)。
前提条件
- Snyk アカウント(無料プランではオープンソースのテストを月間最大 200 回利用できます)
- Snyk CLI のインストール、または Snyk GitHub/GitLab インテグレーションの設定
- API 認証トークンを設定した SNYK_TOKEN 環境変数
- サポート対象のパッケージマニフェスト(package.json、requirements.txt、pom.xml、go.mod、Gemfile など)を含むプロジェクト
ワークフロー
ステップ 1:Snyk CLI のインストールと認証
# Install Snyk CLI
npm install -g snyk
# Authenticate with Snyk
snyk auth $SNYK_TOKEN
# Test the connection
snyk test --json | jq '.summary'
ステップ 2:CI/CD パイプラインで依存関係をスキャンする
# .github/workflows/dependency-scan.yml
name: Dependency Security Scan
on:
push:
branches: [main]
pull_request:
branches: [main]
schedule:
- cron: '0 8 * * 1' # Weekly Monday 8am
jobs:
snyk-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install dependencies
run: npm ci
- name: Run Snyk to check for vulnerabilities
uses: snyk/actions/node@master
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
args: >
--severity-threshold=high
--fail-on=upgradable
--json-file-output=snyk-results.json
- name: Upload results to Snyk
if: always()
uses: snyk/actions/node@master
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
command: monitor
args: --project-name=${{ github.repository }}
- name: Upload SARIF
if: always()
run: |
npx snyk-to-html -i snyk-results.json -o snyk-report.html
ステップ 3:複数の言語向けに Snyk を設定する
# Python project scanning
snyk test --file=requirements.txt --severity-threshold=high --json > snyk-python.json
# Java/Maven project
snyk test --file=pom.xml --severity-threshold=medium --json > snyk-java.json
# Go module scanning
snyk test --file=go.mod --severity-threshold=high --json > snyk-go.json
# Docker image dependency scanning
snyk container test myapp:latest --severity-threshold=high --json > snyk-container.json
# Monorepo: scan all projects
snyk test --all-projects --severity-threshold=high --json > snyk-all.json
# IaC scanning (bonus)
snyk iac test terraform/ --severity-threshold=medium --json > snyk-iac.json
ステップ 4:組織向けに Snyk ポリシーを設定する
# .snyk policy file
version: v1.25.0
ignore:
SNYK-JS-LODASH-1018905:
- '*':
reason: "Prototype pollution in lodash. Not exploitable in our usage - no user input reaches affected function."
expires: 2026-06-01T00:00:00.000Z
created: 2026-02-23T00:00:00.000Z
SNYK-PYTHON-REQUESTS-6241864:
- '*':
reason: "SSRF in requests redirect handling. Mitigated by allowlist at proxy layer."
expires: 2026-04-01T00:00:00.000Z
patch: {}
# Severity threshold for CI failures
failOnSeverity: high
ステップ 5:修正プルリクエストの自動作成を有効にする
# Snyk fix: generate fix PRs for vulnerable dependencies
snyk fix --dry-run # Preview changes
# Apply fixes locally
snyk fix
# Enable auto-fix PRs via Snyk dashboard:
# 1. Navigate to Organization Settings > Integrations > GitHub
# 2. Enable "Automatic fix pull requests"
# 3. Set "Fix only direct dependencies" or "Fix direct and transitive"
# 4. Configure branch target (main or develop)
ステップ 6:ライセンスコンプライアンススキャン
# Check license compliance
snyk test --json | jq '.licensesPolicy'
# Snyk license policy configuration via organization settings:
# - Approved licenses: MIT, Apache-2.0, BSD-2-Clause, BSD-3-Clause, ISC
# - Restricted licenses: GPL-3.0, AGPL-3.0 (copyleft risk)
# - Unknown licenses: Flag for manual review
主な概念
| 用語 | 定義 |
|---|---|
| SCA | Software Composition Analysis(ソフトウェア構成分析)。オープンソースの依存関係における脆弱性とライセンスリスクを特定します |
| Transitive Dependency | 推移的依存関係。直接の依存関係が持つ依存関係で、多くの場合、開発者には見えませんが、脆弱性の侵入経路になる可能性があります |
| Fix PR | Snyk が自動生成するプルリクエスト。脆弱な依存関係を、修正済みバージョンにアップグレードします |
| Snyk Monitor | 継続的な監視モード。デプロイ済みのプロジェクトを監視し、新たに公開された脆弱性を検出します |
| Exploit Maturity | 脆弱性に既知のエクスプロイトや概念実証が存在するか、または既知のエクスプロイトがないかについての Snyk の評価です |
| Reachable Vulnerability | 依存関係に存在するだけでなく、アプリケーションコードから実際に呼び出される関数に存在する脆弱性です |
| License Policy | 承認、制限、またはレビューが必要なオープンソースライセンスを定める、組織レベルのルールです |
ツールとシステム
- Snyk Open Source:10 以上の言語エコシステムにわたる依存関係をスキャンする SCA ツール
- Snyk CLI:依存関係のローカルスキャンと CI/CD スキャンに使用するコマンドラインインターフェイス
- Snyk Advisor:保守状況、人気度、セキュリティシグナルを評価するパッケージ健全性スコアリングツール
- OWASP Dependency-Check:脆弱性の照合に NVD データを使用する無料の代替 SCA ツール
- npm audit / pip-audit:基本的な脆弱性チェックに使用する、言語固有の組み込み監査ツール
よくあるシナリオ
シナリオ:重大な推移的依存関係の脆弱性のトリアージ
コンテキスト:Snyk が、推移的依存関係(Java アプリケーションの log4j)に重大な RCE 脆弱性があると報告しました。直接依存関係からは、まだ修正パッチがリリースされていません。
対応方法:
snyk test --jsonを使い、依存関係のパスを確認して、どの直接依存関係が脆弱な推移的依存関係を取り込んでいるかを特定します- エクスプロイトの成熟度を確認します。「Mature」または「Proof of Concept」の場合は、ただちに優先して対応します
- 直接的な修正がない場合は、Snyk のパッチ機能を使うか、ビルド設定で推移的依存関係のバージョンを上書きします
- Maven の場合:
<dependencyManagement>セクションを追加し、推移的依存関係の安全なバージョンを強制的に指定します - npm の場合:package.json に
overridesセクションを追加し、安全なバージョンを固定します - パッチがまだ利用できない場合は、有効期限を設定した Snyk の無視設定を追加します
- 推移的依存関係を更新するリリースがないか、直接依存関係を監視します
注意点:「その機能を直接使っていない」からといって推移的依存関係の脆弱性を無視するのは危険です。攻撃者は依存関係の境界をまたいで脆弱性を連鎖させる可能性があります。バージョンの上書きにより、直接依存関係と推移的依存関係の間で API 互換性が損なわれることがあります。
出力形式
Snyk Dependency Scan Report
=============================
Project: org/web-application
Manifest: package.json
Dependencies: 342 (47 direct, 295 transitive)
Scan Date: 2026-02-23
VULNERABILITY SUMMARY:
Critical: 1 (1 fixable)
High: 4 (3 fixable)
Medium: 12 (8 fixable)
Low: 23 (15 fixable)
CRITICAL:
SNYK-JS-EXPRESS-1234567
Package: [email protected] (direct)
Severity: Critical (CVSS 9.8)
Exploit: Mature
Fix: Upgrade to [email protected]
Path: [email protected]
HIGH:
SNYK-JS-JSONWEBTOKEN-5678901
Package: [email protected] (transitive)
Severity: High (CVSS 7.6)
Exploit: Proof of Concept
Fix: Upgrade [email protected] (which upgrades jsonwebtoken)
Path: [email protected] > [email protected]
LICENSE ISSUES:
[RESTRICTED] GPL-3.0: [email protected] (transitive via other-pkg)
QUALITY GATE: FAILED (1 Critical with fix available)
コメント
Markdown 対応