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 つの重要な利点をもたらします:
- ほぼリアルタイムのスキャン速度:スキャンは多くの場合数秒から数分で完了するため、キューのボトルネックを生じさせることなく、すべての PR コミットに対して同期的にスキャンを実行することが現実的になります。
- 差分脆弱性分析: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 を送信し、即座にバックグラウンド分析をトリガーします。
- 自動コミットステータス:Snyk はコミットチェック(例:
license/snykおよびcode/snyk)を登録し、これを GitHub または GitLab で必須のブランチ保護ルールとして設定できます。 - インラインアノテーション:DeepCode AI は PR の差分内の影響を受ける行に問題を直接フラグ付けし、ソースからシンクへのテイントフローを示します。
- DeepCode AI 修正提案:サポートされている環境では、Snyk は AI によって生成されたインラインのコード修正提案を提供し、開発者は PR インターフェイスから直接レビュー、テスト、コミットを行うことができます。
2. Snyk CLI による CI/CD パイプライン自動化
厳格なガバナンス、エアギャップ環境のランナー、または統合された CI レポートを必要とする組織にとって、パイプラインジョブ内で Snyk CLI を実行することは、実行条件、失敗基準、レポート成果物を完全に制御できるようにします。
CI パイプラインでのステップバイステップの実装
以下は、GitHub Actions と Snyk CLI を使用して継続的インテグレーションパイプラインで Snyk DeepCode AI を設定するためのエンドツーエンドのガイドです。
ステップ 1: セキュアなトークン管理
自動化パイプラインで Snyk コマンドを呼び出す前に、認証トークンを設定します:
- Snyk Console から Snyk サービスアカウントトークンを生成するか、組織の API トークンを使用します。
- 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 セキュリティダッシュボードにアップロードする)ことで、運用上の大きなメリットが得られます:
- 脆弱性はリポジトリのネイティブな Security タブに表示されます。
- 開発者は使い慣れたコードレビューインターフェイスから離れることなく、GitHub PR の会話内で正確な行アノテーションとテイントトレースを確認できます。
- 以降のコミットで脆弱性が修正されると、ダッシュボードのアラートは自動的に解決されます。
ゲーティングポリシーとしきい値の設定
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 ワークフロー向けに設計された自動修正機能が含まれています:
- コンテキストを認識した提案:DeepCode AI Fix は、脆弱性(SQL インジェクション、クロスサイトスクリプティングの欠陥、パストラバーサルなど)を取り巻く完全な AST(抽象構文木)を分析し、アプリケーションロジックを維持するパッチを合成します。
- 静的分析による検証:修正提案を提示する前に、DeepCode AI は検証パスを実行して、提案された修正が二次的な脆弱性や構文エラーを引き起こさないことを確認します。
- Human-in-the-Loop によるレビュー:PR や IDE におけるすべての AI による修正提案は、マージ前に開発者の承認を必要とします。チームは、AI 修正ツールによって生成されたコミットに対して、標準的な単体テストおよび統合テストの実行を義務付ける必要があります。
エンタープライズ展開のベストプラクティス
- モニタリングモードから開始する:最初の 2 スプリントでは、
continue-on-error: trueを指定してsnyk code testを展開します。これにより、チームはスプリントの納期を乱すことなく、初期のスキャン結果をベンチマークし、クリーンなベースラインを確立できます。 - 開発者の IDE へシフトレフトする:CI PR スキャンを Snyk Language Server や IDE プラグイン(VS Code、IntelliJ)で補完します。PR を作成する前にエディタ内で検出結果を解決することで、CI キューの競合を減らし、公開ビルドの失敗を防ぎます。
- SAST と SCA を組み合わせる:同じパイプライン内で Snyk Code(
snyk code test)と Snyk Open Source(snyk test)を併用し、独自コードとサードパーティの依存関係の両方が統一されたセキュリティポリシーの下で評価されるようにします。 - CLI バージョンを定期的に更新する:CI パイプラインで最新の CLI バージョン(v1.1297+ または公式ランナーアクション)が使用されていることを確認し、Snyk Web UI で設定された無視ルールやセキュリティポリシーが CI 実行と正確に同期するようにします。