🔐diff-scanning-with-aws-security-agent
- ソース
- GitHub で見る ↗
説明
指定したgit refからの変更コードのみを対象に、AWS Security Agentによる高速な差分スキャンを実行します。 次のような場合に使用: - 変更箇所をスキャンしたい - 差分スキャンを実行したい - セキュリティ上の問題について変更内容を確認したい - コミット前にスキャンしたい - PR前にスキャンしたい - その他、pre-commit / pre-pushのセキュリティチェックを行いたい
原文を表示
Run a fast AWS Security Agent diff scan on only the changed code since a git ref. Use when the user asks to scan changes, run a diff scan, check what changed for security issues, scan before committing, scan before PR, or any pre-commit/pre-push security check.
ユースケース
- ✓変更箇所をスキャンしたい
- ✓差分スキャンを実行したい
- ✓セキュリティ上の問題を確認したい
- ✓コミット前にスキャンしたい
- ✓PR前にスキャンしたい
本文(日本語訳)
AWS Security Agent — Diff スキャン
gitのrefから変更されたコードのみをスキャンします。フルスキャンより高速で、差分に絞って検出結果を提示します。事前のフルスキャンは不要です。
ローカル状態
.security-agent/config.json から agent_space_id と region を読み込みます。
ファイルが存在しない場合は、先に setup-security-agent ワークフローをインラインで実行してください。
スキャン履歴は .security-agent/scans.json に記録します。
必要な値の解決方法
| プレースホルダー | 解決方法 |
|---|---|
<id> (agent space) |
config.agent_space_id |
<region> |
config.region(デフォルト: us-east-1) |
<account> |
aws sts get-caller-identity --query Account --output text |
<role-arn> |
arn:aws:iam::<account>:role/SecurityAgentScanRole |
<bucket> |
security-agent-scans-<account>-<region> |
<WORKSPACE_ID> |
printf '%s' "$(pwd)" | md5sum | cut -c1-12 |
ワークフロー
-
スキャン前チェック。 フルスキャンと同様 — configを読み込み、agent spaceを確認し、必要な値を解決してワークスペースIDを生成します。
-
スキャン対象の基点を確認:
- 未コミットの変更 →
BASE_REF=HEAD(デフォルト) - ブランチ vs main →
BASE_REF=main - カスタムref → ユーザーが指定
- 未コミットの変更 →
-
差分を生成(差分が空の場合は即終了):
cd <absolute-workspace-path> if [ "$BASE_REF" = "HEAD" ]; then git diff HEAD > /tmp/diff.patch else git diff "$BASE_REF..HEAD" > /tmp/diff.patch fi [ -s /tmp/diff.patch ] || { echo "No changes vs $BASE_REF"; exit 1; } -
ワークスペースをzip圧縮(フルスキャンと同じ除外設定、上限2 GB):
cd <absolute-workspace-path> zip -r /tmp/source.zip . \ -x ".git/*" -x ".security-agent/*" -x "node_modules/*" \ -x "__pycache__/*" -x ".venv/*" -x "venv/*" \ -x "dist/*" -x "build/*" -x "target/*" \ -x ".mypy_cache/*" -x ".pytest_cache/*" -x ".tox/*" \ -x ".next/*" -x "cdk.out/*" -x ".DS_Store" -x "*.pyc" -
ソースzipと差分パッチの両方をアップロード:
SCAN_ID="diff-$(date +%s)-$(openssl rand -hex 3)" aws s3 cp /tmp/source.zip s3://<bucket>/security-scans/source/<WORKSPACE_ID>/source.zip aws s3 cp /tmp/diff.patch s3://<bucket>/security-scans/diffs/${SCAN_ID}/diff.patch -
ワークスペース単位のCodeReviewを取得または作成 (フルスキャンと同じロジック —
config.json → code_reviews[<abs_path>]を参照し、存在しなければ作成):aws securityagent create-code-review --agent-space-id <id> --title <title> \ --service-role <role-arn> \ --assets sourceCode=[{s3Location=s3://<bucket>/security-scans/source/<WORKSPACE_ID>/source.zip}] -
diffジョブを開始:
aws securityagent start-code-review-job --agent-space-id <id> --code-review-id <cr-id> \ --diff-source s3Uri=s3://<bucket>/security-scans/diffs/${SCAN_ID}/diff.patchResourceNotFoundExceptionが発生した場合: CodeReviewを再作成してリトライします。 -
codeReviewJobIdを取得し、scan_type: "DIFF"およびbase_refとともにscans.jsonに保存します。 -
ユーザーへ通知: 「Diffスキャンを開始しました。完了まで数分かかります。2分ごとに確認します — 「stop polling」と入力するとポーリングを停止できます。」
-
2分ごとにポーリング:
aws securityagent batch-get-code-review-jobs --agent-space-id <id> --code-review-job-ids <job_id>ステータスが変化したときのみ応答します。COMPLETED になったら検出結果を取得します。
-
検出結果: フルスキャンと同じ形式で表示 — 重大度ごとにグループ化し、レポートを
.security-agent/findings-{scan_id}.mdに書き出します。
ルール
- Diffスキャンは単独で完結します — 事前のフルスキャンは不要です
- ポーリングは2分ごと、それより短い間隔は不可
- ユーザーが指定しない場合は
BASE_REF=HEADをデフォルトとします - タイトル形式:
diff-<git-branch>-<timestamp>(スペース不可) - 差分が空の場合はユーザーに通知して停止 — スキャンは開始しません
原文(English)を表示
AWS Security Agent — Diff Scan
Scan only the code that changed since a git ref. Faster than a full scan — focuses findings on the diff. No prior full scan needed.
Local state
Read .security-agent/config.json for agent_space_id and region. If missing, run the setup-security-agent workflow inline first.
Track scans in .security-agent/scans.json.
Resolving the values you need
| Placeholder | How to resolve |
|---|---|
<id> (agent space) |
config.agent_space_id |
<region> |
config.region (default us-east-1) |
<account> |
aws sts get-caller-identity --query Account --output text |
<role-arn> |
arn:aws:iam::<account>:role/SecurityAgentScanRole |
<bucket> |
security-agent-scans-<account>-<region> |
<WORKSPACE_ID> |
printf '%s' "$(pwd)" | md5sum | cut -c1-12 |
Workflow
-
Pre-scan checks. Same as full scan — read config, verify agent space, resolve values, generate workspace ID.
-
Ask what to scan against:
- Uncommitted changes →
BASE_REF=HEAD(default) - Branch vs main →
BASE_REF=main - Custom ref → user provides
- Uncommitted changes →
-
Generate diff (fail fast if empty):
cd <absolute-workspace-path> if [ "$BASE_REF" = "HEAD" ]; then git diff HEAD > /tmp/diff.patch else git diff "$BASE_REF..HEAD" > /tmp/diff.patch fi [ -s /tmp/diff.patch ] || { echo "No changes vs $BASE_REF"; exit 1; } -
Zip the workspace (same exclusions as full scan, 2 GB limit):
cd <absolute-workspace-path> zip -r /tmp/source.zip . \ -x ".git/*" -x ".security-agent/*" -x "node_modules/*" \ -x "__pycache__/*" -x ".venv/*" -x "venv/*" \ -x "dist/*" -x "build/*" -x "target/*" \ -x ".mypy_cache/*" -x ".pytest_cache/*" -x ".tox/*" \ -x ".next/*" -x "cdk.out/*" -x ".DS_Store" -x "*.pyc" -
Upload both source zip and diff patch:
SCAN_ID="diff-$(date +%s)-$(openssl rand -hex 3)" aws s3 cp /tmp/source.zip s3://<bucket>/security-scans/source/<WORKSPACE_ID>/source.zip aws s3 cp /tmp/diff.patch s3://<bucket>/security-scans/diffs/${SCAN_ID}/diff.patch -
Get or create per-workspace CodeReview (same logic as full scan — lookup
config.json → code_reviews[<abs_path>], create if absent):aws securityagent create-code-review --agent-space-id <id> --title <title> \ --service-role <role-arn> \ --assets sourceCode=[{s3Location=s3://<bucket>/security-scans/source/<WORKSPACE_ID>/source.zip}] -
Start the diff job:
aws securityagent start-code-review-job --agent-space-id <id> --code-review-id <cr-id> \ --diff-source s3Uri=s3://<bucket>/security-scans/diffs/${SCAN_ID}/diff.patchIf
ResourceNotFoundException: recreate CodeReview and retry. -
Capture
codeReviewJobId. Persist toscans.jsonwithscan_type: "DIFF"andbase_ref. -
Tell user: "Diff scan started. Takes a few minutes. I'll check every 2 minutes — say 'stop polling' to opt out."
-
Poll every 2 minutes:
aws securityagent batch-get-code-review-jobs --agent-space-id <id> --code-review-job-ids <job_id>Only respond when status changes. On COMPLETED → fetch findings.
-
Findings: same presentation as full scan — grouped by severity, report written to
.security-agent/findings-{scan_id}.md.
Rules
- Diff scans are standalone — no prior full scan needed
- Poll every 2 minutes, not faster
- Default to
BASE_REF=HEADif user doesn't specify - Title:
diff-<git-branch>-<timestamp>(no spaces) - If diff is empty, tell user and stop — don't start a scan
原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。