広告枠を募集中 ご相談ください

エンジニアリングチームが CI パイプラインに Snyk DeepCode AI を統合して PR の脆弱性スキャンを自動化する方法

365Finds Editorial
Wiki 記事 11,430 本収録

あなたの AI で 365 Wiki を使う

下のプロンプトをコピーして、普段使っている AI に貼り付け、そのまま質問してください。

完全版 Skill をダウンロード

まずはプロンプトでお試しください。よく使う場合は完全版 365Wiki Skill をインストールすると、毎回貼り付ける必要がありません。普段使う AI がなければ、Gemini や Microsoft Copilot のウェブ版でも使えます。

Snyk DeepCode AI を継続的インテグレーション(CI)パイプラインに統合することで、ソフトウェアエンジニアリングチームは、コードが本番環境に到達する前に静的アプリケーションセキュリティテスト(SAST)の脆弱性を自動的に検出および修正できるようになります。自動化されたセキュリティチェックをプルリクエスト(PR)のライフサイクルに直接組み込むことで、組織は開発者の開発速度を落とすことなく「シフトレフト」を実現できます。チームのインフラストラクチャやガバナンス要件に応じて、エンジニアリングチームはネイティブなソースコード管理(SCM)Webhook 連携を介してこのワークフローを実装するか、GitHub Actions、GitLab CI/CD、Azure Pipelines、Jenkins などのパイプラインオーケストレーターに Snyk コマンドラインインターフェイス(CLI)を直接組み込むことで実装します。

CI ワークフローにおける Snyk DeepCode AI の理解

DeepCode AI を搭載した Snyk Code は、長時間のコンパイルや数時間に及ぶコードベース全体のインデックス作成を必要とする従来の重厚な SAST エンジンとは大きく異なります。DeepCode AI は、シンボリック AI(セキュリティリサーチャーによって設計された論理プログラミングおよび形式的テイント分析)とジェネレーティブ AI(安全なコードパターンおよび脆弱性の修正に特化してトレーニングされた大規模言語モデル)を組み合わせたハイブリッドアプローチを採用しています。

このハイブリッドアーキテクチャは、継続的インテグレーション環境において 2 つの重要な利点をもたらします:

  1. ほぼリアルタイムのスキャン速度:スキャンは多くの場合数秒から数分で完了するため、キューのボトルネックを生じさせることなく、すべての PR コミットに対して同期的にスキャンを実行することが現実的になります。
  2. 差分脆弱性分析:PR ワークフローにおいて、エンジンはベースブランチに対するコードの差分(diff)を評価します。これにより、新しく導入されたセキュリティ上の欠陥が分離され、ベースラインブランチにすでに存在していた既存の技術的負債によって開発者がブロックされるのを防ぎます。

統合アーキテクチャ:ネイティブ SCM 対 パイプライン CLI

エンジニアリングチームは通常、PR の脆弱性スキャンを自動化するために 2 つのアーキテクチャアプローチから選択するか、多層防御のためにこれらを組み合わせます:

アーキテクチャ実装メカニズム最適な用途主要な機能
ネイティブ SCM 統合Snyk Web UI 経由で設定された Snyk GitHub App、GitLab 連携、または Bitbucket Cloud 連携開発者への迅速なフィードバック、ビルドパイプラインの設定が不要自動 PR ステータスチェック、インラインコードレビューコメント、ワンクリックでの DeepCode AI 修正提案
CI/CD パイプラインランナーワークフローランナー(GitHub Actions、GitLab Runners など)内で呼び出される Snyk CLI(snyk code test)カスタムビルドゲーティング、コンプライアンスレポート、SARIF ダッシュボードのエクスポートきめ細かな終了コードゲーティング、マルチステージパイプラインのオーケストレーション、SARIF セキュリティダッシュボードのアップロード

1. ネイティブ SCM PR チェック

ネイティブ統合は、Snyk とリポジトリホスト(GitHub、GitLab、Bitbucket など)を直接接続します。開発者がプルリクエストを作成または更新すると、SCM は Snyk に Webhook を送信し、即座にバックグラウンド分析をトリガーします。

2. Snyk CLI による CI/CD パイプライン自動化

厳格なガバナンス、エアギャップ環境のランナー、または統合された CI レポートを必要とする組織にとって、パイプラインジョブ内で Snyk CLI を実行することは、実行条件、失敗基準、レポート成果物を完全に制御できるようにします。

CI パイプラインでのステップバイステップの実装

以下は、GitHub Actions と Snyk CLI を使用して継続的インテグレーションパイプラインで Snyk DeepCode AI を設定するためのエンドツーエンドのガイドです。

ステップ 1: セキュアなトークン管理

自動化パイプラインで Snyk コマンドを呼び出す前に、認証トークンを設定します:

  1. Snyk Console から Snyk サービスアカウントトークンを生成するか、組織の API トークンを使用します。
  2. CI プロバイダー(例: GitHub Secrets、GitLab CI/CD Variables)に、トークンを SNYK_TOKEN という名前の暗号化されたリポジトリまたは組織のシークレットとして保存します。

ステップ 2: パイプラインワークフローファイルの設定

CI 設定に専用のセキュリティスキャンジョブを追加します。次の例は、main を対象とするプルリクエストでトリガーされる GitHub Actions ワークフローを示しています:

name: Snyk DeepCode AI Pull Request Scan

on:
  pull_request:
    branches: [ main, develop ]

jobs:
  security-scan:
    name: Snyk Code SAST Analysis
    runs-on: ubuntu-latest
    permissions:
      contents: read
      security-events: write

    steps:
      - name: Check out repository
        uses: actions/checkout@v4

      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: Install Snyk CLI
        run: npm install -g snyk

      - name: Authenticate Snyk CLI
        run: snyk auth ${{ secrets.SNYK_TOKEN }}

      - name: Run Snyk DeepCode AI Scan
        continue-on-error: true
        run: >
          snyk code test
          --severity-threshold=high
          --sarif-file-output=snyk-code.sarif
        env:
          SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}

      - name: Upload SARIF to GitHub Code Scanning
        uses: github/codeql-action/upload-sarif@v3
        with:
          sarif_file: snyk-code.sarif

ステップ 3: SARIF 結果のエクスポートと表示

snyk code test に --sarif-file-output=snyk-code.sarif フラグを渡すことで、CLI は結果を Static Analysis Results Interchange Format(SARIF)で出力します。

このファイルを github/codeql-action/upload-sarif を介して GitHub Code Scanning にアップロードする(または JUnit/gl-sast フォーマットコンバーターを介して GitLab セキュリティダッシュボードにアップロードする)ことで、運用上の大きなメリットが得られます:

ゲーティングポリシーとしきい値の設定

CI セキュリティの自動化においてよくある失敗パターンは、大量の低重要度な検出結果によって開発者を圧倒し、ブロックしてしまうことです。チームは段階的な適用ポリシーを確立する必要があります:

重要度しきい値によるゲーティング

--severity-threshold フラグを使用して、スキャンの失敗を実行可能なリスク層に制限します:

# Block only on High and Critical vulnerabilities
snyk code test --severity-threshold=high

# Fail build immediately if Critical flaws exist
snyk code test --severity-threshold=critical

しきい値以上の脆弱性が検出されると、snyk code test は終了コード 1 で終了し、CI ジョブが失敗して、ブランチ保護が有効になっている場合に PR のマージがブロックされます。

.dcignore による非本番コードのフィルタリング

テストモック、ドキュメントのサンプル、サードパーティのビルド成果物による誤検知を防ぐために、リポジトリのルートに .dcignore ファイルを作成します:

# Exclude test fixtures and mock data
tests/fixtures/
**/*.spec.ts
**/*.test.js

# Exclude generated build outputs and documentation
dist/
docs/examples/

DeepCode AI エンジンは .gitignore と .dcignore の両方を尊重し、本番環境向けのアプリケーションソースコードのみが分析されるようにします。

AI 支援による修正:Snyk DeepCode AI Fix

脆弱性を検出することは目標の半分にすぎません。それらを迅速に解決することこそが、チームが ROI を得るための要となります。Snyk DeepCode AI には、PR ワークフロー向けに設計された自動修正機能が含まれています:

エンタープライズ展開のベストプラクティス

  1. モニタリングモードから開始する:最初の 2 スプリントでは、continue-on-error: true を指定して snyk code test を展開します。これにより、チームはスプリントの納期を乱すことなく、初期のスキャン結果をベンチマークし、クリーンなベースラインを確立できます。
  2. 開発者の IDE へシフトレフトする:CI PR スキャンを Snyk Language Server や IDE プラグイン(VS Code、IntelliJ)で補完します。PR を作成する前にエディタ内で検出結果を解決することで、CI キューの競合を減らし、公開ビルドの失敗を防ぎます。
  3. SAST と SCA を組み合わせる:同じパイプライン内で Snyk Code(snyk code test)と Snyk Open Source(snyk test)を併用し、独自コードとサードパーティの依存関係の両方が統一されたセキュリティポリシーの下で評価されるようにします。
  4. CLI バージョンを定期的に更新する:CI パイプラインで最新の CLI バージョン(v1.1297+ または公式ランナーアクション)が使用されていることを確認し、Snyk Web UI で設定された無視ルールやセキュリティポリシーが CI 実行と正確に同期するようにします。