AWS セキュリティ エージェント(クラウド上のセキュリティ監視ツール)を使って、指定した git の参照地点以降に変更されたコード部分だけを素早くスキャンします。 次のような場合に使用: - ユーザーが変更内容のスキャンを依頼したとき - 差分スキャン(変更部分のみを確認)を実行するよう指示されたとき - 変更コードのセキュリティ上の問題を確認したいとき - コミット前(コードを確定する前)のセキュリティチェック - プルリクエスト前(コード統合申請前)のセキュリティチェック - その他のコミット前・プッシュ前(サーバーへの送信前)のセキュリティ確認
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.
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(デフォルト)BASE_REF=main差分を生成(差分が空の場合は即終了):
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.patch
ResourceNotFoundException が発生した場合: 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 に書き出します。
BASE_REF=HEAD をデフォルトとしますdiff-<git-branch>-<timestamp>(スペース不可)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.
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.
| 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 |
Pre-scan checks. Same as full scan — read config, verify agent space, resolve values, generate workspace ID.
Ask what to scan against:
BASE_REF=HEAD (default)BASE_REF=mainGenerate 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.patch
If ResourceNotFoundException: recreate CodeReview and retry.
Capture codeReviewJobId. Persist to scans.json with scan_type: "DIFF" and base_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.
BASE_REF=HEAD if user doesn't specifydiff-<git-branch>-<timestamp> (no spaces)原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。