secure-at-inception について
secure-at-inception は、コード変更をコードベースに取り込む前に検査するセキュリティスキャンスキルです。ファイル種別に応じて SAST、SCA、IaC スキャンを選び、既存の問題を除外します。
主な機能
- 01ファイル種別に応じたスキャン選択
- 02SAST、SCA、IaC の並列実行
- 03変更で生じた問題のみ報告
- 04結果のキャッシュとファイルの絞り込み
- 05重大度に応じたブロック判定
- 06スキャン後のフィードバック指標送信
活用シーン
- 01コミット前の新規コード検査
- 02CI/CD でのプルリクエスト確認
- 03新規脆弱性と既存問題の区別
MCP 対応
Snyk MCP ツールを使ってコード、依存関係、IaC をスキャンし、フィードバック指標を送信します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ snyk/ studio-recipes --skill secure-at-inceptionインストール後、Claude Code で/secure-at-inceptionを入力して読み込まれたか確認します。
同梱ファイルreferences/severity-thresholds.mdreferences/supported-languages.md
詳細
開発開始時からのセキュリティ確保
新たに生成または変更されたすべてのコードを事前にスキャンし、セキュリティ脆弱性がコードベースに混入するのを防ぎます。インテリジェントなスキャン判断、キャッシュ、フィルタリングにより、新たな問題だけに注力できます。
ファイルの種類 → スキャンの種類の対応表
| スキャンの種類 | 対象となるファイル | MCP ツール |
|---|---|---|
| SAST(コード) | ソースファイル:.js、.ts、.py、.java、.go、.rb、.php、.cs、.swift、.kt、.scala、.rs、.c、.cpp、.dart など | snyk_code_scan |
| SCA(依存関係) | マニフェスト:package.json、requirements.txt、pom.xml、build.gradle、Gemfile、go.mod、Cargo.toml、*.csproj、composer.json など | snyk_sca_scan |
| IaC | インフラストラクチャ:.tf、.tfvars、K8s YAML(apiVersion/kind を含む)、template.json/.yaml、ARM JSON、serverless.yml | snyk_iac_scan |
スキップ:バイナリファイル、IaC ではない JSON/YAML、ドキュメント(.md、.txt、.rst)、アセット、テスト用フィクスチャ。
フェーズ 1:変更の検出
ステップ 1.1:変更されたファイルを収集する
次のいずれかの方法で変更を確認します(優先順)。
- Git diff(git リポジトリ内の場合):
git diff --name-only HEAD git diff --name-only --cached # staged files git status --porcelain - セッションのコンテキスト:現在のセッション中に作成または変更されたファイルを追跡する
- ユーザー指定のパス:ユーザーが特定のファイルまたはディレクトリを指定した場合
ステップ 1.2:スキャンの種類ごとにファイルを分類する
上記の「ファイルの種類 → スキャンの種類の対応表」を使用して、変更された各ファイルを適切なスキャンに対応付けます。IaC の YAML は、apiVersion/kind(Kubernetes)または AWSTemplateFormatVersion(CloudFormation)の有無によって、一般的な YAML と区別します。
フェーズ 2:スキャンの実行
SAST、SCA、IaC の各スキャンは互いに独立しているため、並行して実行します。該当する各スキャンの種類について(「ファイルの種類 → スキャンの種類の対応表」に基づいて判断)、以下のパラメーターを使用します。
ステップ 2.1:SAST スキャン(snyk_code_scan)
path:変更されたソースファイルを含むディレクトリ(またはプロジェクトのルート)。変更されたファイルが 5 件未満の場合は各ファイルを個別にスキャンし、それ以外の場合は親ディレクトリをスキャンしますseverity_threshold:"medium"(デフォルト)または設定値
ステップ 2.2:SCA スキャン(snyk_sca_scan)
path:プロジェクトのルート、またはマニフェストを含むディレクトリall_projects:true(モノレポの場合)severity_threshold:"medium"(デフォルト)または設定値- 注:SCA は直接の変更箇所だけでなく、依存関係ツリー全体をスキャンします。
ステップ 2.3:IaC スキャン(snyk_iac_scan)
path:IaC ファイルを含むディレクトリseverity_threshold:"medium"(デフォルト)または設定値
フェーズ 3:新たな問題に絞り込む
現在の変更によって持ち込まれた問題だけを提示するため、報告前に次のフィルターを適用します。
SAST:検出結果のファイルと行が、git diff -U0 の変更行範囲に含まれる場合のみ対象とします。@@ -X,Y +A,B @@ のハンクを解析して変更範囲を特定し、その範囲外の検出結果は既存の問題として除外します。
SCA:新規または更新されたパッケージの脆弱性数が増加しているか、重要度が上がっている場合のみ対象とします。純改善ルールを適用し、変更によって全体の脆弱性数または重要度が低下する場合は、ブロックしません。
IaC:新規追加または変更されたリソースブロックに設定ミスがある場合のみ対象とします。
フェーズ 4:報告と判断
ステップ 4.1:重要度のしきい値設定
| モード | ブロック対象 | 警告対象 | 許可 |
|---|---|---|---|
| 厳格 | 低以上 | - | - |
| 標準 | 高以上 | 中 | 低 |
| 緩和 | 重大のみ | 高 | 中、低 |
ステップ 4.2:レポートの生成
## Secure At Inception Scan Results
### Summary
| Scan Type | New Issues | Blocked |
|----------------------|------------|---------|
| Code (SAST) | X | Yes/No |
| Dependencies (SCA) | Y | Yes/No |
| Infrastructure (IaC) | Z | Yes/No |
### New Code Vulnerabilities (SAST)
| Severity | Type | File | Line | Description |
|----------|---------------|------------|------|-----------------------|
| High | SQL Injection | src/db.ts | 45 | User input in query |
### New Dependency Vulnerabilities (SCA)
| Severity | Package | Vulnerability | Fix Version |
|----------|------------------|----------------------|-------------|
| Critical | [email protected] | Prototype Pollution | 4.17.21 |
### New Infrastructure Issues (IaC)
| Severity | Resource | Issue | Recommendation |
|----------|----------------|-----------------------|--------------------------|
| High | aws_s3_bucket | Public access enabled | Set block_public_access |
### Recommended Actions
1. `/snyk-fix SNYK-JS-LODASH-1234` - Fix lodash vulnerability
2. Review `src/db.ts:45` for SQL injection fix
### Decision: [BLOCKED / ALLOWED]
[Reason based on severity threshold]
ステップ 4.3:ブロック判断ロジック
If any NEW issue severity >= threshold:
BLOCKED - do not proceed until fixed
Provide specific fix commands
Else:
ALLOWED - safe to proceed
Note any warnings for future attention
フェーズ 5:メトリクスの追跡
問題を検出し、その修正に役立った各スキャンの後に、次の値を指定して snyk_send_feedback を実行します。
path:プロジェクトのルート(絶対パス)preventedIssuesCount:検出された新たな問題の数(累積ではなく差分)fixedExistingIssuesCount:0(このスキルは既存の問題を修正するのではなく、防止します)
このスキャンがなければコミットされていた可能性のある、新しいコード内で検出された問題のみを数えます。
ベストプラクティス
- 自動実行:コードの生成後や変更後、コミットを提案する前に実行します。明示的なセキュリティチェックの依頼があった場合も実行します。
- 結果のキャッシュ:
file + content_hashをキーにして、TTL を 12 時間に設定します。変更されたファイルだけを再スキャンし、ディレクトリ単位でまとめて処理します。 - 誤検知:
.snykポリシーファイルを使って、確認済みの誤検知を抑制し、再実行して確認します。ignore: SNYK-JS-EXAMPLE-12345: - '*': reason: 'False positive - input is validated upstream' expires: 2025-12-31 - しきい値の調整:Standard モードから始めます。ブロックされる頻度が高すぎる場合は Relaxed に切り替え、低または中程度の深刻度のインシデントが発生した後は Strict に切り替えます。
- CI/CD との統合:プルリクエストの作成時、またはフィーチャーブランチへのプッシュ時に実行します。しきい値を超えた場合はマージをブロックします。
エラー処理
| 状況 | 対応 |
|---|---|
| 認証エラー | snyk_auth を実行して再試行します。それでも失敗する場合は、ユーザーに手動での認証を促します |
| スキャンのタイムアウト | 対象範囲を縮小して 1 回再試行します。それでも失敗する場合は、部分的な結果を報告します |
| 変更が検出されない | 「コードの変更が検出されませんでした。スキャン対象はありません」と報告し、依頼があればプロジェクト全体のスキャンを提案します |
| サポート対象外のファイルのみ | スキップされたファイル形式と理由の一覧を添えて、「変更にスキャン可能なファイルはありません」と報告します |
制約
- 新たな問題のみ:既存の問題を理由にブロックしてはいけません(既存の問題への対処は修正作業の役割です)。
- ノイズを最小限に:アラート疲れを防ぐため、積極的にフィルタリングします。
- 迅速なフィードバック:一般的な変更では、スキャンを 30 秒以内に完了します。
- 非破壊的:コードは変更せず、検出結果のみを報告します。
- 実行可能な出力:すべての検出結果に、明確な修正方法を示します。